|
|
|
|
@ -33,7 +33,90 @@ |
|
|
|
|
;;; Code: |
|
|
|
|
;;;; Library Requires |
|
|
|
|
|
|
|
|
|
;;; Backports |
|
|
|
|
;; REVIEW Remove when 26.x support is dropped. This is exact the same as |
|
|
|
|
;; `directory-files-recursively' from Emacs 26, but with FOLLOW-SYMLINKS |
|
|
|
|
;; parameter from Emacs 27. |
|
|
|
|
(defun org-roam--directory-files-recursively (dir regexp |
|
|
|
|
&optional include-directories predicate |
|
|
|
|
follow-symlinks) |
|
|
|
|
"Return list of all files under directory DIR whose names match REGEXP. |
|
|
|
|
This function works recursively. Files are returned in \"depth |
|
|
|
|
first\" order, and files from each directory are sorted in |
|
|
|
|
alphabetical order. Each file name appears in the returned list |
|
|
|
|
in its absolute form. |
|
|
|
|
|
|
|
|
|
By default, the returned list excludes directories, but if |
|
|
|
|
optional argument INCLUDE-DIRECTORIES is non-nil, they are |
|
|
|
|
included. |
|
|
|
|
|
|
|
|
|
PREDICATE can be either nil (which means that all subdirectories |
|
|
|
|
of DIR are descended into), t (which means that subdirectories that |
|
|
|
|
can't be read are ignored), or a function (which is called with |
|
|
|
|
the name of each subdirectory, and should return non-nil if the |
|
|
|
|
subdirectory is to be descended into). |
|
|
|
|
|
|
|
|
|
If FOLLOW-SYMLINKS is non-nil, symbolic links that point to |
|
|
|
|
directories are followed. Note that this can lead to infinite |
|
|
|
|
recursion." |
|
|
|
|
(let* ((result nil) |
|
|
|
|
(files nil) |
|
|
|
|
(dir (directory-file-name dir)) |
|
|
|
|
;; When DIR is "/", remote file names like "/method:" could |
|
|
|
|
;; also be offered. We shall suppress them. |
|
|
|
|
(tramp-mode (and tramp-mode (file-remote-p (expand-file-name dir))))) |
|
|
|
|
(dolist (file (sort (file-name-all-completions "" dir) |
|
|
|
|
'string<)) |
|
|
|
|
(unless (member file '("./" "../")) |
|
|
|
|
(if (directory-name-p file) |
|
|
|
|
(let* ((leaf (substring file 0 (1- (length file)))) |
|
|
|
|
(full-file (concat dir "/" leaf))) |
|
|
|
|
;; Don't follow symlinks to other directories. |
|
|
|
|
(when (and (or (not (file-symlink-p full-file)) |
|
|
|
|
(and (file-symlink-p full-file) |
|
|
|
|
follow-symlinks)) |
|
|
|
|
;; Allow filtering subdirectories. |
|
|
|
|
(or (eq predicate nil) |
|
|
|
|
(eq predicate t) |
|
|
|
|
(funcall predicate full-file))) |
|
|
|
|
(let ((sub-files |
|
|
|
|
(if (eq predicate t) |
|
|
|
|
(condition-case nil |
|
|
|
|
(org-roam--directory-files-recursively |
|
|
|
|
full-file regexp include-directories |
|
|
|
|
predicate follow-symlinks) |
|
|
|
|
(file-error nil)) |
|
|
|
|
(org-roam--directory-files-recursively |
|
|
|
|
full-file regexp include-directories |
|
|
|
|
predicate follow-symlinks)))) |
|
|
|
|
(setq result (nconc result sub-files)))) |
|
|
|
|
(when (and include-directories |
|
|
|
|
(string-match regexp leaf)) |
|
|
|
|
(setq result (nconc result (list full-file))))) |
|
|
|
|
(when (string-match regexp file) |
|
|
|
|
(push (concat dir "/" file) files))))) |
|
|
|
|
(nconc result (nreverse files)))) |
|
|
|
|
|
|
|
|
|
;;; Obsolete aliases (remove after next major release) |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-today |
|
|
|
|
'org-roam-dailies-goto-today "org-roam 2.0") |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-yesterday |
|
|
|
|
'org-roam-dailies-goto-yesterday "org-roam 2.0") |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-tomorrow |
|
|
|
|
'org-roam-dailies-goto-tomorrow "org-roam 2.0") |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-next-note |
|
|
|
|
'org-roam-dailies-goto-next-note "org-roam 2.0") |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-previous-note |
|
|
|
|
'org-roam-dailies-goto-previous-note "org-roam 2.0") |
|
|
|
|
(define-obsolete-function-alias |
|
|
|
|
'org-roam-dailies-find-date |
|
|
|
|
'org-roam-dailies-goto-date "org-roam 2.0") |
|
|
|
|
|
|
|
|
|
;;; Obsolete functions |
|
|
|
|
|
|
|
|
|
(provide 'org-roam-compat) |
|
|
|
|
|