Emacs Elisp 动态交互提示

11

我试图让我的elisp函数动态提示。我想要像replace-regexp那样,它将显示您输入的最后一个正则表达式。我尝试了 (interactive (concat "sab" "bab"))) 但那行不通!

我还尝试了像格式化消息一样的消息 (interactive "s %s" last-used-regexp)

但那也不起作用! 有人知道如何做到这一点吗?

谢谢!

2个回答

16

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)))

该命令会弹出一个提示框,并将最后输入的正则表达式作为默认值。


9
使用变量记录输入历史,并与列表进行交互:
(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。当然,您可以使用上/下箭头浏览提示历史记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接