Add denote--get-file-name-relative-to-directories

This commit is contained in:
Jean-Philippe Gagné Guay 2026-01-04 17:36:03 -05:00
parent 65255f46df
commit 786c86f567

View file

@ -1248,19 +1248,20 @@ what remains."
(and (file-writable-p file)
(denote-file-has-supported-extension-p file)))
(defun denote-get-file-name-relative-to-denote-directory (file &optional directories)
"Return FILE relative to the variable `denote-directory'.
With optional DIRECTORIES, as a list of directories, return FILE
relative to whichever one of those it belongs to."
(defun denote--get-file-name-relative-to-directories (file directories)
"Return FILE relative to one of the DIRECTORIES."
(unless (file-name-absolute-p file)
(error "The file `%s' is not absolute" file))
(when-let* ((dirs (or directories (denote-directories)))
(directory (seq-find
(when-let* ((directory (seq-find
(lambda (d)
(string-prefix-p d file))
dirs)))
directories)))
(substring-no-properties file (length directory))))
(defun denote-get-file-name-relative-to-denote-directory (file)
"Return FILE relative to the variable `denote-directory'."
(denote--get-file-name-relative-to-directories file (denote-directories)))
(defun denote-extract-id-from-string (string)
"Return existing Denote identifier in STRING, else nil."
(when (string-match denote-date-identifier-regexp string)
@ -1278,7 +1279,7 @@ Avoids traversing dotfiles (unconditionally) and whatever matches
(let* ((directories (denote-directories))
(predicate-fn
(lambda (file)
(let ((rel (denote-get-file-name-relative-to-denote-directory file directories)))
(let ((rel (denote--get-file-name-relative-to-directories file directories)))
(cond
((string-match-p "\\`\\." rel) nil)
((string-match-p "/\\." rel) nil)
@ -1347,10 +1348,11 @@ files that have an identifier."
(when (and omit-current buffer-file-name (denote-file-has-identifier-p buffer-file-name))
(setq files (delete buffer-file-name files)))
(when files-matching-regexp
(setq files (seq-filter
(lambda (f)
(string-match-p files-matching-regexp (denote-get-file-name-relative-to-denote-directory f)))
files)))
(let ((dirs (denote-directories)))
(setq files (seq-filter
(lambda (f)
(string-match-p files-matching-regexp (denote--get-file-name-relative-to-directories f dirs)))
files))))
(when text-only
(setq files (seq-filter #'denote-file-has-supported-extension-p files)))
(when has-identifier
@ -1366,14 +1368,15 @@ files that have an identifier."
"Return list of subdirectories in variable `denote-directory'.
Omit dotfiles (such as .git) unconditionally. Also exclude
whatever matches `denote-excluded-directories-regexp'."
(seq-remove
(lambda (filename)
(let ((rel (denote-get-file-name-relative-to-denote-directory filename (denote-directories))))
(or (not (file-directory-p filename))
(string-match-p "\\`\\." rel)
(string-match-p "/\\." rel)
(denote--exclude-directory-regexp-p rel))))
(denote--directory-all-files-recursively)))
(let ((dirs (denote-directories)))
(seq-remove
(lambda (filename)
(let ((rel (denote--get-file-name-relative-to-directories filename dirs)))
(or (not (file-directory-p filename))
(string-match-p "\\`\\." rel)
(string-match-p "/\\." rel)
(denote--exclude-directory-regexp-p rel))))
(denote--directory-all-files-recursively))))
;; TODO 2023-01-24: Perhaps there is a good reason to make this a user
;; option, but I am keeping it as a generic variable for now.
@ -1551,7 +1554,7 @@ Return the absolute path to the matching file."
(relative-files (if single-dir-p
(mapcar
(lambda (file)
(denote-get-file-name-relative-to-denote-directory file roots))
(denote--get-file-name-relative-to-directories file roots))
files)
files))
(prompt (if single-dir-p
@ -5436,7 +5439,7 @@ the generic one."
(file-names (if single-dir-p
(mapcar
(lambda (file)
(denote-get-file-name-relative-to-denote-directory file roots))
(denote--get-file-name-relative-to-directories file roots))
files)
files))
(selected (completing-read
@ -6617,7 +6620,7 @@ contents, not file names. Optional ID-ONLY has the same meaning as in
(file-names (if single-dir-p
(mapcar
(lambda (file)
(denote-get-file-name-relative-to-denote-directory file roots))
(denote--get-file-name-relative-to-directories file roots))
buffer-file-names)
buffer-file-names))
(selected (completing-read