Mercurial > hg > lib > markup
view emacs/prompt-for-word.el @ 0:509549c55989
from elsewhere
author | Henry S. Thompson <ht@inf.ed.ac.uk> |
---|---|
date | Tue, 25 May 2021 13:57:42 -0400 |
parents | |
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.)")