¿Es un programa Lisp tanto en modo prog como en modo lisp?

7

Al leer (emacs) Program Modes:

Al ingresar a un modo de lenguaje de programación se ejecutan las funciones de Lisp personalizadas especificadas en la variable de enlace prog-mode-hook, seguidas de las especificadas en el enlace de modo propio del modo (consulte Modos principales). Por ejemplo, al ingresar al modo C se ejecutan los ganchos prog-mode-hooky c-mode-hook. Consulte Ganchos, para obtener información sobre ganchos.

¿Significa que la programación en C se ejecuta bajo prog-modey c-mode?

¿Es prog-modeun modo universal para todos los programas?

También implica que prog-modees un modo principal como c-mode.

Sin embargo:

Los modos principales son mutuamente excluyentes; cada búfer tiene uno y solo un modo principal en cualquier momento.

(de (emacs) Modes)

¿Qué hace prog-modeaquí? ¿Es un modo menor pero se menciona ampliamente en la parte del modo mayor?

Cálculo
fuente

Respuestas:

10

¿Significa que la programación en C se ejecuta bajo prog-modey c-mode?

No, porque, como luego citan:

Los modos principales son mutuamente excluyentes; cada búfer tiene uno y solo un modo principal en cualquier momento.

Por lo tanto, su búfer solo puede estar en uno u otro.

¿Es prog-modeun modo universal para todos los programas?

No, es un modo primario universal para todos los modos de programación.

También implica que prog-modees un modo principal como c-mode.

Sí, prog-modees un modo principal normal derivado de fundamental-mode. Del mismo modo c-modees un modo mayor normal derivado de prog-mode. La diferencia es que prog-modesolo está bastante desnudo y no está destinado a habilitarse directamente.

¿Qué hace prog-modeaquí? ¿Es un modo menor pero se menciona ampliamente en la parte del modo mayor?

No, es un modo mayor normal. Se proporciona como una convención para que los principales autores de modos deriven sus modos, y como una conveniencia para que los usuarios personalicen más fácilmente todos sus modos de programación.

Por ejemplo, si un usuario desea habilitar show-trailing-whitespaceen todos sus modos de programación, primero puede definir un enlace como el siguiente:

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

En lugar de agregar esta función al enlace de modo de cada modo de programación que usan, así:

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

En su lugar, simplemente pueden agregarlo al enlace de modo del modo principal, es decir prog-mode-hook:

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

Como tal, prog-modeproporciona configuraciones comunes para todos los modos de programación derivados de él.

Albahaca
fuente
Impresionante explicación, ty.
Cálculo
2
Puede encontrar más detalles sobre los modos derivados y los ganchos de modo en esta respuesta: stackoverflow.com/a/19295380/324105
phils