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

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

[elpa] externals/org-modern 98b52c2849 1/2: Add org-modern-custom-timest


From: ELPA Syncer
Subject: [elpa] externals/org-modern 98b52c2849 1/2: Add org-modern-custom-timestamp-format (#30)
Date: Fri, 22 Apr 2022 05:57:50 -0400 (EDT)

branch: externals/org-modern
commit 98b52c2849efabfc5f3f3a3493d34f9c2a954e32
Author: viz <37809414+vizs@users.noreply.github.com>
Commit: GitHub <noreply@github.com>

    Add org-modern-custom-timestamp-format (#30)
    
    * Add org-modern-custom-timestamp-format
    
    This option is the equivalent of org-mode's
    org-time-stamp-custom-formats.  See #29.
    
    * Split org-modern--timestamp into two functions
    
    * org-modern--timestamp-custom: Prefer add-text-properties
    
    * Fix fallouts from merge
    
    Restore the org-modern-timestamp behaviour before the merge
    
    Co-authored-by: Visuwesh <visuweshm@gmail.com>
---
 org-modern.el | 51 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 47 insertions(+), 4 deletions(-)

diff --git a/org-modern.el b/org-modern.el
index 27be2d1790..4a8df614e8 100644
--- a/org-modern.el
+++ b/org-modern.el
@@ -93,6 +93,17 @@ Set to nil to disable styling the headlines."
 Set to nil to disable styling the time stamps."
   :type 'boolean)
 
+(defcustom org-modern-custom-timestamp-format nil
+  "Format of custom timestamps, or nil for none.
+If non-nil, it should be (DATE . TIME) where DATE is the format
+for date, and TIME is the format for time.  DATE and TIME must be
+surrounded with space.  For the syntax, refer to
+`format-time-string'."
+  :type '(choice
+          (const :tag "Do not use custom timestamp format" nil)
+          (const :tag " YYYY-MM-DD  HH:MM " '(" %Y-%m-%d " . " %H:%M "))
+          (cons :tag "Custom date and time format" string string)))
+
 (defcustom org-modern-table t
   "Prettify tables."
   :type 'boolean)
@@ -333,7 +344,7 @@ You can specify a font `:family'. The font families 
`Iosevka', `Hack' and
            'org-modern-done
          'org-modern-todo)))))
 
-(defun org-modern--timestamp ()
+(defun org-modern--timestamp-default ()
   "Prettify timestamps."
   (let* ((active (eq (char-after (match-beginning 0)) ?<))
          (date-face (if active
@@ -342,6 +353,7 @@ You can specify a font `:family'. The font families 
`Iosevka', `Hack' and
          (time-face (if active
                         'org-modern-time-active
                       'org-modern-time-inactive)))
+    (remove-text-properties (match-beginning 0) (match-end 0) '(display nil))
     (put-text-property
      (match-beginning 0)
      (1+ (match-beginning 0))
@@ -366,6 +378,35 @@ You can specify a font `:family'. The font families 
`Iosevka', `Hack' and
        (match-end 0)
        'face time-face))))
 
+(defun org-modern--timestamp-custom ()
+  "Prettify timestamps per `org-modern-custom-timestamp-format'."
+  (let* ((active (eq (char-after (match-beginning 0)) ?<))
+         (date-face (if active
+                        'org-modern-date-active
+                      'org-modern-date-inactive))
+         (time-face (if active
+                        'org-modern-time-active
+                      'org-modern-time-inactive))
+         (time (save-match-data
+                 (encode-time
+                  (org-fix-decoded-time
+                   (org-parse-time-string
+                    (buffer-substring (match-beginning 0) (match-end 0))))))))
+    (remove-list-of-text-properties (match-beginning 0) (match-end 0) 
'(display))
+    ;; year-month-day
+    (add-text-properties
+     (match-beginning 0)
+     (if (eq (match-beginning 2) (match-end 2)) (match-end 0) (match-end 1))
+     `( face ,date-face
+        display ,(format-time-string (car org-modern-custom-timestamp-format) 
time)))
+    ;; hour:minute
+    (unless (eq (match-beginning 2) (match-end 2))
+      (add-text-properties
+       (match-beginning 2)
+       (match-end 0)
+       `( face ,time-face
+          display ,(format-time-string (cdr 
org-modern-custom-timestamp-format) time))))))
+
 (defun org-modern--star ()
   "Prettify headline stars."
   (let ((level (- (match-end 1) (match-beginning 1))))
@@ -517,9 +558,11 @@ You can specify a font `:family'. The font families 
`Iosevka', `Hack' and
       (when org-modern-tag
         `((,(concat "^\\*+.*?\\( \\)\\(:\\(?:" org-tag-re ":\\)+\\)[ \t]*$")
            (0 (org-modern--tag)))))
-      (when (and org-modern-timestamp (not org-display-custom-times))
-        '(("\\(?:<\\|\\[\\)\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\(?: 
[[:word:]]+\\)?\\(?: [.+-]+[0-9ymwdh/]+\\)*\\)\\(\\(?: [0-9:-]+\\)?\\(?: 
[.+-]+[0-9ymwdh/]+\\)*\\)\\(?:>\\|\\]\\)"
-           (0 (org-modern--timestamp)))
+      (when org-modern-timestamp
+        `(("\\(?:<\\|\\[\\)\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\(?: 
[[:word:]]+\\)?\\(?: [.+-]+[0-9ymwdh/]+\\)*\\)\\(\\(?: [0-9:-]+\\)?\\(?: 
[.+-]+[0-9ymwdh/]+\\)*\\)\\(?:>\\|\\]\\)"
+           (0 ,(if org-modern-custom-timestamp-format
+                   '(org-modern--timestamp-custom)
+                 '(org-modern--timestamp-default))))
           
("<[^>]+>\\(-\\)\\(-\\)<[^>]+>\\|\\[[^]]+\\]\\(?1:-\\)\\(?2:-\\)\\[[^]]+\\]"
            (1 '(face org-modern-label display #("  " 1 2 (face 
(:strike-through t) cursor t))) t)
            (2 '(face org-modern-label display #("  " 0 1 (face 
(:strike-through t)))) t))))



reply via email to

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