2012-04-18 12 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)の本。これはInfoページとしてEmacsからも利用できます。 GL – suvayu

答えて

5

Q1ありがとう:はい、これは関数定義(したがってdefun)です。 2番目のシンボルは名前で、フックとして使用することを人間に指示するための接尾辞 '-hook'が付いています。その挙動を変えることなく(ほとんど)任意の名前を付けることができます。空の()は、関数が引数を取らないことを示します。他のすべてが関数の本体です。

Q2:これは、基本的に、前の関数へのポインタを、c++-modeの起動時に呼び出される関数のリストに追加します。モードを開始するたびに、Emacsはモードフックを探し、その中のすべての機能を実行します。関数定義とadd-hook行の両方を.emacsに入れる必要があり、emacsの起動時に自動的に実行されます。

elispの周りを頭で囲むには、はじめに紹介することを強くおすすめします。それはemacsと一緒に出荷され、infoシステムからアクセスすることができます:C-h i、次にElispの紹介を探してください。

関連する問題