分享代码:minibuffer中的默认输入

在使用 evil-ex,也就是冒号+命令时,有一个非常有趣且实用的功能,输入冒号后,minibuffer 会显示上一次执行的命令,比如 :wq, 确认可以直接执行这个命令,但是输入任意字符,就会把原先的 wq 直接覆盖,接收新的命令输入

我参考evil-ex并简化了相关代码,有需要的可以看一下

(let ((input (minibuffer-with-setup-hook 'maple-input-setup
               (read-string "prompt: " (propertize "默认内容" 'face 'shadow)))))
  (message input))

(defun maple-input-setup()
  (add-hook 'after-change-functions 'maple-input-update nil t))

(defun maple-input-update(&optional beg end len string)
  (let ((string (buffer-substring-no-properties beg end)))
    (delete-minibuffer-contents)
    (insert string)
    (remove-hook 'after-change-functions 'maple-input-update t)))

相关文章: Emacs笔记之minibuffer默认输入

3 个赞