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 pcomplete
standart tamamlanma UI ile ivy
varsayı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-complete
bağ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 .