Pergunta

Chamada me coxo, mas eu estou cansado da minha C-x C-s subconsciente tique nervoso. Eu estou passando buffers com bastante frequência e eu acho que eu gostaria de salvar um determinado buffer assim que eu mudar para outra. Eu não tive ainda o tempo para aprender noções básicas de Emacs-Lisp.

Qualquer dicas sobre como fazer isso, ou melhores soluções?

(Em uma nota relacionada, eu encontrei um autosave solução que pode salvar o buffer atual como assim que estiver inactivo durante um determinado período de tempo.)

Foi útil?

Solução

Para expandir a Seth 's resposta , eu faria isso:

(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)))

A verificação para evita buffer-file-name poupança buffers w / out arquivos. Você precisa descobrir todos os pontos de entrada que você usa para alternar buffers que você se preocupa (eu também aconselhar other-window).

Outras dicas

Eu sou uma espécie de novo para Emacs Lisp mim, mas isso funciona no meu teste:

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

(ad-activate 'switch-to-buffer)

É meio chato, porque embora ele seja chamado após o tampão CADA (como zero ). Então, considere esta resposta uma dica.

Quando você quiser desativá-lo, você precisa chamar:

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

Um par de ideias.

Primeiro, se você encontrar-se invocando um comando como salvar com uma frequência suficientemente elevada, você pode considerar um menor de ligação para o comando chave. Por exemplo, eu também encontrei-me ter o mesmo "contração", então agora eu uso f2 vez de C-x C-s para salvar as edições.

A função que eu ligar para f2 salva cada tampão não salvos incondicionalmente. Você pode achar útil:

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

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

Agora, sobre a questão principal. Você poderia tentar algo como isto (note que force-save-all é chamado):

(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)

É claro, você também pode vincular a funcionalidade tampão mudança para outra chave, como uma tecla de função, de modo que é uma operação de uma prensa.

Eu pensei que @seth teve uma grande idéia sobre o uso de conselhos, mas eu notei que o manual Elisp sugere que < a href = "http://www.gnu.org/software/emacs/manual/html_mono/elisp.html.gz#Advising-Functions" rel = "nofollow noreferrer"> conselho não ser usado para teclas . Não estou muito certo porque este é o caso, mas é o que o manual sugere FYI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top