Encontré algo que parece funcionar bien en la prueba inicial: esencialmente volver <tab>
a vincular pcomplete-std-complete
, pero dado que esa función no es interactiva por alguna razón, debe envolverla:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
Los pcompete-std-complete
intentos de utilizar las terminaciones escritas para pcomplete
la interfaz de usuario de terminación estándar, que ivy
por defecto anulará (con la muy reciente actualización, que aparecen en un derecho de superposición agradable en el punto cercano ESHELL amortiguar!).
Los comentarios en el código fuente de pcomplete-completions-at-point
(que pcomplete-std-complete
depende de) mencionan un par de posibles problemas:
;; 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.
Creo que el primero no me afectará, ya que no creo que presione nunca <tab>
excepto al final de la línea de entrada. Tampoco he visto la superficie del segundo problema, hasta ahora.
EDITAR: Para aquellos que no están familiarizados con las peculiaridades de eshell (esto es un eufemismo), tal vez debería agregar eso para volver a vincular la clave de eshell como se sugirió anteriormente, debe poner esto en su archivo de inicio:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
Antes de que me grites por el antipatrón derrochador de ataduras de teclas, déjame explicarte que eshell declara su mapa de teclas (defvar eshell-mode-map nil)
y luego lo hace (setq-local eshell-mode-map (sparse-keymap))
dentro eshell-mode
. (El código es útil ;; FIXME: What the hell!?
.) ¡Eso significa que no puede volver a vincular las claves hasta después de las eshell-mode
ejecuciones! De ahí el anzuelo.
(add-hook 'eshell-mode-hook '(lambda ()
es necesario envolverlo.