commit 7ff63e766915358507a11d51019c6678693281a2
parent 7fc517c97793091ee9a9b3ee094998050064aeeb
Author: Alex Balgavy <alex@balgavy.eu>
Date:   Fri, 14 Apr 2023 15:48:08 +0200
emacs: use the dashboard package
Diffstat:
2 files changed, 41 insertions(+), 54 deletions(-)
diff --git a/emacs/config.org b/emacs/config.org
@@ -942,43 +942,47 @@ Hide some messages I don't need.
   (setq inhibit-startup-message t)
 #+end_src
 
-** Start buffer
-#+begin_src emacs-lisp
-  (define-minor-mode za/start-mode
-    "Minor mode for start page: ~/.config/emacs/start.org"
-    :lighter " start"
-    :keymap `((,(kbd "c") . (lambda () (interactive) (find-file (concat user-emacs-directory "config.org"))))
-              (,(kbd "a") . org-agenda)
-              (,(kbd "ii") . gtd-inbox)
-              (,(kbd "im") . gtd-inbox-mobile)
-              (,(kbd "g") . za/start-mode-update)
-              (,(kbd "ss") . za/st)
-              (,(kbd "sk") . za/st-kill)
-              (,(kbd "<tab>") . org-next-link)
-              (,(kbd "S-<tab>") . org-previous-link))
-    :after-hook (za/start-mode-update)
-    (setq-local view-read-only nil)
-    (setq buffer-read-only t))
-
-  (setq initial-buffer-choice (concat user-emacs-directory "start.org"))
-
-  (defun za/start-mode-update ()
-    "Update start dashboard."
-    (interactive)
-    (setq buffer-read-only nil)
-    (org-update-all-dblocks)
-    (setq buffer-read-only t))
-
-  (defun org-dblock-write:gtd-inbox-stats (params)
-    "Get GTD inbox stats for start screen."
-
-    (let ((lines-inbox (za/org-count-headlines-in-file 1 za/org-life-inbox))
-          (lines-mobile (za/org-count-headlines-in-file 1 za/org-life-inbox-mobile))
-          (count-docs (length (directory-files za/org-life-doc-inbox nil (rx bos (not ?.))))))
-      (insert (if (> lines-inbox 0) (format "- [[elisp:(find-file \"%s\")][%s: %s]]\n" za/org-life-inbox "Inbox" lines-inbox) "")
-              (if (> lines-mobile 0) (format "- [[elisp:(find-file \"%s\")][%s: %s]]\n" za/org-life-inbox-mobile "Mobile" lines-mobile) "")
-              (if (> count-docs 0) (format "- [[elisp:(find-file \"%s\")][%s: %s]]" za/org-life-doc-inbox"Scanned" count-docs) ""))))
-
+** Start buffer (dashboard)
+#+begin_src emacs-lisp
+  (use-package dashboard
+    :custom
+    (initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
+    (dashboard-startup-banner 'logo)
+    (dashboard-items '((gtd-inbox-counts . 3)
+                       (recents . 5)
+                       (bookmarks . 5)))
+    :config
+    (dashboard-setup-startup-hook))
+
+  (defun dashboard-insert-gtd-inbox-counts (list-size)
+    (require 'org-roam)
+    (let* ((lines-inbox (za/org-count-headlines-in-file 1 za/org-life-inbox))
+           (lines-mobile (za/org-count-headlines-in-file 1 za/org-life-inbox-mobile))
+           (count-docs (length (directory-files za/org-life-doc-inbox nil (rx bos (not ?.)))))
+           (item-list))
+
+      (when (> lines-inbox 0)
+        (push (list :name "Inbox" :count lines-inbox :file za/org-life-inbox) item-list))
+      (when (> lines-mobile 0)
+        (push (list :name "Mobile" :count lines-mobile :file za/org-life-inbox-mobile) item-list))
+      (when (> count-docs 0)
+        (push (list :name "Scanned" :count count-docs :file za/org-life-doc-inbox) item-list))
+
+      (dashboard-insert-section
+       ;; Widget title
+       "GTD:"
+       ;; list generated for dashboard
+       item-list
+       list-size
+       'gtd
+       "t"
+       ;; decide what to do when clicked ("el" is automatically assigned)
+       `(lambda (&rest _)
+          (message "%s" (find-file (plist-get ',el :file))))
+       ;; show how list is shown in dashboard ("el" is automatically assigned)
+       (format "%s: %s" (plist-get el :name) (plist-get el :count)))))
+
+  (add-to-list 'dashboard-item-generators '(gtd-inbox-counts . dashboard-insert-gtd-inbox-counts))
 #+end_src
 
 ** Pixel scroll mode
diff --git a/emacs/start.org b/emacs/start.org
@@ -1,17 +0,0 @@
-* Welcome to Emacs
-#+BEGIN: gtd-inbox-stats
-
-#+END:
-
-- [c] open config
-- [a] Org agenda
-- [i i] GTD inbox/scans
-- [i m] GTD mobile inbox
-- [g] Update buffer
-- [s s] Start syncthing
-- [s k] Kill syncthing
-
-# Local Variables:
-# eval: (za/start-mode)
-# End:
-#+STARTUP: showall