Subject: Re: bug#10477: zap-to-char should allow picking from history

From: Juri Linkov <[email-masked]>
Date: Tue, 29 Oct 2019 00:17:56 +0200

>> Using read-from-minibuffer would allow this for free.
>
> How would you implement read-char-with-history using
> read-from-minibuffer?  Rebind self-insert-command?

Exactly, by rebinding self-insert-command:

(defvar read-char-from-minibuffer-map
  (let ((map (make-sparse-keymap)))
    (set-keymap-parent map minibuffer-local-map)
    (define-key map [remap self-insert-command]
      (lambda ()
        (interactive)
        (delete-minibuffer-contents)
        (insert (event-basic-type last-command-event))
        (exit-minibuffer)))
    map))

(defun read-char-from-minibuffer (prompt)
  (read-from-minibuffer prompt nil
   read-char-from-minibuffer-map nil
  'read-char-from-minibuffer-history))

(read-char-from-minibuffer "Please type a character: ")