Por diseño, fundamental-modees 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-modese 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-modebuffers).
Aquí hay un caso de uso que hizo que haga esta pregunta aquí. Al hacer M-x esup( esuppaquete), crea un *esup-log*búfer con fundamental-modesu modo principal. Pero cada vez que necesito habilitar mi modo menor manualmente para usar mis enlaces convenientes.
Me gustaría habilitarlo my-minor-modede una manera verdaderamente global, fundamental-modeo 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-modey override-global-modeen use-package/bind-key.el. Y resulta que el valor de inicio de mi modo es nily el de override-global-modees 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-modebúferes para mí, por lo que tal vez el problema esté en la definición de su modo.override-global-modeuse-packageimplementa eso.nil; pero lo habilito globalmente.buffer.c, parece que seget-buffer-createejecutabuffer-list-update-hookal 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-modebú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 inicionilno hace lo mismo. En este caso, sefundamental-modecreará 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-modememorias 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-modey el(setq-default modi-mode nil) to the functionturn-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-modees no tener el manejo habitual en modo mayor (ganchos, etc.). Puedes pensarfundamental-modecomo 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-modepara que no sea por defectofundamental-mode. (Yo usoindented-text-mode)Anteriormente había algo
default-major-modepara 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-createpara generar un búfer temporal, ese búfer se crea confundamental-modeel 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,keyfreqget-buffer-createno 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-createse 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