Emacs: เปิดบัฟเฟอร์อีกครั้งจากเซสชันล่าสุดเมื่อเริ่มต้น?


92

ทุกวันฉันเปิด emacs และเปิดไฟล์เดียวกับที่ฉันเปิดเมื่อวันก่อน มีบางอย่างที่ฉันสามารถเพิ่มลงในไฟล์ init.el ได้หรือไม่ดังนั้นมันจะเปิดบัฟเฟอร์ทั้งหมดที่ฉันใช้เมื่อฉันออกจาก emac ครั้งล่าสุดอีกครั้ง


ดูเหมือนว่าการจัดการเดสก์ท็อปจะแตกต่างกันใน Emacs 21 และ 22+ หัวข้อที่อธิบายไว้ในหน้านี้: emacswiki.org/emacs/DeskTop
hji

การเปลี่ยนแปลงอื่นในเส้นทางเริ่มต้นการจัดการเดสก์ท็อปมาใน 24.3 github.com/jwiegley/emacs-release/blob/…
pestophagous

คำตอบ:


120

คุณสามารถใช้ไลบรารี Emacs Desktop :

คุณสามารถบันทึกเดสก์ท็อปด้วยตนเองโดยใช้คำสั่ง Mx desktop-save คุณยังสามารถเปิดใช้งานการบันทึกเดสก์ท็อปโดยอัตโนมัติเมื่อคุณออกจาก Emacs และการกู้คืนเดสก์ท็อปที่บันทึกล่าสุดโดยอัตโนมัติเมื่อ Emac เริ่มทำงาน: ใช้บัฟเฟอร์การปรับแต่ง (ดูการปรับแต่งอย่างง่าย) เพื่อตั้งค่าโหมดประหยัดเดสก์ท็อปเป็น t สำหรับเซสชันในอนาคตหรือเพิ่ม บรรทัดนี้ในไฟล์ ~ / .emacs ของคุณ:

 (desktop-save-mode 1)

5
คำตอบที่ดี อย่างไรก็ตามฉันสังเกตเห็นว่า Emacs จัดเรียงลำดับบัฟเฟอร์ใหม่ระหว่างเซสชัน มีวิธีใดบ้างที่จะมีลำดับบัฟเฟอร์เดียวกันเสมอ?
axel22

1
หากใครมีปัญหาในการทำให้สิ่งนี้ใช้งานได้ (เช่นเดียวกับฉัน) นี่คือเทคนิคในการวินิจฉัยปัญหา: เปิดการดีบักโดยM-:การดำเนินการ(setq debug-on-error t)จากนั้นโทรหาdesktop-revertและอาจตรวจพบข้อผิดพลาดที่ไม่เหมาะสมในดีบักเกอร์ สำหรับฉันมันเป็นการตั้งค่าส่วนกลางที่ควรจะเป็นบัฟเฟอร์ภายในทำให้การกู้คืนเฟรมล้มเหลว (เพียงใช้emacs --debug-initอาจจับปัญหาเกินไป แต่ผมใช้วิธีอดีต.)
robenkleene

10

แม้ว่าฉันสงสัยว่าคำถามกำลังมองหาฟังก์ชัน "เดสก์ท็อป" ของ emac (ดูคำตอบด้านบน) แนวทางของ Lewap จะมีประโยชน์หากชุดไฟล์ที่ใช้เป็นชุดไฟล์เดียวกัน ในความเป็นจริงเราสามารถไปอีกขั้นและกำหนด "โปรไฟล์" ได้หากมีชุดไฟล์ที่ใช้เป็นประจำต่างกัน

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

หากคุณพบว่าคุณสลับไปมาระหว่างชุดไฟล์ที่ใช้เป็นประจำเป็นประจำในขณะที่คุณทำงานให้พิจารณาใช้มุมมองและเติมข้อมูลแต่ละมุมมองด้วยชุดไฟล์ที่ใช้เป็นประจำที่ต้องการ


6

สำหรับการจัดเก็บ / กู้คืนบัฟเฟอร์ / แท็บ (โดยเฉพาะแท็บ elscreen):ฉันใช้ elscreen และวิธีจัดการการจัดเก็บ / กู้คืนเซสชันเดสก์ท็อปและการกำหนดค่าแท็บ elscreen คือรหัสต่อไปนี้ในไฟล์. emacs ของฉัน (ชื่อที่ใช้อธิบายได้ และหากไม่ควรเรียกใช้ฟังก์ชันการจัดเก็บ / กู้คืนทุกครั้งที่ emac เริ่มต้นเพียงแค่แสดงความคิดเห็นในบรรทัดด้วย "(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สิ่งที่ Emacs มีให้อยู่แล้ว
โจ

2

มีการปรับปรุงที่มีประโยชน์ที่คุณสามารถทำได้กับคุณสมบัติพื้นฐานของเดสก์ท็อป โดยเฉพาะอย่างยิ่ง handy (IMO) เป็นวิธีการบันทึกเดสก์ท็อปโดยอัตโนมัติในระหว่างเซสชันมิฉะนั้นหากระบบของคุณขัดข้องคุณจะติดอยู่กับไฟล์เดสก์ท็อปที่คุณเริ่มต้นเซสชันนั้นซึ่งค่อนข้างน่ารำคาญหากคุณมักจะให้ Emac ทำงานเป็นเวลานาน วันละครั้ง

http://www.emacswiki.org/emacs/DeskTop

วิกิยังมีข้อมูลที่เป็นประโยชน์เกี่ยวกับข้อมูลที่คงอยู่ระหว่างเซสชันโดยทั่วไป:

http://www.emacswiki.org/emacs/SessionManagement

สำหรับเดสก์ท็อปโดยเฉพาะฉันคิดว่าการกู้คืนเดสก์ท็อปดูดีเป็นพิเศษ แต่ฉันยังไม่ได้ลองใช้


-2

(find-file-noselect "/my/file")จะเปิดขึ้นอย่างเงียบ ๆ กล่าวคือไม่มีการเพิ่มบัฟเฟอร์ แค่พูด.

คำสั่งการแก้ไขนี้ไม่โต้ตอบ ; ในการทดสอบคุณต้องประเมินนิพจน์ตัวอย่างเช่นโดยการวางตำแหน่งเคอร์เซอร์หลังวงเล็บสุดท้ายและกด Cx Ce

downvoting นี้อยู่ไม่เย็น ; คำสั่งนี้ใช้งานได้แน่นอนและอยู่ในขอบเขตของคำถาม


2
ฉันไม่ได้ลงคะแนน แต่บางทีคำตอบของคุณอาจถูกลดคะแนนลงเนื่องจากไม่ได้ระบุปัญหาเกี่ยวกับวิธีการเปิดโดยเฉพาะบัฟเฟอร์ที่เปิดในเซสชัน Emacs ก่อนหน้านี้
Ryan

1
ลดลงเพราะไม่มีส่วนเกี่ยวข้องกับ Q เดิม
RichieHH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.