feat(emacs): more niceties

This commit is contained in:
Ray Andrew 2025-12-26 03:26:50 -06:00
parent 48e1c41198
commit d1d3f31634
Signed by: rayandrew
SSH key fingerprint: SHA256:XYrYrxF0Z3A72n8P/p6mqPRNQZT22F88XcLsG+kX4xw

View file

@ -720,29 +720,29 @@ frame if FRAME is nil, and to 1 if AMT is nil."
(setq org-agenda-custom-commands (setq org-agenda-custom-commands
'(("n" "Dashboard" '(("n" "Dashboard"
((tags-todo "+DEADLINE<\"<today>\"" ((tags-todo "+DEADLINE<\"<today>\""
((org-agenda-overriding-header "Overdue!"))) ((org-agenda-overriding-header "Overdue!")))
(agenda "" ((org-agenda-span 'day) (agenda "" ((org-agenda-span 'day)
(org-deadline-warning-days 7) (org-deadline-warning-days 7)
(org-agenda-time-grid nil) (org-agenda-time-grid nil)
(org-agenda-overriding-header "Today"))) (org-agenda-overriding-header "📅 Today")))
(todo "STARTED" (todo "STARTED"
((org-agenda-overriding-header "In Progress"))) ((org-agenda-overriding-header "🔨 In Progress")))
(todo "WAITING" (todo "WAITING"
((org-agenda-overriding-header "Waiting"))) ((org-agenda-overriding-header "Waiting")))
(tags-todo "+DEADLINE>=\"<today>\"+DEADLINE<=\"<+7d>\"" (tags-todo "+DEADLINE>=\"<today>\"+DEADLINE<=\"<+7d>\""
((org-agenda-overriding-header "Due This Week"))) ((org-agenda-overriding-header "📆 Due This Week")))
(tags-todo "inbox" (tags-todo "inbox"
((org-agenda-overriding-header "Inbox"))) ((org-agenda-overriding-header "📥 Inbox")))
(agenda "" ((org-agenda-span 7) (agenda "" ((org-agenda-span 7)
(org-agenda-start-day "+1d") (org-agenda-start-day "+1d")
(org-agenda-start-on-weekday nil) (org-agenda-start-on-weekday nil)
(org-agenda-show-all-dates t) (org-agenda-show-all-dates t)
(org-agenda-time-grid nil) (org-agenda-time-grid nil)
(org-agenda-overriding-header "Next 7 Days"))) (org-agenda-overriding-header "📅 Next 7 Days")))
(alltodo "" (alltodo ""
((org-agenda-skip-function ((org-agenda-skip-function
'(org-agenda-skip-entry-if 'scheduled 'deadline 'todo '("STARTED" "WAITING"))) '(org-agenda-skip-entry-if 'scheduled 'deadline 'todo '("STARTED" "WAITING")))
(org-agenda-overriding-header "Backlog"))))) (org-agenda-overriding-header "📋 Backlog")))))
("w" "Week View" ("w" "Week View"
((agenda "" ((org-agenda-span 'week) ((agenda "" ((org-agenda-span 'week)
(org-deadline-warning-days 14))))) (org-deadline-warning-days 14)))))
@ -811,11 +811,15 @@ frame if FRAME is nil, and to 1 if AMT is nil."
(lambda () (lambda ()
(local-set-key (kbd "C-c C-s") 'mu4e-compose-sign-message))) (local-set-key (kbd "C-c C-s") 'mu4e-compose-sign-message)))
;; Keybindings: r for reply, R for reply-all ;; Keybindings: r for reply, R for reply-all (use hooks to override defaults)
(define-key mu4e-headers-mode-map (kbd "r") 'mu4e-compose-reply) (add-hook 'mu4e-headers-mode-hook
(define-key mu4e-headers-mode-map (kbd "R") 'mu4e-compose-wide-reply) (lambda ()
(define-key mu4e-view-mode-map (kbd "r") 'mu4e-compose-reply) (local-set-key (kbd "r") 'mu4e-compose-reply)
(define-key mu4e-view-mode-map (kbd "R") 'mu4e-compose-wide-reply) (local-set-key (kbd "R") 'mu4e-compose-wide-reply)))
(add-hook 'mu4e-view-mode-hook
(lambda ()
(local-set-key (kbd "r") 'mu4e-compose-reply)
(local-set-key (kbd "R") 'mu4e-compose-wide-reply)))
;; Keybinding: e for refile (archive) ;; Keybinding: e for refile (archive)
(define-key mu4e-headers-mode-map (kbd "e") 'mu4e-headers-mark-for-refile) (define-key mu4e-headers-mode-map (kbd "e") 'mu4e-headers-mark-for-refile)
@ -824,6 +828,45 @@ frame if FRAME is nil, and to 1 if AMT is nil."
;; t to mark (u to unmark is default) ;; t to mark (u to unmark is default)
(define-key mu4e-headers-mode-map (kbd "t") 'mu4e-headers-mark-for-something) (define-key mu4e-headers-mode-map (kbd "t") 'mu4e-headers-mark-for-something)
;; T to mark all messages (like neomutt T.)
(defun mu4e-headers-mark-all-for-something ()
"Mark all messages in current view for an action (prompts once)."
(interactive)
(let* ((mark (mu4e-read-option "Mark all as: "
'(("Read" . read)
("Unread" . unread)
("Trash" . trash)
("Delete" . delete)
("Archive" . refile)
("Move" . move)
("Flag" . flag)
("uNflag" . unflag))))
;; For move, prompt for target folder once
(target (when (eq mark 'move)
(mu4e-ask-maildir "Move all to: ")))
(count 0))
(save-excursion
(goto-char (point-min))
;; Find first message
(while (and (not (eobp))
(not (get-text-property (point) 'msg)))
(forward-line 1))
;; Iterate through all messages
(while (not (eobp))
(when (get-text-property (point) 'msg)
(cond
((eq mark 'move)
(mu4e-mark-at-point 'move target))
((eq mark 'refile)
(mu4e-mark-at-point 'refile (mu4e--mark-get-refile-target
(mu4e-message-at-point))))
(t
(mu4e-mark-at-point mark nil)))
(setq count (1+ count)))
(forward-line 1)))
(message "Marked %d messages for %s" count mark)))
(define-key mu4e-headers-mode-map (kbd "T") 'mu4e-headers-mark-all-for-something)
;; Use completing-read (works with vertico) ;; Use completing-read (works with vertico)
(setq mu4e-completing-read-function 'completing-read) (setq mu4e-completing-read-function 'completing-read)
@ -851,7 +894,7 @@ frame if FRAME is nil, and to 1 if AMT is nil."
(mu4e-drafts-folder . "/personal/[Gmail]/Drafts") (mu4e-drafts-folder . "/personal/[Gmail]/Drafts")
(mu4e-sent-folder . "/personal/[Gmail]/Sent Mail") (mu4e-sent-folder . "/personal/[Gmail]/Sent Mail")
(mu4e-trash-folder . "/personal/[Gmail]/Trash") (mu4e-trash-folder . "/personal/[Gmail]/Trash")
(mu4e-refile-folder . "/personal/[Gmail]/All Mail") (mu4e-refile-folder . "/personal/Archive")
(message-sendmail-extra-arguments . ("--read-envelope-from" "-a" "personal")))))) (message-sendmail-extra-arguments . ("--read-envelope-from" "-a" "personal"))))))
;; Set default context ;; Set default context