Я знайшов те , що , здається, працює нормально при первинному тестуванні: по суті Пересвяжіте <tab>
до pcomplete-std-complete
, але так як ця функція не є інтерактивним за якою - то причини вам потрібно обернути його:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
У pcompete-std-complete
намагаєшся використовувати доопрацювання , написані для pcomplete
зі стандартним закінчення UI, який ivy
за замовчуванням буде перевизначати (з самим останнім оновленням, вони з'являються в хорошому оверлее прямо в eshell буфер поблизу точці!).
У коментарях до вихідного коду pcomplete-completions-at-point
(від цього pcomplete-std-complete
залежить) згадується декілька можливих проблем:
;; 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.
Я думаю, що перший не вплине на мене, оскільки я не думаю, що я натискатиму, <tab>
окрім кінця рядка введення. Я ще не бачив другої проблемної поверхні.
EDIT: Для тих, хто не знайомий з примхами eshell (це евфемізм), можливо, я повинен додати, що для повторного введення ключа eshell, як було запропоновано вище, ви повинні помістити це у свій файл init:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
Перш ніж ви будете кричати на мене за марнотратну прив'язку клавіш у гачку, дозвольте мені пояснити, що eshell оголошує свою ключову карту, (defvar eshell-mode-map nil)
а потім (setq-local eshell-mode-map (sparse-keymap))
всередині eshell-mode
! (Код є корисним ;; FIXME: What the hell!?
.) Це означає, що ви не можете перевстановити клавіші до після eshell-mode
запуску! Звідси гачок.
(add-hook 'eshell-mode-hook '(lambda ()
його потрібно обернути навколо.