मैं <RET> को हेल्म-फाइंड-फाइल्स में दबाकर डायरेक्टरी को कैसे खोलूँ?


25

जब मैं दौड़ता हूं #'helm-find-files, और एक निर्देशिका की ओर बढ़ता हूं , तो <ret>उस निर्देशिका को सूखे मोड में खोलने के लिए परिणाम दबाता है। किसी को C-jउस निर्देशिका में प्रवेश करने के लिए प्रेस करना होगा।

मैं चाहता हूं कि जैसा यहां होता है <RET>वैसा C-jहो, लेकिन जरूरी नहीं कि हर जगह ऐसा ही हो। मैंने जाँच की, और करने के C-jलिए बाध्य है #'helm-maybe-exit-minibuffer, जबकि करने के <RET>लिए बाध्य है #'helm-execute-persistent-action। इस मामले के <RET>लिए #'helm-maybe-exit-minibufferकाम करने के लिए बाध्य है , लेकिन अन्य मामलों को तोड़ता है: उदाहरण के लिए, पतवार स्वत: पूर्ण describe-function

इसलिए, जब एक फ़ाइल खोजने के लिए हेल्म का उपयोग किया जाता है, तो मैं <RET>उस निर्देशिका को हेल्म में खोलने का दबाव कैसे बना सकता हूं ?


1
@TuDo मैं उपयोग किया जाता है ido-mode, जहाँ दबाने <RET>पर फ़ोल्डर को उसके अंदर फ़ाइलों को खोजने के लिए चुना जाता है। मुझे लगता है कि फ़ाइल खोजने की कोशिश करते समय यह सबसे सुसंगत व्यवहार है - जब आपने पाया है कि फ़ाइल को खोलना है तो आप क्या करना चाहते हैं; जब आप पाते हैं कि आप क्या करना चाहते हैं तो एक फ़ोल्डर इसके अंदर जाता है ताकि आप फ़ाइल पा सकें।
zck

2
हेल्म का विपरीत व्यवहार होता है - जब किसी फाइल पर, <RET>ऑटोोकम्प्लीट्स और चयन दोनों होते हैं । <tab>फ़ाइल नाम पूरा करने के लिए आपको हिट करने की आवश्यकता नहीं है । लेकिन हम वरीयताओं पर बहस कर रहे हैं - मैं सिर्फ "दर्ज करना चाहता हूं" का अर्थ है "बिंदु पर बात का चयन करें"। और मेरे लिए, इसका मतलब यह नहीं है कि "ओपन डेयर"। यदि मैं एक शेल में था, तो मुझे अलग व्यवहार की उम्मीद है।
zck

4
मैं यहाँ zck के साथ हूं, ido का उपयोग करने के वर्षों के बाद मांसपेशियों की स्मृति है (और वहां सबसे अपेक्षित कार्रवाई नीचे ड्रिलिंग है) और यह हेल्म के लिए इस्तेमाल होने के दौरान मुख्य दर्द बिंदु था। मैंने तब से ड्रिल करने के लिए सही तीर कुंजी का उपयोग करने के लिए स्विच किया है (लगभग एक सप्ताह लग गया है)
ustun

1
मैं भी zck के साथ हूँ। इडो में नेविगेट करना हेल्म मानक व्यवहार की तुलना में बहुत अधिक सहज है। खासकर बैकस्पेस की। यह खोज से एक चार को हटा देता है या फ़ोल्डर में वापस कूदता है अगर कुछ भी नहीं डाला जाता है। क्या इस कार्य को प्राप्त करने के लिए कुंजी को फिर से तैयार करने का कोई तरीका है?
21

1
हेल्म 2.6.1 जैसा कि आप चाहते हैं कि व्यवहार डिफ़ॉल्ट है।
20

जवाबों:


19

मैंने बहुत अधिक उपयोग किया ido-modeहै और अपनी मांसपेशियों की स्मृति को प्रशिक्षित किया है :) मुझे लगता है कि दृष्टिकोण की तुलना में शैली अधिक सहज है । मैं सामान की खोज करता हूं (कुछ पात्रों में टाइपिंग) और अपने वेब ब्राउजर के सर्च / एड्रेस बार की तरह (हिट ) के लिए प्रतिबद्ध हूं। यदि चयन एक निर्देशिका है, तो मैं इस निर्देशिका को दर्ज करता हूं और इस निर्देशिका में फिर से खोज शुरू करता हूं। यह मेरे लिए स्वाभाविक लगता है, इसलिए मैंने इस मैकेनिक को मजबूर करने के लिए एक छोटी सी सलाह लिखी है ।idohelmREThelm-execute-persistent-action

