Lispプログラムはprogモードとlispモードの両方にありますか?


7

読むと(emacs) Program Modes

プログラミング言語モードに入ると、フック変数prog-mode-hookで指定されたカスタムLisp関数が実行され、続いてモード自体のモードフックで指定された関数が実行されます(メジャーモードを参照)。たとえば、Cモードに入るprog-mode-hookと、フックとが実行されますc-mode-hook。フックについては、フックを参照してください。

Cプログラミングがprog-modeandの下で実行されているということc-modeですか?

あるprog-modeすべてのプログラムのための普遍的なモードは?

さらに、prog-modeがのようなメジャーモードであることを意味しますc-mode

それにもかかわらず:

主要なモードは相互に排他的です。各バッファには、常に1つのメジャーモードしかありません。

(から(emacs) Modes

prog-modeここで何をしますか、それはマイナーモードですが、メジャーモード部分で広く述べられていますか?

回答:


10

Cプログラミングがprog-modeandの下で実行されているということc-modeですか?

いいえ、後で引用するように:

主要なモードは相互に排他的です。各バッファには、常に1つのメジャーモードしかありません。

したがって、バッファはどちらか一方にのみ存在できます。

あるprog-modeすべてのプログラムのための普遍的なモードは?

いいえ、すべてのプログラミングモードで共通のモードです。

さらに、prog-modeがのようなメジャーモードであることを意味しますc-mode

はい、prog-modeから派生した通常のメジャーモードですfundamental-mode。同様c-modeに、から派生した通常のメジャーモードですprog-mode。違いは、それprog-modeだけではまったく裸であり、直接有効にすることを意図していないことです。

prog-modeここで何をしますか、それはマイナーモードですが、メジャーモード部分で広く述べられていますか?

いいえ、通常のメジャーモードです。これは、メジャーモードの作成者がモードを派生させるための規則として、およびユーザーがすべてのプログラミングモードをより簡単にカスタマイズできるようにするための便宜として提供されています。

たとえば、ユーザーがshow-trailing-whitespaceすべてのプログラミングモードで有効にする場合、最初に次のようなフックを定義できます。

(defun my-show-trailing-space ()
  "Enable `show-trailing-whitespace' in the current buffer."
  (setq show-trailing-whitespace t))

この関数を、使用するすべてのプログラミングモードのモードフックに追加する代わりに、次のようにします。

(mapc (lambda (hook)
        (add-hook hook #'my-show-trailing-space))
      '(c-mode-common-hook
        emacs-lisp-mode-hook
        perl-mode-hook
        prolog-mode-hook
        ...))

代わりに、親モードのモードフックに追加するだけですprog-mode-hook

(add-hook 'prog-mode-hook #'my-show-trailing-space)

そのため、prog-modeそこから派生するすべてのプログラミングモードに共通の設定を提供します。


印象的な説明、ty。
微積分

2
あなたはこの答えで派生モードとモードのフックについての詳細を見つけることができます:stackoverflow.com/a/19295380/324105は
PHILS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.