El componente Emacs que se encarga de expandir ~
en los nombres de archivo es expand-file-name
. Desafortunadamente, está escrito en C, y en el fondo de sus intestinos hay un código que supone que lo que viene después ~
es un nombre de usuario. Afortunadamente, Emacs tiene una forma genérica de agregar un envoltorio alrededor de las funciones, por lo que puede hacer lo que quiera si no le importa repetir parte de la lógica en la función incorporada.
Aquí hay un código completamente no probado que debería ayudarte. Consulte "Asesoramiento de las funciones de Emacs Lisp" en el manual de Emacs Lisp para obtener más información; La idea básica es que defadvice
agrega un código para ejecutar antes del código real de expand-file-name
. Señale los errores que inevitablemente cometí en los comentarios (ya sea que sepa cómo solucionarlos o no).
(defvar expand-file-name-custom-tilde-alist
'(("foo" . "/home/Documents/foo")))
(defadvice expand-file-name (before expand-file-name-custom-tilde
(name &optional default-directory)
activate compile)
"User-defined expansions for ~NAME in file names."
(save-match-data
(when (string-match "\\`\\(\\(.*/\\)?~\\([^:/]+\\)\\)/" name)
(let ((replacement (assoc (match-string 3 name) expand-file-name-custom-tilde-alist)))
(when replacement
(setq name (replace-match (cdr replacement) t t name 1)))))))
Dejaré analizar los atajos .zshrc
para completar expand-file-name-custom-tilde-alist
(o cualquier técnica que elija para mantener los alias sincronizados) como ejercicio.