otherwise we'd return the string "nil", which with the substring-ing that was happening would end up as "Inbox: i" in the status bar Change-Id: I567a6042b592dd9313bfa22d480c22936494a8c1
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
| ;;; -*- lexical-binding: t; -*-
 | |
| 
 | |
| (require 'org)
 | |
| (require 'org-agenda)
 | |
| (require 'inflections)
 | |
| 
 | |
| (defun grfn/org-agenda-entry->element (agenda-entry)
 | |
|   ;; ???
 | |
|   ())
 | |
| 
 | |
| (defun org-elements-agenda-match (match &optional todo-only)
 | |
|   (setq match
 | |
|         (propertize match 'inherited t))
 | |
|   (with-temp-buffer
 | |
|     (let ((inhibit-redisplay (not debug-on-error))
 | |
|           (org-agenda-sticky nil)
 | |
|           (org-agenda-buffer-tmp-name (buffer-name))
 | |
|           (org-agenda-buffer-name (buffer-name))
 | |
|           (org-agenda-buffer (current-buffer))
 | |
|           (matcher (org-make-tags-matcher match))
 | |
|           result)
 | |
|       (org-agenda-prepare (concat "TAGS " match))
 | |
|       (setq match (car matcher)
 | |
|             matcher (cdr matcher))
 | |
|       (dolist (file (org-agenda-files nil 'ifmode)
 | |
|                     result)
 | |
|         (catch 'nextfile
 | |
|           (org-check-agenda-file file)
 | |
|           (when-let ((buffer (if (file-exists-p file)
 | |
|                                  (org-get-agenda-file-buffer file)
 | |
|                                (error "No such file %s" file))))
 | |
|             (with-current-buffer buffer
 | |
|               (unless (derived-mode-p 'org-mode)
 | |
|                 (error "Agenda file %s is not in Org mode" file))
 | |
|               (save-excursion
 | |
|                 (save-restriction
 | |
|                   (if (eq buffer org-agenda-restrict)
 | |
|                       (narrow-to-region org-agenda-restrict-begin
 | |
|                                         org-agenda-restrict-end)
 | |
|                     (widen))
 | |
|                   (setq result
 | |
|                         (append result (org-scan-tags
 | |
|                                         'agenda
 | |
|                                         matcher
 | |
|                                         todo-only))))))))))))
 | |
| 
 | |
| (defun grfn/num-inbox-items ()
 | |
|   (length (org-elements-agenda-match "inbox" t)))
 | |
| 
 | |
| (defun grfn/num-inbox-items-message ()
 | |
|   (let ((n (grfn/num-inbox-items)))
 | |
|     (if (zerop n) ""
 | |
|       (format "%d %s"
 | |
|               n
 | |
|               (if (= 1 n) "item" "items")))))
 | |
| 
 | |
| (defmacro grfn/at-org-clocked-in-item (&rest body)
 | |
|   `(when (org-clocking-p)
 | |
|      (let ((m org-clock-marker))
 | |
|        (with-current-buffer (marker-buffer m)
 | |
|          (save-mark-and-excursion
 | |
|            (goto-char m)
 | |
|            (org-back-to-heading t)
 | |
|            ,@body)))))
 | |
| 
 | |
| (defun grfn/org-element-clocked-in-task ()
 | |
|   (grfn/at-org-clocked-in-item
 | |
|    (org-element-at-point)))
 | |
| 
 | |
| (comment
 | |
|  (grfn/org-element-clocked-in-task)
 | |
|  (org-element-property :title (grfn/org-element-clocked-in-task))
 | |
|  )
 | |
| 
 | |
| (defun grfn/minutes->hours:minutes (minutes)
 | |
|   (format "%d:%02d"
 | |
|           (floor (/ minutes 60))
 | |
|           (mod minutes 60)))
 | |
| 
 | |
| (comment
 | |
|  (grfn/minutes->hours:minutes 1)        ; => "0:01"
 | |
|  (grfn/minutes->hours:minutes 15)       ; => "0:15"
 | |
|  (grfn/minutes->hours:minutes 130)      ; => "2:10"
 | |
|  )
 | |
| 
 | |
| (defun grfn/org-current-clocked-in-task-message ()
 | |
|   (if (org-clocking-p)
 | |
|       (format "(%s) [%s]"
 | |
|               (->> (grfn/org-element-clocked-in-task)
 | |
|                    (org-element-property :title)
 | |
|                    (car)
 | |
|                    (substring-no-properties)
 | |
|                    (s-trim))
 | |
|               (grfn/minutes->hours:minutes
 | |
|                (org-clock-get-clocked-time)))
 | |
|     ""))
 | |
| 
 | |
| (comment
 | |
|  (grfn/org-current-clocked-in-task-message)
 | |
|  )
 |