J'essaie de commencer à utiliser eshell à la place de bash dans emacs, mais je me fie beaucoup aux fonctions bash que j'ai écrites au fil des années. Je voudrais configurer eshell pour appeler bash chaque fois qu'une condition «commande non trouvée» se produit, dans le cas où la commande en question est implémentée en tant que fonction bash.Comment définir une autre commande pour emacs eshell
Il ya une variable nommée eshell-alternate-command-hook
qui sonne comme si elle est faite sur commande, mais mon manque de compétences élisp interfère avec mon succès, je pense.
Ceci est mon meilleur effort:
(add-hook 'eshell-alternate-command-hook 'invoke-bash t t)
(defun invoke-bash (command args)
(throw 'eshell-replace-command
(list "bash -c" command args)))
Mais quand je le tester, il ne fonctionne pas:
c:/temp $ lsd
Wrong number of arguments: (lambda (command args) (throw (quote eshell-replace-command) (list "bash -c" command args))), 1
c:/temp $
essayer quelque chose comme ceci: https://gist.github.com/1903146, bien que je ne l'avais pas essayé –
Merci, je vois que progn est vestigial et pas nécessaire, même si cela ne semblait pas fonctionner quand j'ai utilisé ' laissez 'au lieu de' setq '. (Peut-être que j'ai fait quelque chose de mal) – wytten
étrange que 'let' ne fonctionne pas pour vous. Le but principal de 'let' est la création de variables dans un contexte local. Dans votre code, parce que 'invoke-bash-cmd' n'est pas déclaré dans le contexte local, ce sera une variable globale –