summaryrefslogtreecommitdiff
path: root/todo.org
blob: 412a539a05caa98e9afee4519dc36a3f4c0e47e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
* 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 "<br>Appointment in $TIME minutes:<br>$MSG<br>"
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]