Por diseño, fundamental-mode
es básico, ya que se supone que otros modos principales derivan de este.
Desde la página de información (elisp) Major Modes
, tenemos:
Este es el comando de modo principal para el modo Fundamental. A diferencia de otros comandos de modo, no ejecuta ningún enlace de modo (* nota Convenciones de modo mayor: :), ya que se supone que no debe personalizar este modo.
Por esta razón,
- No tenemos a
fundamental-mode-hook
. - Además
my-minor-mode
, no se habilita SOLO en este modo principal, los búferes a pesar de tener(global-my-minor-mode 1)
en mi configuración.
A continuación funcionaría, pero solo si escribí manualmente M-x fundamental-mode
:
(add-hook 'after-change-major-mode-hook #'my-minor-mode)
No ayuda en el siguiente caso donde fundamental-mode
se crea un búfer (* abcd *) por defecto:
(with-current-buffer (get-buffer-create "*abcd*")
(insert "Hello world"))
¿Por qué quiero habilitar un modo menor en fundamental-mode
?
Me gusta mantener mis combinaciones de teclas personalizadas en mi mapa de modo menor. Tengo este modo menor habilitado globalmente (pero no se habilita solo en fundamental-mode
buffers).
Aquí hay un caso de uso que hizo que haga esta pregunta aquí. Al hacer M-x esup
( esup
paquete), crea un *esup-log*
búfer con fundamental-mode
su modo principal. Pero cada vez que necesito habilitar mi modo menor manualmente para usar mis enlaces convenientes.
Me gustaría habilitarlo my-minor-mode
de una manera verdaderamente global, fundamental-mode
o no.
Actualización 1:
Aquí está mi definición de menor importancia modo: modi-mode
.
Actualización 2:
Basado en el comentario de @npostavs , revisé las diferencias entre mi modo menor modi-mode
y override-global-mode
en use-package/bind-key.el
. Y resulta que el valor de inicio de mi modo es nil
y el de override-global-mode
es t
.
Si cambio el valor de inicio de mi modo a t
, ¡también se habilita en los búferes de modo fundamental! Pero el acto de (global-modi-mode 1)
no termina con el mismo resultado. ¿Eso es extraño? ¿Probablemente un error?
fuente
fundamental-mode
búferes para mí, por lo que tal vez el problema esté en la definición de su modo.override-global-mode
use-package
implementa eso.nil
; pero lo habilito globalmente.buffer.c
, parece que seget-buffer-create
ejecutabuffer-list-update-hook
al final de su función, ¿tal vez podría adjuntar su propia función con condiciones a ese gancho?Respuestas:
La única forma en que puedo habilitar un modo menor por defecto en los
fundamental-mode
búferes es establecer el valor de inicio de ese modo menor ent
.Tenga en cuenta que simplemente activar un modo menor globalizado (ver
C-h i g (elisp) Defining Minor Modes
) con valor de inicionil
no hace lo mismo. En este caso, sefundamental-mode
creará un búfer con este modo menor desactivado.Lo anterior, por supuesto, funcionará solo si controla la fuente del modo menor. Para todos los demás modos menores que vienen con diferentes paquetes, si desea habilitar un modo menor de forma predeterminada en las
fundamental-mode
memorias intermedias, deberá hacerfuente
(setq-default 'the-minor-mode t)
para obtener el mismo efecto.(setq-default modi-mode 1)
a la funciónturn-on-modi-mode
y el(setq-default modi-mode nil) to the function
turn-off-modi-mode`, entonces sería un paso más a realidad a nivel mundial activar y desactivar el modo.No lo use
fundamental-mode
, al menos no de forma interactiva. Raramente quieres estar adentrofundamental-mode
. Casi siempre hay algo mejor.El objetivo
fundamental-mode
es no tener el manejo habitual en modo mayor (ganchos, etc.). Puedes pensarfundamental-mode
como una especie de clase abstracta.Si algún paquete lo coloca en un búfer que está dentro
fundamental-mode
, haga lo que necesita hacer para evitar esto: use algún otro modo para ello.Considere la posibilidad de personalizar
major-mode
para que no sea por defectofundamental-mode
. (Yo usoindented-text-mode
)Anteriormente había algo
default-major-mode
para esto, que creo que era un poco más claro, pero decidieron desaprobar eso (todavía funciona, por supuesto).fuente
fundamental-mode
. El quid de la cuestión es que cuando cualquier paquete se utilizaget-buffer-create
para generar un búfer temporal, ese búfer se crea confundamental-mode
el modo principal. En esos búferes, mi modo menor no estará habilitado de manera predeterminada (porque su valor de inicio es nulo; aunque lo habilité globalmente).esup
,keyfreq
get-buffer-create
no hace nada para establecer el modo mayor (o cualquier modo menor). ¿Debería (para el paquete en cuestión)? Si es así, considere contactar al responsable del paquete. Si no, considera activar tu modo principal o secundario preferido. IOW, si se trata de lo que quieres, y no de lo que el paquete debería configurar en general, entonces depende de ti configurarlo como quieras.La función
get-buffer-create
se define enbuffer.c
, y al final de esa función llama abuffer-list-update-hook
. Tal gancho podría usarse para ejecutar una función personalizada, pero es posible que sea necesario agregar ciertas condiciones para evitar que la función personalizada se active en momentos inoportunos cuando otras funciones invocan ese gancho.fuente