* Emacs Open Work ** PROJECT [#B] Fix Up Dupre Theme Here are some ideas for making dupre-theme a bit more “complete” and future-proof as an Emacs theme. You don’t have to do all of them, of course, but most “modern” themes ship a fair number of these extra faces and integrations. *** Example Sample Faces Below is a small excerpt showing how you might start adding some of the “missing” standard faces and a couple org faces: #+begin_src elisp (custom-theme-set-faces 'dupre ;; … your existing faces … ;; standard global faces `(error ((t (:foreground ,dupre-intense-red :weight bold)))) `(warning ((t (:foreground ,dupre-yellow+1 :weight bold)))) `(success ((t (:foreground ,dupre-green+1 :weight bold)))) `(link ((t (:foreground ,dupre-blue+1 :underline t)))) `(shadow ((t (:foreground ,dupre-gray)))) `(highlight ((t (:background ,dupre-bg+1)))) `(tooltip ((t (:foreground ,dupre-fg :background ,dupre-bg+2)))) `(tooltip-selection ((t (:background ,dupre-bg+0)))) ;; Org-mode sample `(org-document-title ((t (:foreground ,dupre-yellow+2 :weight bold :height 1.2)))) `(org-level-1 ((t (:foreground ,dupre-blue+2 :weight bold)))) `(org-level-2 ((t (:foreground ,dupre-green+1)))) `(org-checkbox ((t (:foreground ,dupre-yellow :weight bold)))) `(org-todo ((t (:foreground ,dupre-red :weight bold)))) `(org-done ((t (:foreground ,dupre-green+2 :weight bold)))) ) #+end_src *** TODO [#A] Fill out the “standard” Emacs faces • error / warning / success • link / link-visited / shadow • highlight / secondary-selection • tooltip / tooltip-selection / tooltip-tip • underline / strike-through • match / search / lazy-highlight (you already have some isearch) • info-title-1…info-title-5, info-header-node, help-*-face *** TODO [#C] Support the built-in “tab-bar” and “tab-group” faces (Emacs 27+) • tab-bar / tab-bar-tab / tab-bar-tab-inactive • tab-bar-close / tab-bar-separator • tab-group-title / tab-group-separator *** TODO [#C] Add faces for =dired=, =diff=, =flycheck=/=flymake=, =magit= (or git-gutter), =ediff=, =erc= etc. For example: • diff-added, diff-removed, diff-context, diff-file-header • flycheck-error, flycheck-warning, flycheck-info • magit-section, magit-log, magit-hunk-heading, magit-branch, etc. *** TODO [#C] Org-mode • org-level-1…org-level-8, org-document-title • org-checkbox, org-code, org-date, org-todo, org-done, org-warning • org-block, org-block-begin-line, org-block-end-line *** TODO [#C] Completion frameworks & minibuffer enhancements • ivy-current-match / ivy-minibuffer-match-face-1…4 • swiper-line-face • vertico-current / marginalia-… • corfu-default / corfu-bar / cape / orderless-match-face-… *** TODO [#C] LSP / tree-sitter / syntax-aware faces • lsp-face-highlight-textual, lsp-face-highlight-read, etc. • tree-sitter-hl-face:variable, :function, :property, etc. *** TODO [#C] Which-Key, Hydras, rainbow-delimiters, etc. • which-key-key-face, which-key-local-map-description-face • hydra-face-red / teal / blue • rainbow-delimiters-depth-1…9 *** TODO [#B] Make sure you define a “minimum package” set of faces so that folks don’t see glaring unstyled text in any part of Emacs, even if they never install extra packages. *** TODO [#B] Improve terminal support: • Detect true-color (=(display-graphic-p)=) vs 256-color vs 16-color and fall-back gracefully. • Provide “256-color” approximations (you already do this), but you might want a simpler palette for legacy terminals. *** TODO [#C] Theme Metadata & Packaging • Add =;; Package-Requires: ((emacs "26.1"))= if you need a minimum. • Consider adding a README with screenshots. • A simple Makefile or script to refresh “theme metadata” (=M-x theme-inspect=, MELPA recipe). *** TODO [#C] Tests • Extend your ERT suite to cover more faces (org, diff, flycheck…). • You might write a small helper that loops over a list of faces and asserts they’re defined without errors. *** TODO [#A] Cosmetic / code-style notes • Factor out a helper macro to reduce repetition: #+begin_src elisp (defmacro dupre-face (face &rest specs) `(,face ((t ,specs)))) #+end_src • Use =custom-theme-set-faces= only once; wrap your =when (>= emacs-major-version…)= inside it rather than nesting top-level. • Move your ERT tests into a separate file like =dupre-theme-test.el= so that the main theme file stays lean. *** TODO [#B] Other Packages The rest is just more of the same—pick the most common modes/packages you and your users rely on and give them a quick coat of paint. Once you’ve rounded out those faces you’ll have hit what most people expect from a “complete” modern Emacs theme. Based on a quick skim of your modules/ directory (and the packages they pull in via use-package), here’s a non-exhaustive list of the major packages you’re using—along with the faces you should think about adding to dupre-theme so that nothing ends up looking “unstyled.” 1. completion/mini-frameworks • vertico (vertico-current, vertico-group-title, vertico-separator, vertico-doc) • orderless (orderless-match-face-0…3) • consult (consult-preview-line, consult-narrow, consult-region, consult-file) • marginalia (marginalia-annotation, marginalia-document, marginalia-cache) • embark (embark-general, embark-heading, embark-target, embark-helpful) • corfu + cape (corfu-default, corfu-current, corfu-bar, cape-file, cape-keyword etc.) • company (company-tooltip, company-tooltip-selection, company-scrollbar­-thumb) 2. ivy/counsel/swiper (if you ever load them side-by-side) • ivy-current-match, ivy-minibuffer-match-face-1…4 • counsel-outline, swiper-match-face-1… 3. syntax checkers & LSP • flycheck (flycheck-error, flycheck-warning, flycheck-info) • eglot or lsp-mode (lsp-face-highlight-textual, lsp-face-highlight-read, lsp-face-semantic-type-…) • tree-sitter (tree-sitter-hl-face:function, :variable, :property, …) 4. git & diffs • magit (magit-section, magit-section-title, magit-hunk-heading, magit-branch, magit-log) • diff-hl / git-gutter (diff-hl-face-insert, diff-hl-face-delete, git-gutter:added, git-gutter:deleted) • diff-mode (diff-added, diff-removed, diff-context, diff-file-header) 5. project management & navigation • projectile (projectile-project-name, projectile-project-root) • treemacs (treemacs-root-face, treemacs-directory-face, treemacs-file-face) 6. Org-mode • org-document-title, org-level-1…org-level-8 • org-checkbox, org-todo, org-done, org-warning, org-date, org-code, org-block • plus any “pretty” add-ons you use (org-bullets, org-modern, etc.) 7. Hydra / which-key / key-help • which-key (which-key-key-face, which-key-group-description-face, which-key-local-map-description-face) • hydra (hydra-face-red, hydra-face-blue, hydra-face-teal, hydra-face-amaranth) 8. visual helpers • rainbow-delimiters-depth-1…9 • highlight-indent-guides-odd/even • highlight-parentheses-/ • beacon (beacon), whitespace (whitespace-space, whitespace-tab, whitespace-newline) • display-line-numbers (line-number, line-number-current-line—you already have these) 9. UI polishers • all-the-icons (all-the-icons-blue, all-the-icons-red, …) on modeline or treemacs • doom-modeline (doom-modeline-bar, doom-modeline-buffer-path) • fancy-splash/dashboard-faces if you use a startup screen 10. terminals & shells • vterm (vterm-copy-region-highlight) • ansi-colors (ansi-color-face-bold, ansi-color-face-italic, ansi-color-[0…7]) To figure out exactly which ones you have in your modules, you can do for example: #+begin_src elisp ;; from your ~/.emacs.d (let (pkgs) (dolist (f (directory-files "~/.emacs.d/modules" t "\\.el$")) (with-temp-buffer (insert-file-contents f) (goto-char (point-min)) (while (re-search-forward "use-package +\\([^ ]+\\)" nil t) (push (intern (match-string 1)) pkgs)))) (delete-dups pkgs)) #+end_src Then for each of those packages, grep in their repo for =defface= or check their manual to see which faces they define, and add reasonable dupre-colours for them. Once you’ve covered that list, you’ll have a “complete” theme that won’t leave any of your modules half-unstyled. ** PROJECT [#A] Reconfigure ai-config.el *** DONE Rewire commands to use base keybinding of C-c g, which is currently unused. CLOSED: [2025-08-13 Wed 16:45] *** DONE Toggle gptel's side window with C-c g t CLOSED: [2025-08-13 Wed 16:45] *** DONE Erase the Chatgpt Buffer Altogether With C-c g e CLOSED: [2025-08-13 Wed 16:45] *** DONE AI Assistant's Answers Should Be Underneath a Labeled Org Heading CLOSED: [2025-08-13 Wed 16:46] **** The time should also be a component of the org heading **** Reference modified from: https://github.com/gregoryg/emacs-gregoryg?tab=readme-ov-file#return-gptel-backend--model (defun cj/gptel-backend-and-model () "Return gptel backend and model (if any)." (let ((backend (if (boundp 'gptel-backend) (aref gptel-backend 1))) (model (if (boundp 'gptel-model) gptel-model))) (format "(%s %s)" backend model))) (defun cj/gptel-insert-model-in-non-gptel-buffers () "This function will add the backend and model in the \"dynamic\" buffers, not in dedicated chat buffers. To be used in `gptel-pre-response-hook'." (unless (member 'gptel-mode local-minor-modes) (goto-char (point-max)) (insert (format "\n%s: " (cj/gptel-backend-and-model))) (goto-char (point-max)))) (add-hook 'gptel-pre-response-hook 'cj/gptel-insert-model-in-non-gptel-buffers) (defun cj/gptel-insert-model-in-chat-buffers (response-begin-pos response-end-pos) "This function adds the backend and model in dedicated chat buffers. Can be used with the `gptel-post-response-functions' hook." (let* ((gptel-org-prefix (alist-get 'org-mode gptel-prompt-prefix-alist)) (inserted-string (format "%s %s\n" (substring gptel-org-prefix 0 (string-match " " gptel-org-prefix)) (cj/gptel-backend-and-model))) (len-inserted (length inserted-string ))) (goto-char response-begin-pos) (insert inserted-string) (goto-char (+ response-end-pos len-inserted)))) (add-hook 'gptel-post-response-functions 'cj/gptel-insert-model-in-chat-buffers) *** TODO Use C-c g to copy the current selection into the ChatGPT buffer, starting one if one doesn't exist *** TODO Change the Prompt: C-c g p *** TODO Change the Directive: C-c g d *** TODO Default should be coding ** PROJECT [#A] Work on mu4e email *** TODO [#A] mu4e contacts not expanding on forwarding emails *** TODO [#A] Fix org-contacts functionality *** TODO [#A] Add org-msg https://github.com/jeremy-compostella/org-msg ** PROJECT [#B] Org Agenda Work *** TODO [#B] Add Past Due to F8 Agenda Summary in Emacs *** TODO [#B] Separate B and C in F8 Agenda Summary in Emacs ** PROJECT [#B] Org Roam and Org Template Fixes *** TODO [#B] Fix Emacs Org Roam Recipe Error C-c n i then type a recipe name. org-element--get-category: Invalid function: org-element-with-disabled-cache The file was created, but does not come to the front The category value seems unaligned *** TODO [#A] Add Org Templates Back to Emacs Repository! *** TODO [#B] Add Org Capture Template for Vocabulary Words ** TODO [#B] Dirvish should open not showing hidden files by default *** 2025-06-07 Sat @ 12:25:28 -0500 It isn't omitting the h switch on directory listings No. Didn't help ** TODO [#B] Fix Emacs Alarms for Scheduled Events *** 2025-06-03 Tue @ 15:12:51 -0500 Problem Emacs Alarm seems to sound off periodically after the alarm rang the first time. It should ring once at the beginning of the event, and that's it. *** 2025-06-28 Sat @ 12:42:19 -0500 User's Method for Alarms In Emacs This is more than I actually want, but leaving here for reference. #+BEGIN_QUOTE I am quite happy with the system I use, which does (I think) exactly what you want. It has two parts: an Emacs part that uses appt.el to schedule the reminders and a small shell program (I'm using Linux) that creates the popup + sound notification. Here I share the code for both parts. A) Code in ~/.emacs.d/init.el (require 'appt) (appt-activate t) (setq appt-message-warning-time 5) ; Show notification 5 minutes before event (setq appt-display-interval appt-message-warning-time) ; Disable multiple reminders (setq appt-display-mode-line nil) ; Use appointment data from org-mode (defun my-org-agenda-to-appt () (interactive) (setq appt-time-msg-list nil) (org-agenda-to-appt)) ; Update alarms when... ; (1) ... Starting Emacs (my-org-agenda-to-appt) ; (2) ... Everyday at 12:05am (useful in case you keep Emacs always on) (run-at-time "12:05am" (* 24 3600) 'my-org-agenda-to-appt) ; (3) ... When TODO.txt is saved (add-hook 'after-save-hook '(lambda () (if (string= (buffer-file-name) (concat (getenv "HOME") "/ideas/TODO.txt")) (my-org-agenda-to-appt)))) ; Display appointments as a window manager notification (setq appt-disp-window-function 'my-appt-display) (setq appt-delete-window-function (lambda () t)) (setq my-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification")) (defun my-appt-display (min-to-app new-time msg) (if (atom min-to-app) (start-process "my-appt-notification-app" nil my-appt-notification-app min-to-app msg) (dolist (i (number-sequence 0 (1- (length min-to-app)))) (start-process "my-appt-notification-app" nil my-appt-notification-app (nth i min-to-app) (nth i msg))))) B) Code in ~/bin/appt-notification #!/bin/sh TIME="$1" MSG="$2" notify-send -t 0 "
Appointment in $TIME minutes:
$MSG
" play "~/bin/alarm.wav" To get voice notifications you could replace the last line (play) with the following: espeak "Appointment in $TIME minutes: $MSG" #+END_QUOTE [[https://emacs.stackexchange.com/questions/3844/good-methods-for-setting-up-alarms-audio-visual-triggered-by-org-mode-events][Good methods for setting up alarms (audio + visual) triggered by org-mode events? - Emacs Stack Exchange]] Captured On: [2025-06-19 Thu 12:29] ** TODO [#C] Revisit and refactor localrepo functionality ** TODO [#C] Check and test native comp logging changes ** TODO [#C] Emacs: Should adding tasks add it to Projects and Tasks in the inbox file? ** TODO [#C] Fix exporting documents to HTML. This appears to work with emacs -q. What's up with your config? ** TODO [#C] Rename 'sync-dir' Variable in Init File to 'org-dir' [[https://github.com/ryuslash/mode-icons][ryuslash/mode-icons: Show icons instead of mode names]] Captured On: [2025-06-07 Sat 13:29] ** TODO [#D] Install ZOxide Integration into Emacs [[https://gitlab.com/Vonfry/zoxide.el][Vonfry / zoxide.el · GitLab]] Captured On: [2025-06-07 Sat 17:11] ** TODO [#D] manateelazycat/awesome-tray: Hide mode-line, display necessary information at right of minibuffer. [[https://github.com/manateelazycat/awesome-tray][manateelazycat/awesome-tray: Hide mode-line, display necessary information at right of minibuffer.]] Captured On: [2025-06-07 Sat 13:29] ** TODO [#D] ryuslash/mode-icons: Show icons instead of mode names ** TODO [#D] Emacs Signal Client *** TODO investigate: net/signel.org · master · undefined · GitLab [[https://gitlab.com/jaor/elibs/-/blob/master/net/signel.org][net/signel.org · master · undefined · GitLab]] Captured On: [2025-05-29 Thu 04:24] *** TODO investigate: signel, a barebones signal chat on top of signal-cli [[https://jao.io/blog/signel.html][signel, a barebones signal chat on top of signal-cli]] Captured On: [2025-05-29 Thu 04:23] * Emacs Project Ideas/References ** emacs-tw/awesome-elisp: 🏵️ A curated list of Emacs Lisp development resources [[https://github.com/emacs-tw/awesome-elisp][emacs-tw/awesome-elisp: 🏵️ A curated list of Emacs Lisp development resources]] Captured On: [2025-06-07 Sat 13:42] ** emacs-tw/awesome-emacs: A community driven list of useful Emacs packages, libraries and other items. [[https://github.com/emacs-tw/awesome-emacs#layout][emacs-tw/awesome-emacs: A community driven list of useful Emacs packages, libraries and other items.]] Captured On: [2025-06-07 Sat 13:30] ** bastibe/org-static-blog: A static site generator using org-mode [[https://github.com/bastibe/org-static-blog][bastibe/org-static-blog: A static site generator using org-mode]] Captured On: [2025-05-29 Thu 04:32] ** an emacs packages hat trick [[https://jao.io/blog/emacs-packages-hat-trick.html][an emacs packages hat trick]] Captured On: [2025-05-29 Thu 04:28] ** a high signal to noise emacs command: buffer-same-mode [[https://jao.io/blog/high-signal-to-noise-emacs-command.html][a high signal to noise emacs command]] Captured On: [2025-05-29 Thu 04:33] ** How I batch apply and save one-liners [[https://xenodium.com/how-i-batch-apply-and-save-one-liners][How I batch apply and save one-liners]] Captured On: [2025-08-01 Fri 03:11] ** Better org-mode Agenda display-buffer-alist Settings • Christian Tietze [[https://christiantietze.de/posts/2022/12/updated-org-mode-agenda-display-buffer-alist/][Better org-mode Agenda display-buffer-alist Settings • Christian Tietze]] Captured On: [2025-08-01 Fri 03:21] ** GitHub - xenodium/dwim-shell-command: Save your shell commands/scripts and apply from Emacs with ease. [[https://github.com/xenodium/dwim-shell-command][GitHub - xenodium/dwim-shell-command: Save your shell commands/scripts and apply from Emacs with ease.]] Captured On: [2025-08-01 Fri 03:10] ** GitHub - hyakt/emacs-dashboard-hackernews: Display a topstories of Hacker News on Dashboard. [[https://github.com/hyakt/emacs-dashboard-hackernews][GitHub - hyakt/emacs-dashboard-hackernews: Display a topstories of Hacker News on Dashboard.]] Captured On: [2025-08-01 Fri 02:47] ** org mode - org-link to the exact page-position in a pdf file - Emacs Stack Exchange [[https://emacs.stackexchange.com/questions/68013/org-link-to-the-exact-page-position-in-a-pdf-file][org mode - org-link to the exact page-position in a pdf file - Emacs Stack Exchange]] Captured On: [2025-07-11 Fri 18:17]