From a55570bbf6f2a8a0c63752a76e02141944b3f815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Thu, 23 Apr 2026 07:37:49 -0600 Subject: [PATCH] feat(emacs): customisable syd-insert-file-name --- .../users/msyds/emacs/lisp/syd/prelude.el | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/modules/home/users/msyds/emacs/lisp/syd/prelude.el b/modules/home/users/msyds/emacs/lisp/syd/prelude.el index f752e91..dfb7305 100755 --- a/modules/home/users/msyds/emacs/lisp/syd/prelude.el +++ b/modules/home/users/msyds/emacs/lisp/syd/prelude.el @@ -199,15 +199,29 @@ form." (propertize " " 'display `(space :align-to (- right ,(+ 1 (length x))))) x)) +(defun syd-project-relative-file-name (file-name) + (file-relative-name file-name (project-root (project-current)))) + +(defvar syd-insert-file-name-alist + `((,#'syd-project-relative-file-name . "Project-relative") + (,#'file-relative-name . "File-relative") + (,#'identity . "Absolute")) + "List of pairs where each cons is a function mapping paths to paths + or nil, and each cons is a string description.") + +(defun syd--evaluate-syd-insert-file-name-alist (path) + (cl-loop for (fn . lbl) in syd-insert-file-name-alist + for r = (funcall fn path) + when r + collect (cons r lbl))) + (defun syd-insert-file-name () (interactive) - (let* ((path (read-file-name "Path: " nil nil 'confirm)) - (proj-root (project-root (project-current))) - (alts - `((,(file-relative-name path proj-root) . "Project-relative") - (,(file-relative-name path default-directory) . "File-relative") - (,path . "Absolute") - ("... (choose a dir)"))) + (let* ((path (expand-file-name + (read-file-name "Path: " nil nil 'confirm))) + (choose-a-dir "... (choose a dir)") + (alts (cons `(,choose-a-dir) + (syd--evaluate-syd-insert-file-name-alist path))) (choice (completing-read "Variant: " @@ -221,7 +235,7 @@ form." (syd--insert-file-name-annotation desc)))))) (_ (all-completions s (mapcar #'car alts) p))))))) - (if (equal choice "... (choose a root)") + (if (equal choice choose-a-dir) (insert (file-relative-name path (read-file-name "Relative to: " nil nil 'confirm)))