emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/denote 4fd7e0d8ea 4/4: Merge pull request #65 from jean


From: ELPA Syncer
Subject: [elpa] externals/denote 4fd7e0d8ea 4/4: Merge pull request #65 from jeanphilippegg/reorganization
Date: Fri, 29 Jul 2022 04:57:28 -0400 (EDT)

branch: externals/denote
commit 4fd7e0d8ea7cd3550f7bfa25a162ee4360ccf20d
Merge: f698ce0332 b8b365bb82
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #65 from jeanphilippegg/reorganization
    
    Cleanup of denote.el
---
 denote.el | 242 ++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 119 insertions(+), 123 deletions(-)

diff --git a/denote.el b/denote.el
index ab64acd592..2fceb1ff8b 100644
--- a/denote.el
+++ b/denote.el
@@ -424,8 +424,6 @@ FILE must be an absolute path."
            (string-match-p denote--id-regexp (buffer-name)))
        (string-prefix-p (denote-directory) (expand-file-name 
default-directory))))
 
-;;;; Keywords
-
 (defun denote--directory-files-recursively (directory)
   "Return expanded files in DIRECTORY recursively."
   (mapcar
@@ -466,6 +464,8 @@ names that are relative to the variable `denote-directory'."
         f))
     (denote--directory-files))))
 
+;;;; Keywords
+
 (defun denote--extract-keywords-from-path (path)
   "Extract keywords from PATH."
   (let* ((file-name (file-name-nondirectory path))
@@ -712,21 +712,6 @@ should be valid for note creation."
     (setq denote-last-buffer buffer)
     (setq denote-last-front-matter header)))
 
-(defvar denote--title-history nil
-  "Minibuffer history of `denote--title-prompt'.")
-
-(defun denote--title-prompt (&optional default-title)
-  "Read file title for `denote'.
-
-Optional DEFAULT-TITLE is used as the default value."
-  (let ((format (if default-title
-                    (format "File title [%s]: " default-title)
-                  "File title: ")))
-    (setq denote-last-title
-          (read-string format nil 'denote--title-history default-title))))
-
-;;;;; The `denote' command
-
 (defun denote--dir-in-denote-directory-p (directory)
   "Return DIRECTORY if in variable `denote-directory', else nil."
   (when-let* ((dir directory)
@@ -734,6 +719,83 @@ Optional DEFAULT-TITLE is used as the default value."
                                 (expand-file-name dir))))
     dir))
 
+(defun denote--file-type-symbol (filetype)
+  "Return FILETYPE as a symbol."
+  (cond
+   ((stringp filetype)
+    (intern filetype))
+   ((symbolp filetype)
+    filetype)
+   (t (user-error "`%s' is not a symbol or string" filetype))))
+
+(defun denote--date-add-current-time (date)
+  "Add current time to DATE, if necessary.
+The idea is to turn 2020-01-15 into 2020-01-15 16:19 so that the
+hour and minute component is not left to 00:00.
+
+This reduces the burden on the user who would otherwise need to
+input that value in order to avoid the error of duplicate
+identifiers.
+
+It also addresses a difference between Emacs 28 and Emacs 29
+where the former does not read dates without a time component."
+  (if (<= (length date) 10)
+      (format "%s %s" date (format-time-string "%H:%M:%S" (current-time)))
+    date))
+
+(defun denote--valid-date (date)
+  "Return DATE if parsed by `date-to-time', else signal error."
+  (let ((datetime (denote--date-add-current-time date)))
+    (date-to-time datetime)))
+
+(defun denote--buffer-file-names ()
+  "Return file names of active buffers."
+  (mapcar
+   (lambda (name)
+     (file-name-nondirectory name))
+   (seq-filter
+    (lambda (name) (denote--only-note-p name))
+    (delq nil
+          (mapcar
+           (lambda (buf)
+             (buffer-file-name buf))
+           (buffer-list))))))
+
+;; This should only be relevant for `denote-date', otherwise the
+;; identifier is always unique (we trust that no-one writes multiple
+;; notes within fractions of a second).
+(defun denote--id-exists-p (identifier)
+  "Return non-nil if IDENTIFIER already exists."
+  (let ((current-buffer-name (when (buffer-file-name)
+                               (file-name-nondirectory (buffer-file-name)))))
+    (or (seq-some (lambda (file)
+                    (string-match-p (concat "\\`" identifier) file))
+                  (delete current-buffer-name (denote--buffer-file-names)))
+        (delete current-buffer-name
+                (denote--directory-files-matching-regexp
+                 (concat "\\`" identifier))))))
+
+(defun denote--barf-duplicate-id (identifier)
+  "Throw a user-error if IDENTIFIER already exists else return t."
+  (if (denote--id-exists-p identifier)
+      (user-error "`%s' already exists; aborting new note creation" identifier)
+    t))
+
+(defun denote--subdirs ()
+  "Return list of subdirectories in variable `denote-directory'."
+  (seq-remove
+   (lambda (filename)
+     ;; TODO 2022-07-03: Generalise for all VC backends.  Which ones?
+     ;;
+     ;; TODO 2022-07-03: Maybe it makes sense to also allow the user to
+     ;; specify a blocklist of directories that should always be
+     ;; excluded?
+     (or (string-match-p "\\.git" filename)
+         (not (file-directory-p filename))))
+   (directory-files-recursively (denote-directory) ".*" t t)))
+
+;;;;; The `denote' command and its prompts
+
 ;;;###autoload
 (defun denote (&optional title keywords file-type subdirectory date)
   "Create a new note with the appropriate metadata and file name.
@@ -781,9 +843,18 @@ When called from Lisp, all arguments are optional.
     (denote--prepare-note (or title "") keywords date id directory file-type)
     (denote--keywords-add-to-history keywords)))
 
-(defalias 'denote-create-note (symbol-function 'denote))
+(defvar denote--title-history nil
+  "Minibuffer history of `denote--title-prompt'.")
 
