Компонент Emacs, который отвечает за расширение ~
имен файлов expand-file-name
. К сожалению, он написан на C, и глубоко внутри его кишечника находится код, который предполагает, что последующим ~
является имя пользователя. К счастью, в Emacs есть общий способ добавления обертки вокруг функций, поэтому вы можете делать все, что хотите, если не возражаете повторить некоторую логику во встроенной функции.
Вот некоторый полностью непроверенный код, который должен помочь вам. Для получения дополнительной информации обратитесь к разделу «Советы по функциям Emacs Lisp» в руководстве по Emacs Lisp. Основная идея заключается в том, что defadvice
добавляет некоторый код для запуска перед фактическим кодом expand-file-name
. Пожалуйста, отметьте ошибки, которые я неизбежно сделал в комментариях (знаете ли вы, как их исправить или нет).
(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)))))))
Я оставлю разбор ярлыков, .zshrc
чтобы заполнить expand-file-name-custom-tilde-alist
(или любой другой метод, который вы выберете, чтобы синхронизировать псевдонимы) в качестве упражнения.