2009-04-16 77 views
11

我想从我的elisp函数中获得动态提示。我想要一个像replace-regexp的地方,它会显示输入的最后一个正则表达式。我试过 (交互式 (concat“sab”“bab”))) 不起作用!Emacs Elisp动态交互式提示

我也尝试过类似的消息格式 (互动“s%S”上次使用的,正则表达式)

和不工作! 任何人都知道如何做到这一点?

谢谢!

回答

15

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。您当然可以上/下箭头在提示符处浏览历史记录。

+1

谢谢不错,现在我所需要的就是完成... – To1ne 2011-05-05 10:21:17