매일 emacs를 시작하고 전날 열었던 것과 똑같은 파일을 엽니 다. init.el 파일에 추가하여 마지막으로 emacs를 종료 할 때 사용했던 모든 버퍼를 다시 열 수 있습니까?
매일 emacs를 시작하고 전날 열었던 것과 똑같은 파일을 엽니 다. init.el 파일에 추가하여 마지막으로 emacs를 종료 할 때 사용했던 모든 버퍼를 다시 열 수 있습니까?
답변:
Emacs Desktop 라이브러리를 사용할 수 있습니다 .
Mx desktop-save 명령을 사용하여 데스크탑을 수동으로 저장할 수 있습니다. Emacs를 종료 할 때 데스크탑의 자동 저장을 활성화하고 Emacs가 시작될 때 마지막으로 저장된 데스크탑의 자동 복원을 활성화 할 수도 있습니다. 사용자 정의 버퍼 (쉬운 사용자 정의 참조)를 사용하여 향후 세션을 위해 데스크탑 저장 모드를 t로 설정하거나 ~ / .emacs 파일의이 줄 :
(desktop-save-mode 1)
M-:
실행 하여 디버깅을 설정 한 (setq debug-on-error t)
다음 호출 desktop-revert
하면 디버거에서 문제가되는 오류를 포착 할 수 있습니다. 저에게는 버퍼 로컬이어서 프레임 복원이 실패하는 글로벌 설정이었습니다. (그냥 사용하여 emacs --debug-init
도 문제를 잡을 수도 있지만, 나는 전자의 방법을 사용했다.)
질문이 emacs "데스크탑"기능을 찾고 있다고 생각하지만 (위 답변 참조) Lewap의 접근 방식은 실제로 사용하는 파일 세트가 정확히 동일한 파일 세트 인 경우 유용 할 수 있습니다. 사실, 한 단계 더 나아가 정기적으로 사용되는 파일 세트가 다른 경우 '프로필'을 정의 할 수 있습니다. Quickie 예제 :
(let ((profile
(read-from-minibuffer "Choose a profile (acad,dist,lisp,comp,rpg): ")
))
(cond
((string-match "acad" profile)
(dired "/home/thomp/acad")
(dired "/home/thomp/acad/papers")
)
((string-match "lisp" profile)
(setup-slime)
(lisp-miscellany)
(open-lisp-dirs)
)
((string-match "rpg" profile)
(find-file "/home/thomp/comp/lisp/rp-geneval/README")
(dired "/home/thomp/comp/lisp/rp-geneval/rp-geneval")
... etc.
작업 할 때 정기적으로 사용되는 여러 파일 세트간에 정기적으로 전환하는 경우 Perspective를 사용 하고 각 Perspective를 정기적으로 사용되는 원하는 파일 세트로 채우는 것을 고려 하십시오.
버퍼 / 탭 (특히 elscreen 탭) 저장 / 복원 : elscreen을 사용하고 데스크톱 세션 및 elscreen 탭 구성의 저장 / 복원을 관리하는 방법은 .emacs 파일의 다음 코드입니다 (사용 된 이름은 자명합니다. 저장 / 복원 기능이 emacs가 시작될 때마다 실행되지 않아야한다면 "(push # 'elscreen-store kill-emacs-hook)"및 "(elscreen-restore)") 줄을 주석 처리하면됩니다.
(defvar emacs-configuration-directory
"~/.emacs.d/"
"The directory where the emacs configuration files are stored.")
(defvar elscreen-tab-configuration-store-filename
(concat emacs-configuration-directory ".elscreen")
"The file where the elscreen tab configuration is stored.")
(defun elscreen-store ()
"Store the elscreen tab configuration."
(interactive)
(if (desktop-save emacs-configuration-directory)
(with-temp-file elscreen-tab-configuration-store-filename
(insert (prin1-to-string (elscreen-get-screen-to-name-alist))))))
(push #'elscreen-store kill-emacs-hook)
(defun elscreen-restore ()
"Restore the elscreen tab configuration."
(interactive)
(if (desktop-read)
(let ((screens (reverse
(read
(with-temp-buffer
(insert-file-contents elscreen-tab-configuration-store-filename)
(buffer-string))))))
(while screens
(setq screen (car (car screens)))
(setq buffers (split-string (cdr (car screens)) ":"))
(if (eq screen 0)
(switch-to-buffer (car buffers))
(elscreen-find-and-goto-by-buffer (car buffers) t t))
(while (cdr buffers)
(switch-to-buffer-other-window (car (cdr buffers)))
(setq buffers (cdr buffers)))
(setq screens (cdr screens))))))
(elscreen-restore)
emacs-configuration-directory
하고 user-emacs-directory
있는 대체 할 수있는 사소한 부분입니다 .
기본 데스크탑 기능을 유용하게 개선 할 수 있습니다. 특히 편리한 (IMO)는 세션 중에 데스크탑을 자동 저장하는 방법입니다. 한 번에 며칠.
http://www.emacswiki.org/emacs/DeskTop
또한 위키에는 일반적으로 세션간에 데이터를 유지하는 데 유용한 정보가 있습니다.
http://www.emacswiki.org/emacs/SessionManagement
특히 데스크톱의 경우 Desktop Recover 가 특히 유망 하다고 생각 했지만 아직 사용해 보지 않았습니다.
(find-file-noselect "/my/file")
즉, 버퍼를 올리지 않고 조용히 열립니다. 그냥 말해.
편집이 명령은 대화식 이 아닙니다 . 이를 테스트하려면 마지막 괄호 뒤에 커서를 놓고 Cx Ce를 눌러 표현식을 평가해야합니다.
반대 투표는 좋지 않습니다 . 이 명령은 확실히 작동하며 문제의 범위에 있습니다.