Thành phần Emacs chịu trách nhiệm mở rộng ~
tên tệp là expand-file-name
. Thật không may, nó được viết bằng C và sâu bên trong ruột của nó là mã giả định rằng cái đến sau ~
là tên người dùng. May mắn thay, Emacs có một cách chung để thêm một trình bao bọc xung quanh các hàm, vì vậy bạn có thể làm những gì bạn muốn nếu bạn không lặp lại một số logic trong hàm dựng sẵn.
Đây là một số mã hoàn toàn chưa được kiểm tra sẽ giúp bạn đi. Tra cứu Chức năng Tư vấn Emacs Lisp Chức năng Hướng dẫn sử dụng Emacs Lisp để biết thêm thông tin; ý tưởng cơ bản là defadvice
thêm một số mã để chạy trước mã thực tế của expand-file-name
. Vui lòng báo hiệu những lỗi tôi chắc chắn đã đưa ra trong các nhận xét (cho dù bạn có biết cách khắc phục hay không).
(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)))))))
Tôi sẽ để phân tích cú pháp các phím tắt .zshrc
để điền expand-file-name-custom-tilde-alist
(hoặc bất kỳ kỹ thuật nào bạn chọn để giữ bí danh đồng bộ) như một bài tập.