मुझे ऐसा कुछ मिला जो प्रारंभिक परीक्षण पर ठीक काम करता है: अनिवार्य रूप से विद्रोही <tab>
करने के लिए pcomplete-std-complete
, लेकिन चूंकि यह फ़ंक्शन किसी कारण से इंटरैक्टिव नहीं है, इसलिए आपको इसे लपेटने की आवश्यकता है:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
pcompete-std-complete
pcomplete
मानक पूर्ण UI के साथ लिखे गए पूर्णताओं का उपयोग करने कोशिश करता है , जो ivy
डिफ़ॉल्ट रूप से ओवरराइड करेगा (बहुत हालिया अपडेट के साथ, वे बिंदु के पास एशेल बफर में एक अच्छे ओवरले में दिखाई देते हैं!)।
के स्रोत कोड में टिप्पणियाँ pcomplete-completions-at-point
(जो pcomplete-std-complete
निर्भर करती है) कुछ संभावित समस्याओं का उल्लेख करती है:
;; FIXME: it only completes the text before point, whereas the
;; standard UI may also consider text after point.
;; FIXME: the `pcomplete' UI may be used internally during
;; pcomplete-completions and then throw to `pcompleted', thus
;; imposing the pcomplete UI over the standard UI.
मुझे लगता है कि पहला मुझे प्रभावित नहीं करेगा, क्योंकि मुझे नहीं लगता कि मैं <tab>
इनपुट लाइन के अंत को छोड़कर कभी प्रेस करता हूं । मैंने अब तक दूसरी समस्या की सतह को नहीं देखा है।
EDIT: एस्केल के क्विर्क से अपरिचित लोगों के लिए (यह एक व्यंजना है), शायद मुझे इसे जोड़ना चाहिए कि एशेल की कुंजी को फिर से शुरू करने के लिए जैसा कि ऊपर बताया गया है कि आपको इसे अपनी इनिट फ़ाइल में रखना चाहिए:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
इससे पहले कि आप मुझ पर बेकार कीबाइंडिंग-इन-हुक एंटीपैटर्न के लिए चिल्लाएं, मुझे समझाएं कि एशेल अपने कीमैप की घोषणा (defvar eshell-mode-map nil)
करता है और फिर (setq-local eshell-mode-map (sparse-keymap))
अंदर करता है eshell-mode
! (कोड में एक सहायक है ;; FIXME: What the hell!?
।) इसका मतलब है कि आप eshell-mode
रन के बाद तक कुंजियों को रिबंड नहीं कर सकते हैं ! इसलिए हुक।
(add-hook 'eshell-mode-hook '(lambda ()
इसके चारों ओर लपेटने की आवश्यकता है।