के लिए एक कस्टम फ़ंक्शन लिखें dired-initial-position-hook
। इस फ़ंक्शन में आप फ़ाइलों के लिए खोज करने के लिए विभिन्न डायरेटेड फ़ंक्शंस का उपयोग कर सकते हैं, और अंततः dired-goto-file
"बेस्ट" फ़ाइल पर जाने के लिए कॉल कर सकते हैं:
(defun my-dired-goto-important-file ()
"Go to an important file in the current dired buffer."
(unless (bound-and-true-p save-place)
(let ((candidates '("master.tex" "AndroidManifest.xml"))
candidate)
(while (and candidates
(not (dired-goto-file (expand-file-name (pop candidates)))))
nil))))
(add-hook 'dired-initial-position-hook #'my-dired-goto-important-file)
निम्नलिखित में मैं इस फ़ंक्शन के विशिष्ट पहलुओं की व्याख्या करूँगा, और संभावित एक्सटेंशन पर प्रकाश डालूँगा।
फाइलों में कूदना
dired-goto-file
रिटर्न nil
अगर फ़ाइल वर्तमान में मौजूद बफ़र में मौजूद नहीं है, तो बिना पूर्व जाँच के कॉल करना सुरक्षित है। हालांकि, dired-goto-file
एक पूर्ण फ़ाइल नाम की आवश्यकता है (यह सापेक्ष नामों पर त्रुटियां हैं), इसलिए expand-file-name
।
फ़ाइलों के लिए खोज
फ़ाइलों के लिए खोज करने के लिए एक सीधे-सीधे एपीआई प्रदान नहीं करता है। आम तौर पर, आप सभी फ़ाइलों पर उसी तरह से पुनरावृति कर सकते हैं, जैसे आप बफर में सभी लाइनों पर पुनरावृति करेंगे:
(let (files)
(goto-char (point-min))
(while (not (eobp))
(let ((filename (dired-get-filename nil 'no-error)))
(when filename
(push filename files)))
(forward-line 1))
;; Now `files' is a list of files, which you can search for patterns
;; …
)
हालांकि, अंकन कार्यों का उपयोग करना अधिक सुविधाजनक है। एक "असामान्य" मार्कर वर्णों का उपयोग करने के लिए ध्यान रखें, मौजूदा इंटरेक्टिव अंक को ढीला न करने के लिए:
(unwind-protect
(when (dired-mark-files-regexp (rx ".tex" string-end) ?t)
(dired-goto-file (expand-file-name "master.tex")))
(dired-unmark-all-files ?t))
स्थान मोड सहेजें
यदि आपने इसे सक्षम किया है, तो आपको सेव प्लेस मोड के संबंध में भी सावधान रहना होगा। डेयर किए गए बफ़र्स में, सेव प्लेस मोड अन्य मोड की तरह पॉइंट वैल्यू को याद नहीं करता है, बल्कि अंतिम फ़ाइल नाम बिंदु पर था। यह इस फ़ाइल नाम को ठीक उसी तरह पुनर्स्थापित करता है जैसे हम करते हैं: यह हुक करता है dired-initial-position-hook
और कॉल करता है dired-goto-file
(वास्तव में, यहीं पर मैंने उस कोड को :) से चुराया था)।
अगर हमारा हुक सेव जगह से पहले आता है, तो सेव प्लेस मोड हमारी स्थिति को बिना शर्त लिख देगा। हालाँकि, यदि यह हमारे हुक से पहले आता है (जैसा कि जब आप इस हुक को सेटअप करने के बाद सेव प्लेस इनेबल होता है तो) हमारा फंक्शन वास्तव में सेव प्लेस को अधिलेखित कर देगा जो वांछनीय नहीं है। हालाँकि, किसी भी बफ़र की तरह, सेव प्लेस लोकल वैरिएबल save-place
को नॉन-नील वैल्यू पर सेट करता है , इसलिए हम बस इसे चेक कर सकते हैं और केवल इसे सेव कर सकते हैं। सेव प्लेस ने फाइल नेम को रिस्टोर नहीं किया।
यदि आप इसके बजाय सहेजें प्लेस "ढीला" है चाहते हैं, तो के लिए चेक निकालने के save-place
लिए, और यकीन है कि हमारे हुक चलाया जाता है बनाने के बाद , सहेजें प्लेस सहेजें प्लेस मोड को सक्षम करने से पहले , और फिर बुला add-hook
इसके लिए एक गैर-शून्य मान के साथ APPEND
तर्क।
bound-and-true-p
। :-)