Emacs 데스크탑 저장 모드-이전 데스크탑이 완전히 복원 된 경우에만 데스크탑 저장


11

내 안에 다음이 있습니다 .emacs.

(desktop-save-mode 1)
(setq desktop-restore-eager 10)
(setq desktop-save t)

종종 많은 버퍼가 열려 (100 정도) 열려 있으면 emacs가 다른 것에 바쁘지 않을 때만 버퍼를로드하기 때문에 실제로 도움이됩니다.

이제 때때로 다음과 같은 상황이 발생합니다. 랩탑을 종료하기 전에 이맥스를 닫습니다. 그런 다음 하나 이상의 파일을 빠르게 편집해야한다는 것을 알고 있으므로 emacs를 다시 열고 편집 한 다음 닫습니다. 이 시간이 짧은 시간 내에 발생하면 desktop-save-mode이전에 저장된 모든 버퍼를 복원 할 수 없었습니다. 이 경우, 이제 emacs를 다시 닫으면 복원 된 버퍼 만 저장되고 초기 종료 전 상태가 유실됩니다.

desktop-save이전에 저장된 데스크톱이 완전히 복원 된 경우 유일 하게 수행 할 수있는 방법이 있습니까?

답변:


3

사용할 수있는 후크가 있습니다 : desktop-after-read-hook. 데스크탑 상태가 복원 된 후 변수를 설정하는 기능을 추가하십시오. defadvicearound를 사용 desktop-save하여 상태를 저장하기 전에 변수가 설정되어 있는지 확인하십시오.

저는 Emacs 25.3.1을 사용하고 있으며 이것은 내가 사용한 코드입니다.

(defvar *my-desktop-save* nil
  "Should I save the desktop when Emacs is shutting down?")

(add-hook 'desktop-after-read-hook
          (lambda () (setq *my-desktop-save* t)))

(advice-add 'desktop-save :around
            (lambda (fn &rest args)
              (if (bound-and-true-p *my-desktop-save*)
                  (apply fn args))))

에 추가 한 다음 .emacs다시 시작하십시오.


고마워, 이것은 실제로 트릭을해야합니다. 그러나 내 이맥스 Lisp 기술은 약간 제한적입니다. 내가 실험을 시작할 수있는 리스프 스 니펫을 포함하도록 답을 확장 해 주
시겠습니까?

1
귀하의 .emacs에 대한 코드를 추가하기 위해 답변을 편집했습니다.
Faried Nawaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.