जब Emacs फ़ोकस खोता है तो बफ़र्स को ऑटो-सेव कैसे करें?


26

मैंने हाल ही में एक उदात्त पाठ उपयोगकर्ता को थोड़ी देर के लिए Emacs आज़माया था, और वह Emacs में उसी ऑटो-सेव व्यवहार को प्राप्त करने में रुचि रखता था।

मूल रूप से, वह चाहता था कि जब भी फ्रेम फ़ोकस (वास्तव में सहेजा गया, न कि केवल बैकअप-अप) में सभी बफ़र्स को बचाया जाए । इसमें विंडोज़ को पूरी तरह से अलग एप्लिकेशन पर स्विच करना शामिल है।

मुझे कोई भी ऐसी घटना नहीं मिली जो किसी भिन्न एप्लिकेशन पर स्विच करते समय ट्रिगर की गई हो। क्या इस तरह की घटना है या समान व्यवहार को प्राप्त करने का एक और तरीका है?

नोट समय आधारित समाधान संतोषजनक नहीं था, और न ही डिफ़ॉल्ट ऑटो बैकअप व्यवहार नहीं था। वह विशेष रूप से चाहता था कि save-bufferसभी फाइलों के लिए बफ़र्स को (के रूप में ) बचाया जाए ।

जवाबों:


29

दुर्भाग्य से, यह सटीक व्यवहार Emacs <= 24.3 में संभव नहीं है, लेकिन आप विंडो / बफर परिवर्तन का उपयोग करके defadvice( bbatsov के ब्लॉग पर विस्तृत रूप में ) को बचा सकते हैं :

(defadvice switch-to-buffer (before save-buffer-now activate)
  (when (and buffer-file-name (buffer-modified-p)) (save-buffer)))
(defadvice other-window (before other-window-now activate)
  (when (and buffer-file-name (buffer-modified-p)) (save-buffer)))

Emacs 24.4 में, आप नए फ़ोकस हुक के लिए फ़्रेम फ़ोकस लॉस पर भी बचत करने में सक्षम होंगे : (add-hook 'focus-out-hook 'save-buffer)(सक्रिय बफर को बचाने के लिए) या (add-hook 'focus-out-hook (lambda () (save-some-buffers t)))(सभी खुले बफ़र्स को बचाने के लिए)।


1
defadviceयदि ब्लॉग पोस्ट नीचे या कुछ और हो जाता है, तो क्या आप संस्करण पर थोड़ा विस्तार कर सकते हैं ? धन्यवाद!
तिकोन जेल्विस

दुर्भाग्य से, यह समाधान वर्तमान में दिखाई देने वाले बफर को बचाता है, सभी बफ़र्स को नहीं ।
b4hand

1
@ b4hand: क्षमा करें, एहसास नहीं हुआ कि आप क्या चाहते हैं। उत्तर अपडेट किया गया।
शॉस्ती

1
@shosti वैसे, मेरे लिए bbatsov के ब्लॉग के उस लिंक को खोजने के लिए धन्यवाद। मैंने वास्तव में उस समाधान को पहले पाया था, लेकिन इसे फिर से नहीं पाया। मैं अपने प्रश्न में गैर-काम करने वाले समाधानों में से एक के रूप में शामिल करने जा रहा था।
b4hand

2
मैं इसे मिनीबफ़र (प्रारूपण को क्षमा करना) से बचने के लिए इस तरह करना पसंद करता हूं: (add-hook 'focus-out-hook (lambda () (flet ((message (format &rest args) nil)) (save-some-buffers t))))
एंड्रियास

6

नहीं है focus-autosave-modeअब। यह MELPA के माध्यम से उपलब्ध है। क्यों यह आप के लिए हैकिंग करने का मौका नहीं देते


हाय, यह कैसे काम करता है? मैंने इसे स्थापित किया है, लेकिन यह काम नहीं कर रहा है।
असमे जस्ट

@AsmeJust, मैं अभी उपयोग नहीं करता, इसके मुद्दे ट्रैकर पर यहाँ पूछने का प्रयास करें: github.com/vifon/focus-autosave-mode.el/issues
मार्क करपोव

क्या आप वर्तमान में एक वैकल्पिक या किसी चीज़ का उपयोग करते हैं?
असीम जस्ट

नहीं, मैं अभी ऐसा कुछ भी उपयोग नहीं करता हूं।
मार्क

लेकिन आप अभी भी Emacs का उपयोग करते हैं, है ना?
असमे जस्ट

3
(add-to-list 'focus-out-hook (lambda () (save-some-buffers t nil)))

यह फ़ाइल के सभी सहेजे गए बफ़र्स को एमएसीएस 24.4 पर बचाएगा


2
add-to-listहुक का उपयोग न करें , उपयोग करें add-hook। shosti के उत्तर में पहले से ही इस स्निपेट का सही रूप है।
गाइल्स का SO- बुराई पर रोक '

1

इस पर ठोकर खाने वाले भटकने वालों के लिए, मैं इस फॉर्म का उपयोग करता हूं:

(eval-when-compile (require 'cl-lib))
;; [...]
(add-hook 'focus-out-hook
  (lambda ()
    (cl-letf (((symbol-function 'message) #'format))
      (save-some-buffers t))))

अपने इको एरिया को क्लॉगिंग से cl-letfकष्टप्रद (No files need saving)संदेशों को रखने का उपयोग ।

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