Komponen Emacs yang bertanggung jawab untuk memperluas ~
nama file adalah expand-file-name
. Sayangnya, itu ditulis dalam C, dan jauh di dalam perutnya adalah kode yang mengasumsikan bahwa apa yang muncul setelah itu ~
adalah nama pengguna. Untungnya, Emacs memiliki cara umum untuk menambahkan pembungkus di sekitar fungsi, sehingga Anda dapat melakukan apa yang Anda inginkan jika Anda tidak keberatan mengulangi beberapa logika dalam fungsi bawaan.
Berikut adalah beberapa kode yang sama sekali belum diuji yang harus Anda jalani. Cari “Advising Emacs Lisp Functions” di manual Emacs Lisp untuk informasi lebih lanjut; ide dasarnya adalah defadvice
menambahkan beberapa kode untuk dijalankan sebelum kode aktual expand-file-name
. Mohon beri tanda kesalahan yang telah saya buat dalam komentar (apakah Anda tahu cara memperbaikinya atau tidak).
(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)))))))
Saya akan membiarkan parsing pintasan .zshrc
untuk diisi expand-file-name-custom-tilde-alist
(atau teknik apa pun yang Anda pilih untuk menjaga alias tetap selaras) sebagai latihan.