Befindet sich ein Lisp-Programm sowohl im Prog-Modus als auch im Lisp-Modus?

7

Beim Lesen (emacs) Program Modes:

Wenn Sie einen Programmiersprachenmodus aufrufen, werden die in der Hook-Variablen angegebenen benutzerdefinierten Lisp-Funktionen ausgeführt prog-mode-hook, gefolgt von denen, die im eigenen Modus-Hook des Modus angegeben sind (siehe Hauptmodi). Wenn Sie beispielsweise in den C-Modus wechseln, werden die Hooks prog-mode-hookund ausgeführt c-mode-hook. Informationen zu Hooks finden Sie unter Hooks.

Bedeutet das, dass die C-Programmierung unter prog-modeund ausgeführt wird c-mode?

Ist prog-modeein universeller Modus für alle Programme?

Dies impliziert zusätzlich, dass dies prog-modeein Hauptmodus ist c-mode.

Dennoch:

Hauptmodi schließen sich gegenseitig aus. Jeder Puffer hat zu jeder Zeit nur einen Hauptmodus.

(von (emacs) Modes)

Was macht prog-modeman hier, ist es ein Nebenmodus, der aber im Hauptmodus weit verbreitet ist?

Infinitesimalrechnung
quelle

Antworten:

10

Bedeutet das, dass die C-Programmierung unter prog-modeund ausgeführt wird c-mode?

Nein, denn wie Sie später zitieren:

Hauptmodi schließen sich gegenseitig aus. Jeder Puffer hat zu jeder Zeit nur einen Hauptmodus.

Ihr Puffer kann sich also nur in dem einen oder anderen befinden.

Ist prog-modeein universeller Modus für alle Programme?

Nein, es ist ein universeller übergeordneter Modus für alle Programmiermodi.

Dies impliziert zusätzlich, dass dies prog-modeein Hauptmodus ist c-mode.

Ja, prog-modeist ein normaler Hauptmodus abgeleitet von fundamental-mode. Ähnlich c-modeist ein normaler Hauptmodus abgeleitet von prog-mode. Der Unterschied besteht darin, dass prog-modeallein ziemlich kahl ist und nicht direkt aktiviert werden soll.

Was macht prog-modeman hier, ist es ein Nebenmodus, der aber im Hauptmodus weit verbreitet ist?

Nein, es ist ein normaler Hauptmodus. Es wird als Konvention für Hauptmodusautoren bereitgestellt, um ihre Modi abzuleiten, und als Benutzerfreundlichkeit, um alle ihre Programmiermodi einfacher anpassen zu können.

Wenn ein Benutzer beispielsweise show-trailing-whitespacein allen Programmiermodi aktivieren möchte , kann er zunächst einen Hook wie den folgenden definieren:

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

Anstatt diese Funktion dem Modus-Hook jedes von ihnen verwendeten Programmiermodus hinzuzufügen, wie folgt:

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

Sie können es stattdessen einfach zum Modus-Hook des übergeordneten Modus hinzufügen, dh prog-mode-hook:

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

Als solches prog-modebietet gemeinsame Einstellungen für alle Programmiermodi daraus abgeleitet.

Basilikum
quelle
beeindruckende Erklärung, ty.
Kalkül
2
Weitere Details zu abgeleiteten Modi und Modus-Hooks finden Sie in dieser Antwort: stackoverflow.com/a/19295380/324105
phils