Ho trovato qualcosa che sembra funzionare bene su test iniziale: in sostanza associare nuovamente <tab>
a pcomplete-std-complete
, ma dal momento che la funzione non è interattivo, per qualche motivo, è necessario avvolgerlo:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
Il pcompete-std-complete
tentativo di utilizzare i completamenti scritti pcomplete
con l'interfaccia utente di completamento standard, che ivy
per impostazione predefinita avrà la precedenza (con l'aggiornamento molto recente, appaiono in un bel overlay proprio nel buffer eshell vicino al punto!).
I commenti nel codice sorgente di pcomplete-completions-at-point
(che pcomplete-std-complete
dipende da) menzionano un paio di potenziali problemi:
;; 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.
Penso che il primo non mi influenzerà, dal momento che non credo di aver mai premuto <tab>
se non alla fine della riga di input. Non ho ancora visto la seconda superficie del problema, finora.
EDIT: Per coloro che non hanno familiarità con le stranezze di eshell (questo è un eufemismo), forse dovrei aggiungere che per ricollegare la chiave di eshell come suggerito sopra, dovresti metterlo nel tuo file init:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
Prima di gridarmi per l'antipasto inutile di legature di tasti, lasciami spiegare che eshell dichiara la sua mappa di chiavi (defvar eshell-mode-map nil)
e poi fa (setq-local eshell-mode-map (sparse-keymap))
dentro eshell-mode
! (Il codice ha un utile ;; FIXME: What the hell!?
.) Ciò significa che non è possibile ricollegare le chiavi fino a dopo l' eshell-mode
esecuzione! Da qui l'amo.
(add-hook 'eshell-mode-hook '(lambda ()
deve essere avvolto attorno ad esso.