view emacs/prompt-for-word.el @ 3:870e13483642

sum outputs from multiple uniq -c, maybe?
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Tue, 25 May 2021 14:00:47 -0400
parents 509549c55989
children
line wrap: on
line source

;; Last edited: Wed Nov 14 14:20:08 1990
;;; define an interlisp-style prompt-for-word
(provide 'prompt-for-word)

(defun prompt-for-word (prompt candidate completion-table keymap)
  "prompt for a word using PROMPT, and CANDIDATE as first choice.
If any inserting characters are typed, they replace the candidate.
Uses KEYMAP if non-nil, otherwise
if completion-table is non-nil,
  uses minibuffer-local-must-match-map plus ^N to exit as is,
  thereby allowing New answers,
otherwise uses minibuffer-local-map."
  (let ((current-window (selected-window))
	(echo-keystrokes 0)
	char)
    (select-window (minibuffer-window))
    (erase-buffer)
    (insert prompt candidate)
    (setq char (read-char))
    (let ((str (make-string 1 char)))
      (if (eq (or (local-key-binding str)
		  (global-key-binding str))
	      'self-insert-command)
	  (setq candidate nil)))
    (select-window current-window)
    (if (boundp 'unread-command-event)
	;; lemacs
	(setq unread-command-event
	      (character-to-event char))
      (setq unread-command-char char))
    (let ((minibuffer-completion-table completion-table)
	  (minibuffer-completion-confirm nil))
      ;; not quite the same as completing-read, because you can't
      ;; get m-c-c nil and m-m-map simultaneously
      (read-from-minibuffer prompt candidate
			    (or keymap
				(if completion-table
				    ;; allow ^N to exit with non-match for
				    ;; new names
				    pfw-map
				  minibuffer-local-map))))))

(defvar pfw-map (let ((new (copy-keymap minibuffer-local-must-match-map)))
		  (define-key new "\C-n" 'exit-minibuffer)
		  new)
  "special completion map for prompt-for-word (q.v.)")