branch: externals/denote-menu
commit 9bf3bed5e0f59621a98169bbbd4b359d3a039b22
Author: Mohamed Suliman <sulim...@tcd.ie>
Commit: Mohamed Suliman <sulim...@tcd.ie>

    speed up exports
---
 denote-menu.el | 71 ++++++++++++++++++----------------------------------------
 1 file changed, 22 insertions(+), 49 deletions(-)

diff --git a/denote-menu.el b/denote-menu.el
index 7979b5d8a5..7d9014bfeb 100644
--- a/denote-menu.el
+++ b/denote-menu.el
@@ -130,67 +130,47 @@ the defined form. Then updates the buffer."
       (progn
         (let
             ((current-entry-paths (denote-menu--entries-to-paths)))
-          (setq tabulated-list-entries
-                (lambda ()
-                  (let ((matching-denote-files
-                         (denote-menu-files-matching-regexp 
current-entry-paths denote-menu-current-regex)))
-                    (mapcar #'denote-menu--path-to-entry 
matching-denote-files))))))
-    (setq tabulated-list-entries
-          (lambda ()
-            (let ((matching-denote-files
-                   (denote-directory-files denote-menu-current-regex)))
-              (mapcar #'denote-menu--path-to-entry matching-denote-files)))))
+          (let ((matching-denote-files
+                 (denote-menu-files-matching-regexp current-entry-paths 
denote-menu-current-regex)))
+                    (setq tabulated-list-entries (mapcar 
#'denote-menu--path-to-entry matching-denote-files)))))
+
+    (let ((matching-denote-files
+           (denote-directory-files denote-menu-current-regex)))
+      (setq tabulated-list-entries (mapcar #'denote-menu--path-to-entry 
matching-denote-files))))
 
   (revert-buffer))
 
+
+
 (defun denote-menu--entries-to-filenames ()
   "Return list of file names present in the *Denote* buffer."
   (mapcar (lambda (entry)
-            (let* ((list-entry-identifier (car entry))
-                   (list-entry-denote-identifier (car (split-string 
list-entry-identifier "-")))
-                   (list-entry-denote-file-type  (cadr (split-string 
list-entry-identifier "-"))))
-              (file-name-nondirectory (denote-menu-get-path-by-id 
list-entry-denote-identifier
-                                                                  
list-entry-denote-file-type))))
-          (funcall tabulated-list-entries)))
+            (file-name-nondirectory (car entry)))
+          tabulated-list-entries))
 
 (defun denote-menu--entries-to-paths ()
   "Return list of file paths present in the *Denote* buffer."
   (mapcar (lambda (entry)
-            (let* ((list-entry-identifier (car entry))
-                   (list-entry-denote-identifier (car (split-string 
list-entry-identifier "-")))
-                   (list-entry-denote-file-type  (cadr (split-string 
list-entry-identifier "-"))))
-              (denote-menu-get-path-by-id list-entry-denote-identifier 
list-entry-denote-file-type)))
-          (funcall tabulated-list-entries)))
-
-(defun denote-menu-get-path-by-id (id file-type)
-  "Return absolute path of denote file with ID timestamp and
-FILE-TYPE in `denote-directory-files'."
-  (let* ((files (denote-directory-files))
-         (matching-files-with-id (seq-filter (lambda (f) (and (string-prefix-p 
id (file-name-nondirectory f)))) files)))
-    (car (seq-filter (lambda (f) (string-match-p (concat "\\." file-type) f)) 
matching-files-with-id))))
+            (car entry))
+          tabulated-list-entries))
+
 
 (defun denote-menu-files-matching-regexp (files regexp)
   "Return list of files matching REGEXP from FILES."
   (seq-filter (lambda (f) (string-match-p regexp f)) files))
 
-(defun denote-menu--path-to-unique-identifier (path)
-  "Convert PATH to a unique identifier to be used for
-`tabulated-list-entries'. Done by taking the denote identifier of
-PATH and appending the filename extension."
-  (let ((path-identifier (denote-retrieve-filename-identifier path))
-        (extension (file-name-extension path)))
-    (format "%s-%s" path-identifier extension)))
+
 
 (defun denote-menu--path-to-entry (path)
   "Convert PATH to an entry matching the form of `tabulated-list-entries'."
   (if denote-menu-show-file-signature
-      `(,(denote-menu--path-to-unique-identifier path)
+      `(,path
         [(,(denote-menu-date path) . (action ,(lambda (button) (funcall 
denote-menu-action path))))
          ,(denote-menu-signature path)
          ,(denote-menu-title path)
          ,(propertize (format "%s" (denote-extract-keywords-from-path path)) 
'face 'italic)])
 
-    `(,(denote-menu--path-to-unique-identifier path)
+    `(,path
         [(,(denote-menu-date path) . (action ,(lambda (button) (funcall 
denote-menu-action path))))
          ,(denote-menu-title path)
          ,(propertize (format "%s" (denote-extract-keywords-from-path path)) 
'face 'italic)])))
@@ -273,8 +253,7 @@ files that contain one of the keywords. When called from 
Lisp,
                                (not (string-match-p regex 
(denote-get-file-name-relative-to-denote-directory f))))
                              (denote-menu--entries-to-paths))))
     (setq tabulated-list-entries
-          (lambda ()
-            (mapcar #'denote-menu--path-to-entry non-matching-files))))
+          (mapcar #'denote-menu--path-to-entry non-matching-files)))
   (revert-buffer))
     
 (defun denote-menu-clear-filters ()
@@ -288,16 +267,10 @@ files that contain one of the keywords. When called from 
Lisp,
   "Switch to variable `denote-directory' and mark filtered *Denotes*
 files."
   (interactive)
-  (let ((files-to-mark (denote-menu--entries-to-filenames)))
-    (dired denote-directory)
-    (revert-buffer)
-    (dired-unmark-all-marks)
-    (dired-mark-if
-     (and (not (looking-at-p dired-re-dot))
-         (not (eolp))                  ; empty line
-         (let ((fn (dired-get-filename t t)))
-            (and fn (member fn files-to-mark))))
-     "matching file")))
+  (if-let* ((files (denote-menu--entries-to-filenames))
+            (default-directory (denote-directory)))
+      (dired (cons default-directory files))
+    (user-error "No files to export")))
 
 (define-derived-mode denote-menu-mode tabulated-list-mode "Denote Menu"
   "Major mode for browsing a list of Denote files."

Reply via email to