-;;;;; The `denote-type' command
+(defun denote--title-prompt (&optional default-title)
+  "Read file title for `denote'.
+
+Optional DEFAULT-TITLE is used as the default value."
+  (let ((format (if default-title
+                    (format "File title [%s]: " default-title)
+                  "File title: ")))
+    (setq denote-last-title
+          (read-string format nil 'denote--title-history default-title))))
 
 (defvar denote--file-type-history nil
   "Minibuffer history of `denote--file-type-prompt'.")
@@ -797,30 +868,6 @@ here for clarity."
    "Select file type: " '(org markdown-yaml markdown-toml text) nil t
    nil 'denote--file-type-history))
 
-(defun denote--file-type-symbol (filetype)
-  "Return FILETYPE as a symbol."
-  (cond
-   ((stringp filetype)
-    (intern filetype))
-   ((symbolp filetype)
-    filetype)
-   (t (user-error "`%s' is not a symbol or string" filetype))))
-
-;;;###autoload
-(defun denote-type ()
-  "Create note while prompting for a file type.
-
-This is the equivalent to calling `denote' when `denote-prompts'
-is set to \\='(file-type title keywords)."
-  (declare (interactive-only t))
-  (interactive)
-  (let ((denote-prompts '(file-type title keywords)))
-    (call-interactively #'denote)))
-
-(defalias 'denote-create-note-using-type (symbol-function 'denote-type))
-
-;;;;; The `denote-date' command
-
 (defvar denote--date-history nil
   "Minibuffer history of `denote--date-prompt'.")
 
@@ -830,58 +877,41 @@ is set to \\='(file-type title keywords)."
    "DATE and TIME for note (e.g. 2022-06-16 14:30): "
    nil 'denote--date-history))
 
-(defun denote--date-add-current-time (date)
-  "Add current time to DATE, if necessary.
-The idea is to turn 2020-01-15 into 2020-01-15 16:19 so that the
-hour and minute component is not left to 00:00.
+(defvar denote--subdir-history nil
+  "Minibuffer history of `denote-subdirectory'.")
 
-This reduces the burden on the user who would otherwise need to
-input that value in order to avoid the error of duplicate
-identifiers.
+(defun denote--subdirs-completion-table (dirs)
+  "Match DIRS as a completion table."
+  (let* ((def (car denote--subdir-history))
+         (table (denote--completion-table 'file dirs))
+         (prompt (if def
+                     (format "Select subdirectory [%s]: " def)
+                   "Select subdirectory: ")))
+    (completing-read prompt table nil t nil 'denote--subdir-history def)))
 
-It also addresses a difference between Emacs 28 and Emacs 29
-where the former does not read dates without a time component."
-  (if (<= (length date) 10)
-      (format "%s %s" date (format-time-string "%H:%M:%S" (current-time)))
-    date))
+(defun denote--subdirs-prompt ()
+  "Handle user input on choice of subdirectory."
+  (let* ((root (directory-file-name (denote-directory)))
+         (subdirs (denote--subdirs))
+         (dirs (push root subdirs)))
+    (denote--subdirs-completion-table dirs)))
 
-(defun denote--valid-date (date)
-  "Return DATE if parsed by `date-to-time', else signal error."
-  (let ((datetime (denote--date-add-current-time date)))
-    (date-to-time datetime)))
+;;;;; Convenience functions
 
-(defun denote--buffer-file-names ()
-  "Return file names of active buffers."
-  (mapcar
-   (lambda (name)
-     (file-name-nondirectory name))
-   (seq-filter
-    (lambda (name) (denote--only-note-p name))
-    (delq nil
-          (mapcar
-           (lambda (buf)
-             (buffer-file-name buf))
-           (buffer-list))))))
+(defalias 'denote-create-note (symbol-function 'denote))
 
-;; This should only be relevant for `denote-date', otherwise the
-;; identifier is always unique (we trust that no-one writes multiple
-;; notes within fractions of a second).
-(defun denote--id-exists-p (identifier)
-  "Return non-nil if IDENTIFIER already exists."
-  (let ((current-buffer-name (when (buffer-file-name)
-                               (file-name-nondirectory (buffer-file-name)))))
-    (or (seq-some (lambda (file)
-                    (string-match-p (concat "\\`" identifier) file))
-                  (delete current-buffer-name (denote--buffer-file-names)))
-        (delete current-buffer-name
-                (denote--directory-files-matching-regexp
-                 (concat "\\`" identifier))))))
+;;;###autoload
+(defun denote-type ()
+  "Create note while prompting for a file type.
 
-(defun denote--barf-duplicate-id (identifier)
-  "Throw a user-error if IDENTIFIER already exists else return t."
-  (if (denote--id-exists-p identifier)
-      (user-error "`%s' already exists; aborting new note creation" identifier)
-    t))
+This is the equivalent to calling `denote' when `denote-prompts'
+is set to \\='(file-type title keywords)."
+  (declare (interactive-only t))
+  (interactive)
+  (let ((denote-prompts '(file-type title keywords)))
+    (call-interactively #'denote)))
+
+(defalias 'denote-create-note-using-type (symbol-function 'denote-type))
 
 ;;;###autoload
 (defun denote-date ()
@@ -899,40 +929,6 @@ is set to \\='(date title keywords)."
 
 (defalias 'denote-create-note-using-date (symbol-function 'denote-date))
 
-;;;;; The `denote-subdirectory' command
-
-(defvar denote--subdir-history nil
-  "Minibuffer history of `denote-subdirectory'.")
-
-(defun denote--subdirs ()
-  "Return list of subdirectories in variable `denote-directory'."
-  (seq-remove
-   (lambda (filename)
-     ;; TODO 2022-07-03: Generalise for all VC backends.  Which ones?
-     ;;
-     ;; TODO 2022-07-03: Maybe it makes sense to also allow the user to
-     ;; specify a blocklist of directories that should always be
-     ;; excluded?
-     (or (string-match-p "\\.git" filename)
-         (not (file-directory-p filename))))
-   (directory-files-recursively (denote-directory) ".*" t t)))
-
-(defun denote--subdirs-completion-table (dirs)
-  "Match DIRS as a completion table."
-  (let* ((def (car denote--subdir-history))
-         (table (denote--completion-table 'file dirs))
-         (prompt (if def
-                     (format "Select subdirectory [%s]: " def)
-                   "Select subdirectory: ")))
-    (completing-read prompt table nil t nil 'denote--subdir-history def)))
-
-(defun denote--subdirs-prompt ()
-  "Handle user input on choice of subdirectory."
-  (let* ((root (directory-file-name (denote-directory)))
-         (subdirs (denote--subdirs))
-         (dirs (push root subdirs)))
-    (denote--subdirs-completion-table dirs)))
-
 ;;;###autoload
 (defun denote-subdirectory ()
   "Create note while prompting for a subdirectory.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]