Emacs: स्टार्टअप पर पिछले सत्र से फिर से बफ़र्स?


89

हर दिन मैं emacs शुरू करता हूं और ठीक उसी फाइलों को खोलता हूं जो मैंने एक दिन पहले खोली थी। क्या ऐसा कुछ है जिसे मैं init.el फ़ाइल में जोड़ सकता हूं, इसलिए यह उन सभी बफ़र्स को फिर से खोल देगा जिन्हें मैं अंतिम बार emacs छोड़ने पर इस्तेमाल कर रहा था?


लगता है कि Emacs 21 और 22+ में डेस्कटॉप हैंडलिंग अलग है। इस पृष्ठ पर विषय का वर्णन किया गया है: emacswiki.org/emacs/DeskTop
हाजी

डेस्कटॉप हैंडलिंग डिफ़ॉल्ट पथ में एक और बदलाव 24.3 में आया। github.com/jwiegley/emacs-release/blob/…
पस्तोफैगस

जवाबों:


116

आप Emacs Desktop लाइब्रेरी का उपयोग कर सकते हैं :

आप डेस्कटॉप को कमांड Mx डेस्कटॉप-सेव से मैन्युअली सेव कर सकते हैं। जब आप Emacs से बाहर निकलते हैं, तो डेस्कटॉप की स्वचालित बचत को सक्षम कर सकते हैं, और Emacs शुरू होने पर अंतिम सहेजे गए डेस्कटॉप की स्वचालित बहाली: भविष्य के सत्रों के लिए t- डेस्कटॉप-सेव-मोड को सेट करने के लिए अनुकूलन बफर (आसान अनुकूलन देखें) का उपयोग करें, या जोड़ें यह लाइन आपकी ~ / .emacs फ़ाइल में है:

 (desktop-save-mode 1)

5
बहुत बढ़िया जवाब। हालाँकि, मैंने देखा कि Emacs सत्र के बीच बफर क्रम को पुनर्व्यवस्थित करता है। वहाँ हमेशा एक ही बफर आदेश के लिए कोई रास्ता नहीं है?
axel22

अगर किसी को भी काम करने में समस्या हो रही है (जैसे मैंने किया), तो समस्या का निदान करने के लिए एक तकनीक है: M-:निष्पादन द्वारा डिबगिंग चालू (setq debug-on-error t)करें, फिर कॉल करें desktop-revertऔर यह डिबगर में आपत्तिजनक त्रुटि को पकड़ सकता है। मेरे लिए यह वैश्विक सेटिंग थी जिसे बफर लोकल होना चाहिए था क्योंकि फ्रेम रिस्टोरेशन विफल हो गया था। (बस emacs --debug-initइस मुद्दे को भी पकड़ सकता है, लेकिन मैंने पूर्व पद्धति का उपयोग किया है।)
रोबेनकेलीन

10

हालांकि मुझे संदेह है कि सवाल emacs "डेस्कटॉप" कार्यक्षमता (उत्तर के ऊपर देखें) के लिए देख रहा था, एलयूपी का दृष्टिकोण उपयोगी हो सकता है यदि फ़ाइलों का उपयोग करता है जो वास्तव में एक ही फ़ाइल सेट है। वास्तव में, कोई एक कदम आगे जा सकता है और 'प्रोफाइल' को परिभाषित कर सकता है यदि किसी के पास नियमित रूप से उपयोग की जाने वाली फाइलों के अलग-अलग सेट हों ... क्विक उदाहरण:

(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

बफ़र्स / टैब (विशेष रूप से एल्कॉन टैब) को संग्रहीत / पुनर्स्थापित करने के लिए: मैं एल्कस्क्रीन का उपयोग करता हूं और जिस तरह से मैं डेस्कटॉप सत्र को संचय / बहाल करता हूं और एल्कॉन टैब का कॉन्फ़िगरेशन मेरे .emacs फ़ाइल में निम्न कोड है (उपयोग किए गए नाम स्व-व्याख्यात्मक हैं) और अगर स्टोरिंग / रिस्टोरिंग फंक्शंस को हर बार नहीं किया जाना चाहिए, तो एमएसीएस केवल "" (# # पर क्लिक करें- 'elscreen-store किल-एमएसीएस-हुक) "और" (एल -स्क्रीन-रिस्टोर) "के साथ लाइनों को शुरू करता है।

(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-directoryEmacs पहले से ही प्रदान करता है।
जो

2

उपयोगी संवर्द्धन हैं जो आप मूल डेस्कटॉप सुविधा के लिए कर सकते हैं। विशेष रूप से उपयोगी (IMO) सत्र के दौरान डेस्कटॉप को ऑटो-सेव करने के तरीके हैं, अन्यथा यदि आपका सिस्टम क्रैश हो जाता है, तो आप उस डेस्कटॉप फ़ाइल के साथ फंस जाएंगे जो आपने उस सत्र के साथ शुरू की थी - बहुत कष्टप्रद अगर आप Emacs को कई के लिए चालू रखते हैं एक समय में दिन।

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

विकी के पास सत्रों के बीच सामान्य रूप से डेटा को बनाए रखने के बारे में उपयोगी जानकारी है:

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

विशेष रूप से डेस्कटॉप के लिए, मुझे लगा कि डेस्कटॉप रिकवर विशेष रूप से आशाजनक लग रहा है, हालांकि मैंने अभी तक इसे आज़माया नहीं है।


-2

(find-file-noselect "/my/file")इसे चुपचाप खोल देंगे, अर्थात w / o बफर को बढ़ा देगा। बस केह रहा हू।

संपादित करें यह आदेश इंटरैक्टिव नहीं है ; इसका परीक्षण करने के लिए आपको अभिव्यक्ति का मूल्यांकन करना होगा, उदाहरण के लिए अंतिम कोष्ठक के बाद कर्सर की स्थिति और Cx Ce से टकराने से

डाउनवोटिंग यह शांत नहीं है ; यह आदेश निश्चित रूप से काम करता है और प्रश्न के दायरे में है।


2
मैं नीचे नहीं गया था, लेकिन शायद आपके जवाब को अस्वीकार कर दिया गया था क्योंकि यह इस बात को संबोधित नहीं करता है कि विशेष रूप से बफ़र्स को कैसे खोलें जो पिछले Emacs सत्र में खुले थे।
रयान सी। थॉम्पसन

1
डाउनवोट किया गया क्योंकि इसका मूल Q से कोई लेना-देना नहीं है
रिचीह सेप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.