De par sa conception, les fundamental-mode
os sont nus, car d'autres modes majeurs sont censés dériver de celui-ci.
Depuis la page info (elisp) Major Modes
, nous avons:
Il s'agit de la commande de mode principale pour le mode fondamental. Contrairement aux autres commandes de mode, il ne pas exécuter des crochets en mode (note * Conventions de mode majeur: :), puisque vous n'êtes pas censé personnaliser ce mode.
Pour cette raison,
- Nous n'en avons pas
fundamental-mode-hook
. - N'obtient également
my-minor-mode
pas activé UNIQUEMENT dans ce mode majeur tampons malgré avoir(global-my-minor-mode 1)
dans ma config.
Ci-dessous fonctionnerait mais seulement si je tapais manuellement M-x fundamental-mode
:
(add-hook 'after-change-major-mode-hook #'my-minor-mode)
Cela n'aide pas dans le cas ci-dessous où un fundamental-mode
tampon (* abcd *) est créé par défaut:
(with-current-buffer (get-buffer-create "*abcd*")
(insert "Hello world"))
Pourquoi je veux activer un mode mineur dans fundamental-mode
?
J'aime conserver mes raccourcis clavier personnalisés dans ma carte de mode mineur. J'ai ce mode mineur activé globalement (mais il n'est pas activé uniquement dans les fundamental-mode
tampons).
Voici un cas d'utilisation qui a permis de poser cette question ici. En faisant M-x esup
( esup
package), il crée un *esup-log*
tampon avec fundamental-mode
comme mode principal. Mais à chaque fois, je dois activer mon mode mineur manuellement pour utiliser mes liaisons pratiques.
J'aimerais activer my-minor-mode
d'une manière vraiment mondiale, fundamental-mode
ou non.
Mise à jour 1:
Voici mon mode mineur définition: modi-mode
.
Mise à jour 2:
Sur la base du commentaire de @npostavs , j'ai examiné ce qui diffère entre mon mode mineur modi-mode
et override-global-mode
dans use-package/bind-key.el
. Et il se trouve que la valeur init de mon mode est nil
et celle de override-global-mode
is t
.
Si je change la valeur init de mon mode en t
, elle est également activée dans les tampons en mode fondamental! Mais l'acte de (global-modi-mode 1)
ne se termine pas avec le même résultat. Est-ce étrange? Probablement un bug?
la source
fundamental-mode
tampons pour moi, donc peut-être que le problème est dans la définition de votre mode.override-global-mode
use-package
met en œuvre cela.nil
; mais je l'active globalement.buffer.c
, il semble queget-buffer-create
s'exécute le toutbuffer-list-update-hook
à la fin de sa fonction, peut-être pourriez-vous attacher votre propre fonction avec des conditions à ce crochet?Réponses:
La seule façon d'obtenir un mode mineur activé par défaut dans les
fundamental-mode
tampons est de définir la valeur d'initialisation de ce mode mineur surt
.Notez que simplement basculer sur un mode mineur globalisé (voir
C-h i g (elisp) Defining Minor Modes
) avec la valeur initnil
ne fait pas la même chose. Dans ce cas, unfundamental-mode
tampon sera créé avec ce mode mineur désactivé.Ce qui précède, bien sûr, ne fonctionnera que si vous contrôlez la source du mode mineur. Pour tous les autres modes mineurs fournis avec des packages différents, si vous souhaitez activer un mode mineur par défaut dans les
fundamental-mode
tampons, vous devez le fairela source
(setq-default 'the-minor-mode t)
pour obtenir le même effet.(setq-default modi-mode 1)
à la fonctionturn-on-modi-mode
et(setq-default modi-mode nil) to the function
turn-off-Modi-mode`, alors vous seriez un peu plus de fait permettant au niveau mondial et de désactiver le mode.N'utilisez pas
fundamental-mode
- du moins pas de manière interactive. Vous voulez rarement y participerfundamental-mode
. Il y a presque toujours quelque chose de mieux.Le tout
fundamental-mode
est de ne pas avoir le traitement habituel en mode majeur (hooks etc.). Vous pouvez penserfundamental-mode
à une sorte de classe abstraite.Si un paquet vous met dans un tampon qui se trouve
fundamental-mode
alors faites ce que vous devez faire pour éviter cela - utilisez un autre mode pour cela.Envisagez de le personnaliser
major-mode
pour qu'il soit par défaut différent defundamental-mode
. (J'utiliseindented-text-mode
.)Auparavant, il y en avait
default-major-mode
pour cela, ce qui, je pense, était un peu plus clair, mais ils ont décidé de le déprécier (cela fonctionne toujours, bien sûr).la source
fundamental-mode
. Le nœud du problème est que lorsqu'un package utiliseget-buffer-create
pour générer un tampon temporaire, ce tampon est créé avecfundamental-mode
comme mode principal. Dans ces tampons, mon mode mineur ne sera pas activé par défaut (car sa valeur init est nulle; même si je l'ai activé globalement).esup
,keyfreq
get-buffer-create
qu'appeler ne fait rien pour établir le mode majeur (ou tout mode mineur). Faut- il (pour le paquet en question)? Si c'est le cas, pensez à contacter le responsable du package. Sinon, pensez à activer vous-même votre mode majeur ou mineur préféré. IOW, si c'est à propos de ce que vous voulez, et non de ce que le package doit configurer en général, alors c'est à vous de le configurer comme vous le souhaitez.La fonction
get-buffer-create
est définie dansbuffer.c
, et à la toute fin de cette fonction, elle appelle lebuffer-list-update-hook
. Un tel crochet peut être utilisé pour exécuter une fonction personnalisée, mais certaines conditions peuvent devoir être ajoutées pour empêcher la fonction personnalisée de se déclencher à des moments inopportuns chaque fois que ce crochet est appelé par d'autres fonctions.la source