aboutsummaryrefslogtreecommitdiff
path: root/modules/dashboard-config.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/dashboard-config.el')
-rw-r--r--modules/dashboard-config.el47
1 files changed, 36 insertions, 11 deletions
diff --git a/modules/dashboard-config.el b/modules/dashboard-config.el
index 3b8a3c5ca..38510e801 100644
--- a/modules/dashboard-config.el
+++ b/modules/dashboard-config.el
@@ -17,6 +17,7 @@
;;; Code:
+(require 'system-lib) ;; cj/exclude-from-global-font-lock
(eval-when-compile (require 'undead-buffers))
(declare-function cj/make-buffer-undead "undead-buffers" (string))
(autoload 'cj/make-buffer-undead "undead-buffers" nil t)
@@ -32,6 +33,11 @@
(defvar dashboard-bookmarks-item-format "%s"
"Format to use when showing the base of the file name.")
+;; `el' is bound dynamically by dashboard's section-insertion machinery, which the
+;; override below plugs into. Declare it so the byte-compiler reads the
+;; references as that special variable rather than a free variable.
+(defvar el)
+
(defun dashboard-insert-bookmarks (list-size)
"Add the list of LIST-SIZE items of bookmarks."
(require 'bookmark)
@@ -85,15 +91,16 @@ Adjust this if the title doesn't appear centered under the banner image.")
(list "m" #'nerd-icons-mdicon "nf-md-music" "Music" "EMMS Music Player" (lambda () (cj/music-playlist-toggle) (cj/music-playlist-load)))
(list "e" #'nerd-icons-faicon "nf-fa-envelope" "Email" "Mu4e Email Client" (lambda () (mu4e)))
(list "i" #'nerd-icons-faicon "nf-fa-comments" "IRC" "Emacs Relay Chat" (lambda () (cj/erc-switch-to-buffer-with-completion)))
- (list "g" #'nerd-icons-faicon "nf-fa-telegram" "Telegram" "Telega Telegram Client" (lambda () (cj/telega)))
+ (list "G" #'nerd-icons-faicon "nf-fa-telegram" "Telegram" "Telega Telegram Client" (lambda () (cj/telega)))
(list "s" #'nerd-icons-faicon "nf-fa-slack" "Slack" "Slack Client" (lambda () (cj/slack-start)))
- (list "l" #'nerd-icons-octicon "nf-oct-issue_tracks" "Linear" "Linear Issue Tracker" (lambda () (pearl-list-issues))))
+ (list "l" #'nerd-icons-octicon "nf-oct-issue_tracks" "Linear" "Linear Issue Tracker" (lambda () (pearl-list-issues)))
+ (list "S" #'nerd-icons-mdicon "nf-md-message" "Signal" "Signal Messenger" (lambda () (cj/signel-message))))
"Dashboard launcher table: (KEY ICON-FN ICON-NAME LABEL TOOLTIP ACTION).
Drives both `dashboard-navigator-buttons' and the dashboard-mode-map keys.")
-(defconst cj/dashboard--row-sizes '(4 4 3 2)
+(defconst cj/dashboard--row-sizes '(4 4 3 3)
"Navigator row lengths. Must sum to the number of `cj/dashboard--launchers'.
-The last row groups Slack and Linear together.")
+The last row groups Slack, Linear, and Signal together.")
(defun cj/dashboard--navigator-button (l)
"Build a `dashboard-navigator-buttons' entry from launcher L."
@@ -134,11 +141,14 @@ doesn't leak into this display when the buffer is taller than the
window."
(interactive)
(if (get-buffer "*dashboard*")
- (progn
- (switch-to-buffer "*dashboard*")
- (cj/kill-all-other-buffers-and-windows))
- (when (fboundp 'dashboard-open)
- (dashboard-open)))
+ (progn
+ (switch-to-buffer "*dashboard*")
+ (cj/kill-all-other-buffers-and-windows))
+ (when (fboundp 'dashboard-open)
+ (dashboard-open)))
+ ;; Refresh so re-showing the dashboard always lands on fresh content.
+ (when (fboundp 'dashboard-refresh-buffer)
+ (dashboard-refresh-buffer))
(goto-char (point-min))
(set-window-start (selected-window) (point-min)))
@@ -152,6 +162,15 @@ system-defaults) are preserved rather than overwritten."
(require 'recentf)
(add-to-list 'recentf-exclude "/emms/history"))
+;; Keep global font-lock out of the dashboard buffer. Dashboard colors its
+;; banner title (`dashboard-banner-logo-title') and section headings
+;; (`dashboard-heading') with the `face' text property; `global-font-lock-mode'
+;; owns `face' and strips manually-applied ones it didn't set, so with font-lock
+;; running the banner and headings fall back to the default face. Excluding
+;; dashboard-mode lets those text-property faces survive. (Item and navigator
+;; colors ride a `dashboard-items-face' overlay, which font-lock leaves alone.)
+(cj/exclude-from-global-font-lock 'dashboard-mode)
+
(use-package dashboard
:demand t
:hook (emacs-startup . cj/dashboard-only)
@@ -199,15 +218,17 @@ system-defaults) are preserved rather than overwritten."
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))) ;; don't display dashboard if opening a file
(setq dashboard-display-icons-p t) ;; display icons on both GUI and terminal
(setq dashboard-icon-type 'nerd-icons) ;; use `nerd-icons' package
+ (setq dashboard-set-file-icons t) ;; per-filetype icons on the list items (nerd-icons colors them by type)
(setq dashboard-center-content t) ;; horizontally center dashboard content
(setq dashboard-bookmarks-show-path nil) ;; don't show paths in bookmarks
(setq dashboard-recentf-show-base t) ;; show filename, not full path
(setq dashboard-recentf-item-format "%s")
(cj/--dashboard-exclude-emms-from-recentf) ;; exclude EMMS history from recent files
- (setq dashboard-set-footer nil) ;; don't show footer and quotes
;; == navigation
- (setq dashboard-set-navigator t)
+ ;; footer and navigator visibility are controlled by `dashboard-startupify-list'
+ ;; above (footer omitted, navigator included); the dashboard-set-* toggles are
+ ;; obsolete as of dashboard 1.9.0.
(setq dashboard-navigator-buttons (cj/dashboard--navigator-rows))
;; == content
@@ -222,6 +243,10 @@ system-defaults) are preserved rather than overwritten."
;; Disable 'q' to quit dashboard
(define-key dashboard-mode-map (kbd "q") nil)
+ ;; 'g' refreshes the dashboard (the dired/magit convention). Telegram moved to
+ ;; 'G' in the launcher table to free it.
+ (define-key dashboard-mode-map (kbd "g") #'dashboard-refresh-buffer)
+
;; Launcher keys, derived from `cj/dashboard--launchers' (same source as the
;; navigator icons, so key order can't drift from the icon-row order).
(cj/dashboard--bind-launchers dashboard-mode-map))