2016-06-09 37 views
1

我已經閱讀了大部分的手冊,並且正在慢慢地掌握我需要製作主要模式的東西等等。我沒有遇到任何解釋Emacs應用主要模式的循環/循環的內容模式(甚至小模式)。emacs如何應用主模式?

例如:在輸入模式下輸入if,突然if爲語法高亮顯示。我知道只需輸入常用字母即可達到self-insert-command。那麼emacs如何對緩衝區中的變化做出反應,除非self-insert-command觸發和事件,或者只是改變緩衝區觸發和事件?

+0

請將您的問題縮小到特定的範圍。你首先要說明你想要了解啓用主模式時發生的事件的循環,然後你蜿蜒進入有關'if'和語法的內容,然後繼續改變緩衝區。 。 。現在的問題應該是封閉的,因爲它太寬泛。發生的一些事情是用C編寫的,並烘焙到Emacs可執行文件中,其中一些是Lisp。我一直在使用Emacs已經有3.5年了,我可以說沒有什麼是簡單的 - 你可以花幾個小時/幾天的時間向後追溯,以找到東西開始的地方。 – lawlist

+0

要開始漫長而無休止的Emacs旅程,您可以使用以下函數開始:'M-x describe-key',然後鍵入一個鍵盤快捷方式,併爲您提供該函數的名稱。如果您安裝了源代碼,您可以使用鼠標跟隨鏈接。如果您知道函數或變量或面的名稱,並且想要讀取源代碼,請鍵入「M-x find-function」或「M-x find-variable」或「M-x find-face」。如果你已經安裝了c源代碼並且正確設置了它的位置變量,你也可以使用Emacs跳轉到源代碼。 – lawlist

+0

Emacs擁有大量的通用功能,任何給定的模式都可以嵌入到這些功能中(並在頂層實現新功能)。模式(或者其他任何代碼)可以在某些特定時間安排事情發生,通常通過向* hook添加一個函數*('post-command-hook'和'self-insert-hook'是兩個相當普遍的用途例子),或通過使用*定時器*(正常和*空閒*品種)。不過,任何*特定*功能都可能與其他任何功能不同。就循環/循環而言,頂層是'C-h i g(elisp)命令循環',其他所有事情都從那裏發生。 – phils

回答

0

W.r.t語法高亮顯示,這是由緩衝區的任何更改觸發的,不管使用哪個命令。爲此,保持突出顯示最新的包(通常代表字體鎖使用jit-lock)使用after-change-functions。請參閱C-hvafter-change-functionsRET並檢查Emacs Lisp參考手冊中的相應文檔(可從「幫助」菜單訪問)。