J'aime beaucoup l' ivy
achèvement et j'adore le fait qu'un simple (ivy-mode 1)
suffit pour obtenir ivy
presque partout qu'Emacs utilise une sorte d'achèvement (qui est accompli en remplaçant completeing-read
, je crois). Mais cela ne configure pas eshell
à utiliser ivy
pour l'achèvement de l'onglet. J'aime eshell
la liste des candidats à l'achèvement, mais je préférerais que l' ivy
interface utilisateur les choisisse. Existe-t-il un moyen de réutiliser quoi eshell
que ce soit pour produire des candidats à l'achèvement et de les remettre au lierre?
16
(add-hook 'eshell-mode-hook '(lambda ()
doit être enroulé autour de lui.pcomplete
l'interface utilisateur d'achèvement standard.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:Le
pcompete-std-complete
tente d'utiliser les compléments écritspcomplete
avec l'interface utilisateur de complétion standard, quiivy
par 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
(quipcomplete-std-complete
dépend de) mentionnent quelques problèmes potentiels: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:
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érieureshell-mode
! (Le code a une;; FIXME: What the hell!?
utilité.) Cela signifie que vous ne pouvez pas relier les clés avant la fin deseshell-mode
exécutions! D'où le crochet.la source
helm
n'est pas déjà insinué dans l'eshell
achèvement de l'onglet, ce correctif s'applique également àhelm
.