action-alist ", ")
" ")
""))
- ;; Make a map that defines all the user keys as `user'.
+ ;; Make a map that defines each user key as a vector containing
+ ;; its definition.
(map (cons 'keymap
- (append (mapcar (function
- (lambda (elt)
- (cons (car elt) 'user)))
+ (append (mapcar (lambda (elt)
+ (cons (car elt) (vector (nth 1 elt))))
action-alist)
query-replace-map)))
(actions 0)
(setq prompt (funcall prompter elt))
(if (stringp prompt)
(progn
+ (setq quit-flag nil)
;; Prompt the user about this object.
(let ((cursor-in-echo-area t))
(message "%s(y, n, !, ., q, %sor %s) "
prompt user-keys
(key-description (char-to-string help-char)))
(setq char (read-event)))
+ ;; Show the answer to the question.
+ (message "%s(y, n, !, ., q, %sor %s) %s"
+ prompt user-keys
+ (key-description (char-to-string help-char))
+ (single-key-description char))
(setq def (lookup-key map (vector char)))
(cond ((eq def 'exit)
(setq next (function (lambda () nil))))
(funcall actor elt)
(setq actions (1+ actions)
next (function (lambda () nil))))
+ ((eq def 'quit)
+ (setq quit-flag t)
+ (setq next (` (lambda ()
+ (setq next '(, next))
+ '(, elt)))))
((eq def 'automatic)
;; Act on this and all following objects.
(if (eval (funcall prompter elt))
(setq next (` (lambda ()
(setq next '(, next))
'(, elt)))))
- ((eq def 'user)
+ ((vectorp def)
;; A user-defined key.
- (if (funcall (nth 1 tail) elt) ;Call its function.
+ (if (funcall (aref def 0) elt) ;Call its function.
;; The function has eaten this object.
(setq actions (1+ actions))
;; Regurgitated; try again.