J'ai donc posé cette question sur les raccourcis de répertoire dans un shell. L'idée est que j'aimerais pouvoir ouvrir un fichier /home/Documents/foo
, par exemple, en tapant C-x C-f ~foo/file
.
Alors, existe-t-il un moyen d'émuler les "répertoires nommés" de zsh dans le tampon emacs?
Soit dit en passant, les définitions de raccourcis que je veux utiliser sont déjà dans mon .zshrc, s'il existe une solution qui les lit directement, qui obtient des points bonus.
Réponses:
Le composant Emacs qui est responsable de l'expansion
~
des noms de fichiers estexpand-file-name
. Malheureusement, il est écrit en C, et au fond de ses entrailles se trouve un code qui suppose que ce qui vient après~
est un nom d'utilisateur. Heureusement, Emacs a une façon générique d'ajouter un wrapper autour des fonctions, vous pouvez donc faire ce que vous voulez si cela ne vous dérange pas de répéter une partie de la logique de la fonction intégrée.Voici un code complètement non testé qui devrait vous permettre de démarrer. Consultez «Conseils sur les fonctions Emacs Lisp» dans le manuel Emacs Lisp pour plus d'informations; l'idée de base est d'
defadvice
ajouter du code à exécuter avant le code réel deexpand-file-name
. Veuillez signaler les erreurs que j'ai inévitablement commises dans les commentaires (que vous sachiez les corriger ou non).Je vais laisser l'analyse des raccourcis
.zshrc
à remplirexpand-file-name-custom-tilde-alist
(ou quelle que soit la technique que vous choisissez pour garder les alias synchronisés) comme exercice.la source
(defun my/add-to-tilde-alist (hash) (let* ((tilde:dir (split-string hash "=")) (tilde (car tilde:dir)) (dir (cadr tilde:dir))) (push (cons tilde dir) expand-file-name-custom-tilde-alist))) (mapc #'my/add-to-tilde-alist (split-string (with-output-to-string (call-process "zsh" nil standard-output nil "-ic" "hash -d")) "\n" t))
Utilisez simplement
$foo
plutôt que~foo
dans le mini-tampon. Emacs traiterafoo
comme le nom d'une variable d'environnement et utilisera sa valeur.la source