(require 'helm)
(defun fu/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (and (equal "Find Files" (assoc-default 'name (helm-get-current-source)))
           (equal args nil)
           (stringp (helm-get-selection))
           (not (file-directory-p (helm-get-selection))))
      (helm-maybe-exit-minibuffer)
    (apply orig-fun args)))
(advice-add 'helm-execute-persistent-action :around #'fu/helm-find-files-navigate-forward)
(define-key helm-find-files-map (kbd "<return>") 'helm-execute-persistent-action)

मैंने backspaceकुंजी को थोड़ा अनुकूलित किया है। अगर मैं कुछ टाइप करता हूं और एक सुधार करना चाहता हूं, तो मैंने बैकस्पेस मारा। यह एक वर्ण को हटा देगा। यदि मैं डायरेक्टरी की शुरुआत में हूं और बैकस्पेस फिर से हिट करता हूं, तो मैं एक स्तर ऊपर नेविगेट करता हूं। यह नाटकीय रूप से नेविगेशन को गति देता है!

(defun fu/helm-find-files-navigate-back (orig-fun &rest args)
  (if (= (length helm-pattern) (length (helm-find-files-initial-input)))
      (helm-find-files-up-one-level 1)
    (apply orig-fun args)))
(advice-add 'helm-ff-delete-char-backward :around #'fu/helm-find-files-navigate-back)

बेकार .और ..बहुत शुरुआत में निकालने के लिए , आप इसे helm-boring-file-regexp-listकॉन्फ़िगरेशन चर में जोड़ सकते हैं ।


1
हेल्म दृष्टिकोण find-fileहालांकि स्टॉक के अनुरूप है । और .और ..वास्तव में बेकार suddent जब आप वर्तमान या पेरेंट निर्देशिका में DIRED खोलना चाहते हैं नहीं है। और मुझे लगता है कि C-lदबाने से तेज है backspace
तू डो

मैं इस व्यवहार को थोड़ा और अनुकूलित करने के लिए वापस चक्कर लगा रहा हूं - क्या कोई कारण है कि आप यहां सलाह का उपयोग करते हैं, और सीधे ईंधन / हेल्म-फाइंड-फाइल्स-नेविगेट-बाइंड को बाइंड नहीं करते हैं (kbd "<return>")? ऐसा लगता है कि नए फंक्शन के अंदर सीधे हेल्म-एक्ज़िक्यूट-सस्टेंट-एक्शन को सीधे कॉल करना थोड़ा साफ है।
zck

दुर्भाग्य से, यह मेरे लिए काम नहीं करता है। सबसे पहले, मैं मिलता हूं Symbol's value as variable is void: helm-find-files-map। जब मैं डाल (helm-mode 1)के बाद (require 'helm), मैं ऐसी कोई त्रुटि मिलती है, लेकिन यह या तो काम नहीं करता। कोई आइडिया जो मुझे याद आ रहा है? यहाँ मेरा पूरा init.el है: pastebin.com/drFZsDxW Emacs संस्करण 24.4.1 (i686-pc-mingw32)
गीयर

मेरे लिए काम नहीं किया। यहां तक ​​कि define-key, अगर मैं C-h k RETतेह फाइंड-फाइल मिनीबफ़र पर कोशिश करता हूं, तो यह अभी भी helm-confirm-and-exit-minibufferबाध्य है।
राफेल इब्राहिम

@ राफेलआईब्रिम का उपयोग करने का प्रयास करें (केबीडी "आरईटी")
नेटवाटर

0

मैं निरस्त होने के कारण Fu86 के उत्तर पर टिप्पणी नहीं कर सकता, लेकिन मैं इसे बंद कर रहा हूं (क्षमा करें, यदि यह सामान्य प्रोटोकॉल नहीं है)। मुझे "helm-find-files-map" के कारण उनके उत्तर का उपयोग करके एक शून्य फ़ंक्शन मिला। इसने मेरे बजाय "हेल-मैप" कुंजी मानचित्र का उपयोग करने के लिए काम किया। अब तक कोई संघर्ष नहीं हुआ और यह वह व्यवहार है जिसकी मुझे तलाश थी।

... (define-key helm-map (kbd "<return>") 'helm-execute-persistent-action) ...


-1

मुझे काम करने के लिए @ फू 86 का जवाब नहीं मिला लेकिन निम्नलिखित ने मेरे लिए काम किया:

(defun jkf/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (file-directory-p (helm-get-selection)) 
      (helm-execute-persistent-action)
    (apply orig-fun args)))
(advice-add 'helm-confirm-and-exit-minibuffer 
   :around #'jkf/helm-find-files-navigate-forward)

इसे भी देखें: /programming/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

संपादित करें

मेरा समाधान helm-20141112.946 में काम करता है लेकिन helm-20160211.934 में यह काम नहीं करता है और @ Fu86 उत्तर समाधान है

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