J'ai trouvé quelque chose qui semble fonctionner correctement lors des tests initiaux: essentiellement relier <tab>à pcomplete-std-complete, mais comme cette fonction n'est pas interactive pour une raison quelconque, vous devez l'encapsuler:
(define-key eshell-mode-map (kbd "<tab>")
  (lambda () (interactive) (pcomplete-std-complete)))
Le pcompete-std-completetente d'utiliser les compléments écrits pcompleteavec l'interface utilisateur de complétion standard, qui ivypar défaut prévaudra (avec la mise à jour très récente, ils apparaissent dans une belle superposition directement dans le tampon eshell près du point!).
Les commentaires dans le code source de pcomplete-completions-at-point(qui pcomplete-std-completedépend de) mentionnent quelques problèmes potentiels:
;; 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.
Je pense que le premier ne m'affectera pas, car je ne pense pas que j'appuie jamais <tab>sauf à la fin de la ligne d'entrée. Pour l'instant, je n'ai pas vu le deuxième problème.
EDIT: Pour ceux qui ne connaissent pas les bizarreries d'Eshell (c'est un euphémisme), je devrais peut-être ajouter que pour relier la clé d'Eshell comme suggéré ci-dessus, vous devriez mettre ceci dans votre fichier init:
(add-hook 'eshell-mode-hook
  (lambda () 
    (define-key eshell-mode-map (kbd "<tab>")
      (lambda () (interactive) (pcomplete-std-complete)))))
Avant de me crier dessus pour l'antipattern gaspillage des raccourcis clavier, laissez-moi vous expliquer que eshell déclare son clavier avec (defvar eshell-mode-map nil)puis le fait à l' (setq-local eshell-mode-map (sparse-keymap))intérieur eshell-mode! (Le code a une ;; FIXME: What the hell!?utilité.) Cela signifie que vous ne pouvez pas relier les clés avant la fin des eshell-modeexécutions! D'où le crochet.
               
              
(add-hook 'eshell-mode-hook '(lambda ()doit être enroulé autour de lui.