2012-04-18 61 views
2

https://stackoverflow.com/a/663636/391104如何下面的語句是根據我的調查emacs的

(defun my-c++-mode-hook() 
    (setq c-basic-offset 4) 
    (c-set-offset 'substatement-open 0)) 
(add-hook 'c++-mode-hook 'my-c++-mode-hook) 

解釋,我只需要在上面的代碼添加到我的.emacs,然後它的工作原理神奇。

Q1>defun my-c++-mode-hook()是什麼意思? lisp中的函數定義?

Q2>以下行的用法是什麼?我應該在哪裏觸發它,或者它是由emacs的自動運行

(add-hook 'c++-mode-hook 'my-c++-mode-hook) 

謝謝

+0

這些是基本的Elisp構造。我建議你在函數調用附近用'C-h f'查看Emacs中的文檔字符串,例如'add-hook','defun'等;和變量附近的「C-h v」等。 'c-basic-offset'等。如果您查閱了[Emacs Lisp Intro](http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/index.html) 。這也可以在Emacs中作爲信息頁面使用。 GL – suvayu 2012-04-19 15:42:51

回答

5

Q1:是的,這是一個函數的定義(因此defun)。第二個符號是名稱,後綴名爲'-hook',用於向人類表明它打算用作鉤子。它可以被賦予(幾乎)任何任意名稱而不改變其行爲。空的()表示該函數不帶任何參數。其他一切都是函數的主體。 Q2:基本上,這會將一個指向前一個函數的指針添加到在啓動c++-mode時調用的函數列表中。無論何時啓動一個模式,Emacs都會查找模式鉤子,並運行其中的所有功能。函數定義和添加鉤子行都需要放入.emacs中,並且它們將在您啓動emacs時自動運行。

爲了將您的頭圍繞在elisp上,強烈建議使用介紹。它附帶emacs,可以從信息系統訪問:C-h i,然後查找Elisp簡介。