我正在尝试从我的 elisp 函数中获得动态提示。我想要像 replace-regexp 这样的东西,它会显示你最后输入的正则表达式。我试过(交互式(concat“sab”“bab”)))不起作用!
我也尝试过类似格式的消息(交互式“s %s”last-used-regexp)
那是行不通的!有人知道怎么做吗?
谢谢!
M-x find-function
是你的朋友。它将通过向您展示源代码来告诉您 emacs 中的任何内容是如何工作的。使用它,我发现query-regexp-replace
调用query-replace-read-args
which calls query-replace-read-from
which callsread-from-minibuffer
使用从上次使用的正则表达式创建的提示,该提示保存在 dotted pairquery-replace-defaults
中。
所以:
(defun my-func ()
"Do stuff..."
(interactive)
(read-from-minibuffer "Regexp? " (first query-replace-defaults)))
是一个以最后输入的正则表达式作为默认值的提示的命令。
使用变量作为输入历史,并与列表交互:
(defvar my-func-history nil)
(defun my-func (str)
(interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history)))
(insert str))
如果您最初不想在其中输入最后一个值,请将 更改(car my-func-history)
为nil
。您当然可以向上/向下箭头在提示符处浏览历史记录。