Ben ilk testlere iş OK görünüyor şey buldum: esasen rebind <tab>için pcomplete-std-complete, ama bu işlev nedense interaktif olmadığından, bunu kaydırmak gerekir:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
pcompete-std-completeÇalışır için yazılmış tamamlamaları kullanmak pcompletestandart tamamlanma UI ile ivyvarsayılan olarak geçersiz kılar (çok yeni güncelleme ile, onlar tampon eshell yakın noktasında güzel bir bindirme sağ görünür!).
Kaynak kodundaki pcomplete-completions-at-point(buna pcomplete-std-completebağlı olarak) yorumlar birkaç potansiyel sorundan bahseder:
;; 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.
İlkinin beni etkilemeyeceğini düşünüyorum, çünkü <tab>giriş satırının sonu dışında bastığımı sanmıyorum . Şimdiye kadar ikinci sorun yüzeyini de görmedim.
DÜZENLEME: eshell tuhafları (bu bir örtmece olduğunu) bilmeyenler için, belki de yukarıda önerildiği gibi eshell anahtarını yeniden hatırlatmak için bunu init dosyasına koymak gerekir:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
Çengelli çöp anahtarlamalar için bana bağırmadan önce, eshell'in anahtar haritasını ilan ettiğini (defvar eshell-mode-map nil)ve sonra (setq-local eshell-mode-map (sparse-keymap))içeride yaptığını açıklayayım eshell-mode! (Kod yararlıdır ;; FIXME: What the hell!?.) Bu, eshell-modeçalıştırmadan sonra anahtarları yeniden bağlayamayacağınız anlamına gelir ! Dolayısıyla kanca.
(add-hook 'eshell-mode-hook '(lambda ()etrafına sarılması gerektiğini eklemelisiniz .