我试图让我的elisp函数动态提示。我想要像replace-regexp那样,它将显示您输入的最后一个正则表达式。我尝试了 (interactive (concat "sab" "bab"))) 但那行不通!
我还尝试了像格式化消息一样的消息 (interactive "s %s" last-used-regexp)
但那也不起作用! 有人知道如何做到这一点吗?
谢谢!
M-x find-function
是你的好朋友。它将通过显示源代码告诉你Emacs中任何东西的工作方式。使用它,我发现query-regexp-replace
调用query-replace-read-args
,后者调用query-replace-read-from
,后者又调用read-from-minibuffer
,使用上一次使用的正则表达式创建提示,该表达式保存在点对query-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
。当然,您可以使用上/下箭头浏览提示历史记录。