2009-04-16 125 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