2011-05-06 66 views
5

我是新來的elisp。 http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes列出了用於交互參數的'代碼字符',當提示用戶輸入時,AFAIK修改輸入機制的行爲(例如:如果您指定輸入是存在的文件名,emacs的自動完成功能將查找文件名存在)。Emacs lisp - 自動完成書籤名稱

我試圖找到一個已經存在的書籤名稱的代碼 - 即:emacs將提示用戶輸入書籤名稱,並在按下標籤emacs將顯示可能的書籤名稱完成。

這樣的代碼是否存在?

回答

1

爲此使用completing-read。你可以寫提示用戶,像這樣一個書籤功能:

(defun my-function() 
    (interactive) 
    (let ((bookmark (completing-read "Bookmark: " (bookmark-all-names)))) 
    ...)) 

如果你喜歡的提示是的interactive部分(這樣的結果會被自動綁定到你的函數的參數),你可以使用以下替代:

(defun my-function (bookmark) 
    (interactive (list (completing-read "Bookmark: " (bookmark-all-names)))) 
    ...) 

爲Emacs查找功能bookmark-all-names你也必須以下行添加到您的.emacs文件:

(require 'bookmark) 
+0

這就是那裏的大部分 - 你知道是否有一些emacs用來存儲書籤的默認列表? – Taras 2011-05-09 02:42:43

+0

這應該是'bookmark-all-names'返回的列表。你能否檢查上面更新的代碼?我自己不使用書籤......如果書籤列表爲空,會發生什麼情況? – Thomas 2011-05-10 10:56:25

+0

很抱歉對於遲到的回覆 - 由於某種原因,SO沒有通過電子郵件通知我(??)。我收到以下錯誤消息:符號的函數定義是void:bookmark-all-names。更新:我認爲你需要將書籤列表加載到緩衝區中(M-x bookmark-bmenu-list) – Taras 2011-05-13 04:23:40

1

功能bookmark-completing-read是完成書籤名稱的標準方式。你做不是需要這個下級函數completing-read。例如:

 
    (bookmark-completing-read "Bookmark" bookmark-current-bookmark) 

如果使用Bookmark+然後bookmark-completing-read接受一些可選的參數(類似於completing-read),可以幫助:

  • ALIST - 書籤的ALIST從(而不是所有書籤選擇:bookmark-alist

  • PRED - 篩選候選書籤列表的謂詞

  • HIST - 輸入歷史列表

還有一個功能,bmkp-completing-read-lax,如果你想接受一個新的書籤名稱或完全與現有的名字,這是有用的非嚴格的版本。