Question

Appelez-moi nul, mais j'en ai marre de mes contractions nerveuses C-x C-s subconscientes. Je change de tampon assez souvent et je pense que je voudrais sauvegarder un certain tampon dès que je changerai de tampon. Je n'ai pas encore eu le temps d'apprendre les bases d'Emacs-Lisp.

Des astuces sur la manière de procéder, ou de meilleures solutions?

(Sur une note connexe, j'ai trouvé une solution de contournement automatique permettant de sauvegarder le tampon actuel sous dès que vous êtes inactif pendant un laps de temps donné.)

Était-ce utile?

La solution

Pour en savoir plus sur les Seth répondre , je procéderais ainsi:

(defadvice switch-to-buffer (before save-buffer-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-window (before other-window-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-frame (before other-frame-now activate)
  (when buffer-file-name (save-buffer)))

La vérification de nom-fichier-tampon évite la sauvegarde des tampons sans fichiers. Vous devez déterminer tous les points d’entrée que vous utilisez pour changer de mémoire tampon (c’est aussi other-window ).

Autres conseils

Je suis un peu nouveau sur emacs lisp moi-même mais cela fonctionne lors de mes tests:

(defadvice switch-to-buffer (before save-buffer-now)
  (save-buffer))

(ad-activate 'switch-to-buffer)

C’est un peu gênant car il s’appelle après CHAQUE tampon (comme scratch ). Alors, considérez cette réponse comme un indice.

Lorsque vous souhaitez le désactiver, vous devez appeler:

(ad-disable-advice 'switch-to-buffer 'before 'save-buffer-now)
(ad-activate 'switch-to-buffer)

Quelques idées.

Premièrement, si vous appelez une commande comme save avec une fréquence suffisamment élevée, vous pouvez envisager une liaison de clé plus courte pour la commande. Par exemple, je me suis aussi retrouvé avec le même "twitch", J'utilise donc f2 au lieu de C-x C-s pour enregistrer les modifications.

La fonction que je lie à f2 enregistre inconditionnellement tous les tampons non enregistrés. Vous trouverez peut-être cela utile:

(defun force-save-all ()
    "Unconditionally saves all unsaved buffers."
    (interactive)
    (save-some-buffers t))

(global-set-key [f2] 'force-save-all)

Passons maintenant au problème principal. Vous pouvez essayer quelque chose comme ceci (notez que force-save-all est appelé):

(defun my-switch-to-buffer (buffer)
    (interactive (list (read-buffer "Switch to buffer: " (cadr buffer-name-history) nil)))
    (force-save-all)
    (switch-to-buffer buffer))

(global-set-key "\C-xb" 'my-switch-to-buffer)

Bien sûr, vous pouvez également associer la fonctionnalité de tampon de commutation à une autre touche, telle qu'une touche de fonction, afin que l'opération soit exécutée d'une seule pression.

Je pensais que @seth avait une bonne idée sur l'utilisation des conseils, mais j'ai remarqué que le manuel ELisp suggère que < un href = "http://www.gnu.org/software/emacs/manual/html_mono/elisp.html.gz#Advising-Functions" rel = "nofollow noreferrer"> les conseils ne sont pas utilisés pour les raccourcis clavier . Je ne sais pas trop pourquoi, mais c’est ce que le manuel suggère pour votre information.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top