O componente Emacs responsável pela expansão dos ~
nomes dos arquivos é expand-file-name
. Infelizmente, está escrito em C, e no fundo de seu intestino está o código que assume que o que vem depois ~
é um nome de usuário. Felizmente, o Emacs tem uma maneira genérica de adicionar um wrapper às funções, para que você possa fazer o que quiser se não se importar em repetir parte da lógica na função interna.
Aqui está um código completamente não testado que deve ajudá-lo. Consulte “Orientando as funções do Emacs Lisp” no manual do Emacs Lisp para obter mais informações; a idéia básica é que defadvice
adicione algum código para executar antes do código real de expand-file-name
. Por favor, indique os erros que cometi inevitavelmente nos comentários (se você sabe como corrigi-los ou não).
(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)))))))
Vou deixar de analisar os atalhos .zshrc
para preencher expand-file-name-custom-tilde-alist
(ou qualquer outra técnica que você escolher para manter os aliases sincronizados) como um exercício.