O componente Emacs que é responsável por expandir ~
nos nomes dos arquivos é expand-file-name
. Infelizmente, está escrito em C, e dentro de seus intestinos está o código que assume que o que vem depois de ~
é um nome de usuário. Felizmente, o Emacs tem uma maneira genérica de adicionar um wrapper em torno das 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 “Recomendando Funções Lisp do Emacs” no manual Emacs Lisp para mais informações; A idéia básica é que defadvice
adiciona algum código para ser executado antes do código real de expand-file-name
. Por favor, sinalize os erros que cometi inevitavelmente nos comentários (se você sabe como corrigi-los ou não).
(ad-define-subr-args 'expand-file-name '(name &optional default-directory))
(defvar expand-file-name-custom-tilde-alist
'("foo" . "/home/Documents/foo"))
(defadvice expand-file-name (before expand-file-name-custom-tilde
activate compile)
"User-defined expansions for ~NAME in file names."
(save-match-data
(if (string-match "\'\(\(.*/\)?~\([^:/]+\)\)/" name)
(let ((replacement (assoc (match-string 2 name) expand-file-name )))
(if replacement
(setq name (replace-match replacement t t name 1)))))))
Deixarei de analisar os atalhos em .zshrc
para preencher expand-file-name-custom-tilde-alist
(ou qualquer técnica que você escolha para manter os aliases em sincronia) como um exercício.