有沒有辦法觸發執行除M-x myfun以外的emacs lisp功能?我希望在每次更改緩衝區時重新調用該函數。持續執行emacs lisp功能
背景:我有一個數字表有一些錯誤。該表具有列總數和可用於識別錯誤的其他功能。我的elisp函數突出顯示可疑的數字列。我想要的是,只要數字得到糾正,突出顯示就會消失,而不會重複調用突出顯示錯誤功能。
在Excel中的類似功能被稱爲,我相信,「條件格式」
有沒有辦法觸發執行除M-x myfun以外的emacs lisp功能?我希望在每次更改緩衝區時重新調用該函數。持續執行emacs lisp功能
背景:我有一個數字表有一些錯誤。該表具有列總數和可用於識別錯誤的其他功能。我的elisp函數突出顯示可疑的數字列。我想要的是,只要數字得到糾正,突出顯示就會消失,而不會重複調用突出顯示錯誤功能。
在Excel中的類似功能被稱爲,我相信,「條件格式」
您在第一段中尋找的概念是掛鉤。一個hook變量是當某個事件發生時執行的函數列表。大多數鉤子變量的名字都以-hook
結尾。每次鍵入內容或更改緩衝區時,都會執行掛鉤after-change-functions
。掛鉤在Emacs Lisp手冊的「掛鉤」標題下討論。
但是,考慮到您要做的事情,使用Emacs的突出顯示機制會更容易。解決方案可能很簡單,只需在正確的位置添加正則表達式即可。
包含結構化文本(尤其是編程語言)的大多數文件都使用字體鎖定機制突出顯示。這在Emacs和Emacs Lisp手冊的「字體鎖定」下都有記錄。特別參見功能font-lock-add-keywords
,對此,Emacs手冊給出了一個幾乎與您相同的示例。還有some information on the Emacs wiki。
新增:
字體鎖可以超越正則表達式;不幸的是,文檔僅限於font-lock-keywords
的文檔字符串中的簡潔說明。 cperl-mode.el
中有幾個簡單的例子(儘管它們有點埋在大衆中)。該wiki還參考使用此功能的ctypes.el
。這是一個示例,其中突出顯示了錯誤的整數加法。
(defun maybe-warn-about-addition()
(let ((x (string-to-int (match-string 1)))
(y (string-to-int (match-string 2)))
(z (string-to-int (match-string 3))))
(if (/= (+ x y) z)
font-lock-warning-face)))
(font-lock-add-keywords
nil
'(("\\s-\\([0-9]+\\)\\s-*\\+\\s-*\\([0-9]+\\)\\s-*=\\s-*\\([0-9]+\\)\\s-"
(3 (maybe-warn-about-addition) t))))
即使是正則表達式可以通過查找你想要突出(函數名MATCHER
,使用的詞彙從文檔字符串)什麼界限任意代碼來代替。在標準C模式下有一個字體鎖定關鍵字的高級示例(cc-fonts.el
)。
加入你的函數變量after-change-functions
。
當然,你可以做到這一點。查看'c-mode'實現'電子支架'。 – 2010-08-06 17:48:17