문제
나를 절름발이라고 부르지 만 잠재 의식이 지쳤어 C-x C-s
긴장된 트 위치. 버퍼를 자주 전환하고 있으며 다른 버퍼로 전환하자마자 특정 버퍼를 저장하고 싶다고 생각합니다. 나는 아직 EMACS-LISP 기본 사항을 배울 시간이 없었습니다.
이 작업을 수행하는 방법에 대한 힌트 또는 더 나은 솔루션이 있습니까?
(관련 메모에서 나는 자동 저장 해결 방법 주어진 시간 동안 유휴 상태가 되 자마자 현재 버퍼를 저장할 수 있습니다.)
해결책
(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)))
수표 buffer-file-name
파일이없는 버퍼를 저장하지 않습니다. 관심있는 버퍼를 스위칭 버퍼에 사용하는 데 사용하는 모든 진입 지점을 파악해야합니다 (또한 조언합니다. other-window
).
다른 팁
나는 EMACS LISP에 익숙하지 않지만 이것은 내 테스트에서 작동합니다.
(defadvice switch-to-buffer (before save-buffer-now)
(save-buffer))
(ad-activate 'switch-to-buffer)
모든 버퍼 (예 : 할퀴다). 따라서이 대답을 힌트를 고려하십시오.
비활성화하려면 다음을 호출해야합니다.
(ad-disable-advice 'switch-to-buffer 'before 'save-buffer-now)
(ad-activate 'switch-to-buffer)
몇 가지 아이디어.
먼저, 충분히 높은 주파수로 저장과 같은 명령을 호출하는 경우 명령에 대한 더 짧은 키 바인딩을 고려할 수 있습니다. 예를 들어, 나는 또한 나 자신도 같은 "twitch"를 가지고 있음을 알았으므로 이제는 사용합니다. f2
대신에 C-x C-s
편집을 저장하기 위해.
내가 묶는 기능 f2
구원받지 않은 버퍼를 무조건적으로 저장합니다. 유용 할 수 있습니다.
(defun force-save-all ()
"Unconditionally saves all unsaved buffers."
(interactive)
(save-some-buffers t))
(global-set-key [f2] 'force-save-all)
이제 주요 문제에. 당신은 이와 같은 것을 시도 할 수 있습니다 (주목하십시오 force-save-all
) :) :
(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)
물론 스위치 버퍼 기능을 함수 키와 같은 다른 키에 바인딩하여 하나의 프레스 작업이 될 수도 있습니다.
나는 그렇게 생각했다 @Seth 조언을 사용하는 것에 대한 훌륭한 아이디어가 있었지만 ELISP 매뉴얼이 주요 바인딩에는 조언이 사용되지 않습니다. 왜 이것이 사실인지 잘 모르겠지만, 그것이 매뉴얼이 FYI를 제안하는 것입니다.