le mode global-auto-revert ne semble pas fonctionner?

7

Mon fichier init comprend

(setq global-auto-revert-mode t)

et je peux confirmer que c'est vrai avec Ch v. Mais je dois toujours restaurer manuellement tous mes fichiers avec revert-buffer chaque fois que je change de branche git. J'arrive même à essayer d'enregistrer et à obtenir l'invite "fichier modifié sur le disque". Des suggestions sur la façon de déboguer cela?

Djechlin
la source
Essayez plutôt de mettre ceci dans votre init:(global-auto-revert-mode 1)
Kaushal Modi
@kaushalmodi pas de chance (j'aurais été vraiment surpris)
djechlin
Cela pourrait-il être un problème auto-revert-interval? Je l'utilise et cela fonctionne pour moi, à l'exception des fichiers sur tramp.
Swarnendu Bis était le
On dirait un bug qui s'est glissé dans les versions 24.5 et 25.0. @SwarnenduBis étiez-vous sur emacs 24.4?
Kaushal Modi
@djechlin J'ai vérifié en utilisant des sessions emacs -Q que le mode de retour automatique ne fonctionne pas sur emacs 24.5 et 25.0 mais fonctionne correctement sur 24.4. Sur quelle version êtes-vous?
Kaushal Modi

Réponses:

15

Un mode mineur n'est pas activé / désactivé en définissant une variable. La variable de mode mineur doit être utilisée pour vérifier l'état "mode activé", et non pour définir l'état du mode. Si sa valeur est t, le mode mineur est activé, sinon le mode est désactivé.


Consultez les extraits ci-dessous pour voir comment contrôler n'importe quel mode mineur. Remplacez MINOR-MODE-NAMEpar le nom du mode mineur réel auquel vous avez affaire ( global-auto-revert-namecomme c'est le cas dans la question).


Activer un mode mineur

Utiliser elisp

Directement

(MINOR-MODE-NAME)
;; or
(MINOR-MODE-NAME 1)

Basé sur une activation de crochet

(add-hook 'SOME-HOOK #'MINOR-MODE-NAME)

Désactiver un mode mineur

Utiliser elisp

Directement

(MINOR-MODE-NAME 0)
;; or
(MINOR-MODE-NAME -1)

Basé sur une activation de crochet

(add-hook 'SOME-HOOK (lambda () (MINOR-MODE-NAME -1)))

Basculer en mode mineur

Interactivement

M-x MINOR-MODE-NAME

Utilisation d'une liaison de touches

(global-set-key (kbd "<KEY>") #'MINOR-MODE-NAME)

Utilisation d'elisp (sans interaction)

(MINOR-MODE-NAME 'toggle)

Sources

Kaushal Modi
la source
J'ai rencontré certains modes où vous devez passer t ou nil au lieu de nombres.
Joseph Garvin
@JosephGarvin Il pourrait être utile de savoir quels sont ces modes .. et peut-être déposer un rapport de bogue pour corriger cette incohérence si en fait ils sont définis comme des modes mineurs?
Kaushal Modi
La réponse est très abstraite. Je ne sais pas comment l'utiliser.
ctrl-alt-delor
@ ctrl-alt-delor Quel est le mode mineur que vous essayez de contrôler qui vous a conduit à cette réponse?
Kaushal Modi
Celui dans la question. ( global-auto-revert-mode)
ctrl-alt-delor
3

Vous ne définissez pas la variable en utilisant setq, vous appelez la fonction:

(global-auto-revert-mode)
Djechlin
la source
Je me demande en quoi c'est différent (global-auto-revert-mode 1). De plus, si vous ajoutez ceci à votre init, vous ne devriez même pas avoir besoin de cet argument. Ça (global-auto-revert-mode)devrait suffire. Consultez le blog de Xah pour plus d'informations.
Kaushal Modi
Comme pour tout mode défini à l'aide de define-global-minor-mode, les seules valeurs valides sont les nombres nil, et toggle. Le fait que cela tfonctionne est uniquement dû au fait qu'il prefix-numeric-valuene s'étouffe pas et ne le traite pas comme 1.
Lindydancer
@ Lindindancer Ouais, j'aimerais que Djechlin clarifie pourquoi passer 1comme argument n'a pas fonctionné .
Kaushal Modi
@kaushalmodi J'étais encore en train de définir - je pensais que vous changiez simplement t en 1, j'ai ignoré le changement de setq en appelant la fonction.
djechlin
@djechlin Merci d'avoir clarifié. Mais pour des raisons de clarté et de cohérence, il est recommandé de lui passer un argument 1ou rien si vous voulez activer ce mode mineur depuis elisp dans votre init.
Kaushal Modi
1

la restauration automatique ne fonctionne que pour les tampons qui ne sont pas modifiés. Donc, au moins pour l'invite «essayer d'enregistrer et de faire changer le fichier sur le disque», le comportement que vous décrivez est normal.

Stefan
la source
J'ai ouvert le même fichier simultanément dans une instance emacs 25.0 et emacs 24.4 (les deux avec -Qoption) et j'ai fait M-x global-auto-revert-modedans les deux. Depuis le terminal lorsque j'ai fait écho d'une chaîne ( echo 1234 >> somefile.txt) à ce fichier, seul le tampon emacs 24.4 a été inversé automatiquement.
Kaushal Modi
Alors s'il te plait M-x report-emacs-bug.
Stefan
Terminé! bug # 20441
Kaushal Modi
Le "bug" a été résolu par lui-même .. était probablement un problème avec glib sur mon système.
Kaushal Modi