यहाँ टाइमर का लाभ उठाकर महत्वपूर्ण डाउन / अप इवेंट बाइंडिंग का अनुकरण करने के लिए मेरा सुपर हैकी तरीका है।
कुल मिलाकर मैं सिग्मा के जवाब से जाने का सुझाव दूंगा, लेकिन आपने जाने के लिए पूर्वावलोकन बंद करने का तरीका पूछा ताकि मैं कोशिश करने के लिए बाध्य हो जाऊं।
मूल रूप से आप जो कर सकते हैं वह किसी फ़ंक्शन को कीबाइंडिंग करने के लिए आपका "कीडाउन" फ़ंक्शन होगा और उस कार्रवाई के अंदर, एक निष्क्रिय टाइमर शुरू करें जो एक फ़ंक्शन को निष्पादित करता है जो आपका "कीप" फ़ंक्शन है, जब तक आप नीचे पकड़ रहे हैं। दी गई कुंजियाँ, "कीडडाउन" फंक्शन में बार-बार आग लगेंगी और यह निष्क्रिय टाइमर को चलाने से रोकेंगी। बेशक आपको इस तथ्य के लिए क्षतिपूर्ति करने की आवश्यकता है कि कमांड आपके "कीडाउन" फ़ंक्शन में कुछ प्रकार के नोओप फ़ंक्शन की कुंजी को रिबाउंड करके, फिर "कीअप" फ़ंक्शन में "कीडडाउन" फ़ंक्शन को रीबाइंड करके कुंजी को आग लगा देगा।
तो आपके उपयोग के मामले के लिए आपका "कीडाउन" फ़ंक्शन फ़ाइल की सामग्री के साथ एक पूर्वावलोकन बफ़र को खोल देगा और उस पूर्वावलोकन बफ़र में उसी कुंजी कॉम्बो को कमांड की तरह कुछ noop पर बाँध दें। आप "कीडाउन" फ़ंक्शन एक निष्क्रिय टाइमर भी शुरू करेंगे जो आपके पूर्वावलोकन बफर को हटा देगा और आपको वापस वहीं बहाल करेगा जहां आप थे।
लंबी कहानी यहाँ कोड है:
बाइंड एक महत्वपूर्ण कॉम्बो (मैं प्रयोग किया जाता करने के लिए इस समारोह C-M-v), जब आप इसे एक फ़ाइल नाम यह एक नया बफर बिंदु पर फ़ाइल की सामग्री को प्रदर्शित करने खुलेगी को दबाएं, जब आप आप चलते हैं मूल करने के लिए वापस कर दिया जाएगा बफ़र।
(setq lexical-binding t)
(defun quick-view-file-at-point ()
"Preview the file at point then jump back after some idle time.
In order for this to work you need to bind this function to a key combo,
you cannot call it from the minibuffer and let it work.
The reason it works is that by holding the key combo down, you inhibit
idle timers from running so as long as you hold the key combo, the
buffer preview will still display."
(interactive)
(let* ((buffer (current-buffer))
(file (thing-at-point 'filename t))
(file-buffer-name (format "*preview of %s*" file)))
(if (and file (file-exists-p file))
(let ((contents))
(if (get-buffer file)
(setq contents (save-excursion
(with-current-buffer (get-buffer file)
(font-lock-fontify-buffer)
(buffer-substring (point-min) (point-max)))))
(let ((new-buffer (find-file-noselect file)))
(with-current-buffer new-buffer
(font-lock-mode t)
(font-lock-fontify-buffer)
(setq contents (buffer-substring (point-min) (point-max))))
(kill-buffer new-buffer)))
(switch-to-buffer (get-buffer-create file-buffer-name))
(setq-local header-line-format "%60b")
(delete-region (point-min) (point-max))
(save-excursion (insert contents))
(local-set-key (kbd "C-M-v") (lambda () (interactive) (sit-for .2)))
(run-with-idle-timer
.7
nil
(lambda ()
(switch-to-buffer buffer)
(kill-buffer file-buffer-name))))
(message "no file to preview at point!"))))
यहाँ भी कार्रवाई में इसका एक gif है, जो मैं करता हूं:
- मेरे कर्सर को फ़ाइल पर रखें
- मेरी कीबाइंडिंग को दबाकर रखें
- पूर्वावलोकन प्रदर्शित किया गया है
- जब मैं जाने देता हूं, तो पूर्वावलोकन मारा जाता है और आप जहां थे वहीं वापस आ जाते हैं।
ध्यान देने के लिए एक महत्वपूर्ण बात यह है कि निष्क्रिय टाइमर की सेकंड्स, मेरे कोड में मैंने उपयोग किया है .7
लेकिन यह एक मैजिक नंबर की तरह है, आप इसे वास्तव में छोटा रखना चाहते हैं, लेकिन यदि आप दो बार चमकता हुआ पूर्वावलोकन देखते हैं तो इसे हर बार 1/10 सेकंड बढ़ाने की कोशिश करें जब तक आपकी मशीन के लिए सही जगह नहीं मिल जाती।
* यह भी ध्यान दें कि फ़ंक्शन में मैं पूर्वावलोकन बफर के कुछ फॉन्टिफिकेशन करने की कोशिश करता हूं, लेकिन मैं इसे काम करने के लिए नहीं कर सका, यह इसे और अधिक उपयोगी बनाने में अगला कदम होगा। **