summaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org426
1 files changed, 404 insertions, 22 deletions
diff --git a/todo.org b/todo.org
index bb86391d..4e0763b2 100644
--- a/todo.org
+++ b/todo.org
@@ -1,4 +1,375 @@
* Emacs Open Work
+** TODO [#B] Get Tufte.css working
+Below is one way to get Org-mode’s HTML exporter to play nicely with Tufte-CSS. The basic recipe is:
+
+ 1. Inject Tufte’s stylesheet into every HTML export
+ 2. Teach Org to emit the little “margin-toggle” + “sidenote” markup that tufte.css expects for footnotes
+ 3. (Optionally) wrap images in <figure> so you get tufte-style captions out of the box
+
+Along the way you’ll see where Org’s default HTML‐classes line up with tufte.css and where you have to override them.
+
+— 1 Inject tufte.css into your exports
+Put tufte.css somewhere your exported HTML can see it (for example
+~/.emacs.d/assets/tufte.css or a URL on your webserver). Then in your init.el:
+
+ (with-eval-after-load 'ox-html
+ ;; 1a) tell Org to link in your tufte.css
+ (setq org-html-head-extra
+ "<link rel=\"stylesheet\" href=\"/assets/tufte.css\" type=\"text/css\"/>")
+ ;; 1b) enable HTML5 “fancy” output (so you get <figure> around images)
+ (setq org-html-html5-fancy t
+ org-html-inline-images t))
+
+— 2 Turn Org footnotes into Tufte sidenotes
+By default Org emits
+ <sup class=…><a href="#fn:1" id="fnref:1">[1]</a></sup>
+ …and then a big =<div id="footnotes">= at the bottom.
+
+Tufte-CSS wants each footnote inline, wrapped in
+ <label class="margin-toggle">⊕</label>
+ <input type="checkbox" class="margin-toggle"/>
+ <span class="sidenote">…your note…</span>
+
+We can override two Org variables:
+
+ (with-eval-after-load 'ox-html
+ ;; format of each inline footnote reference
+ (setq org-html-footnote-format
+ (concat
+ "<label for=\"%1$s\" class=\"margin-toggle\">"
+ "&#8853;</label>"
+ "<input type=\"checkbox\" id=\"%1$s\" class=\"margin-toggle\"/>"
+ "<span class=\"sidenote\">%2$s</span>"))
+ ;; drop Org’s default footnote list at the end
+ (setq org-html-footnote-separator ""))
+
+Once you do that, exporting an Org file with footnotes will generate the markup tufte.css needs to float them in the margin.
+
+— 3 (Optionally) get <figure> + <figcaption> around images
+If you set =org-html-html5-fancy= to t (see step 1) Org will automatically emit:
+
+ <figure>
+ <img src="…"/>
+ <figcaption>Your caption</figcaption>
+ </figure>
+
+and tufte.css already has rules for =<figure class="figure">= etc.
+
+— 4 Common pitfalls
+ • Make sure your href in =org-html-head-extra= actually points to the css that the browser can load (absolute vs. relative).
+ • If you still see a “Footnotes” section at the bottom, double-check that =org-html-footnote-separator= is set to the empty string and that your init-file got re-evaluated.
+ • On Windows or if you’re testing locally, run e.g. =python3 -m http.server= inside your export folder so your browser can fetch the CSS.
+
+— 5 Unit test for your footnote hack
+Drop this in =~/.emacs.d/tests/test-org-tufte.el= and run =M-x ert RET t RET=:
+
+ (require 'ert)
+ ;; load your config; adjust the path if necessary
+ (load-file "~/.emacs.d/init.el")
+
+ (ert-deftest org-tufte-footnote-format-test ()
+ "Ensure each footnote reference becomes a margin-toggle + sidenote."
+ (let/ ((id "fn:42")
+ (content "My note.")
+ (html (format org-html-footnote-format id content)))
+ (should (string-match-p "class=\"margin-toggle\"" html))
+ (should (string-match-p "<span class=\"sidenote\">My note\\.</span>" html))
+ ;; it must not accidentally reintroduce Org’s bottom-of-page footnote div
+ (should-not (string-match-p "div id=\"footnotes\"" html))))
+
+Once that test passes, you know your footnotes are being rewritten into Tufte-style side notes. From there, you can sprinkle in additional filters (e.g. wrap =<blockquote>= in a =.sidenote= class, override list/p table styles, etc.) or just let the rest of tufte.css style Org’s default tags (h1, p, ul, table, code, etc.).
+
+Enjoy your beautifully-typeset Org → HTML exports in true Tufte style!
+
+** PROJECT [#B] Fix 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.
+*** 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 [#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 [#A] Fix launch problem with dupre
+**** cj [2025-08-16 23:45:50]
+[[file:.emacs.d/themes/dupre-theme.el::;;; dupre-theme.el --- A dark and elegant theme for Emacs -*- lexical-binding: t -*-][dupre-theme.el]]
+
+I have an issue launching "emacsclient -c -a ''" with this theme. With the built-in wombat theme, emacsclient launches fine. When I specify this theme to load during launch, emacsclient does not launch.
+
+Here is what I see in the terminal when launching:
+
+[25-08-16 23:44:44] cjennings velox:~ [1]
+% emacsclient -c -a ''
+emacsclient: can't find socket; have you started the server?
+emacsclient: To start the server in Emacs, type "M-x server-start".
+
+#+begin_src shell
+Warning: due to a long standing Gtk+ bug
+https://gitlab.gnome.org/GNOME/gtk/issues/221
+Emacs might crash when run in daemon mode and the X11 connection is unexpectedly lost.
+Using an Emacs configured with --with-x-toolkit=lucid does not have this problem.
+.emacs.d/elpa/hydra-0.15.0/hydra.el: Warning: ‘defadvice’ is an obsolete macro (as of 30.1); use ‘advice-add’ or ‘define-advice’
+Loading delsel (native compiled elisp)...
+Loading delsel (native compiled elisp)...done
+[yas] Prepared just-in-time loading of snippets successfully.
+Starting new Ispell process aspell with en_US dictionary... \
+Starting new Ispell process aspell with en_US dictionary...done
+Starting Emacs daemon.
+Emacs daemon should have started, trying to connect again
+Waiting for Emacs...
+[25-08-16 23:44:56] cjennings velox:~
+% sudo killall emacs
+#+end_src
+
+Is there something about how this theme is written that may be causing this? If it's unlikely, how would you recommend I diagnose this problem?
+
+
+
+**** ChatGPT: o4-mini [2025-08-16 23:51:03]
+It turns out that nothing mystical is happening in your =dupre-theme.el= that would prevent the Emacs server from creating its socket. When =emacsclient= says:
+
+ emacsclient: can't find socket; have you started the server?
+
+it really does mean “there is no running Emacs –daemon laying down =<…>/server/= for me to talk to.” By itself, loading a custom theme (even one with a few Unicode ellipses or =display-graphic-p= branches) will not stop the server socket from being created. What is much more often the culprit is:
+
+ 1. Mis-using =emacsclient -a ''= so that it never actually starts the server, or
+ 2. Having a startup error in your init file (or theme) that aborts =server-start= before the socket ever gets written.
+
+Here is how I’d go about diagnosing (and fixing) the situation:
+
+1) Make sure you can start Emacs –daemon cleanly, /without/ any of your custom code.
+
+ From a shell, run
+
+ emacs --daemon --debug-init --eval "(message \"daemon ok\")"
+
+ – you should see a process stick around, and if you look at =~/.emacs.d/server/= you should find a valid socket file.
+
+ If that does not happen, Emacs itself is aborting in your init. Remove or comment out your calls to =load-theme=, your theme-specific code, all your =custom-set-…= blocks, and any other ELisp until you can get a clean daemon start. Once that is rock-solid, re-introduce your theme.
+
+2) Once you can start the daemon by hand, verify that =emacsclient -c= can actually talk to it:
+
+ emacsclient -c -n
+
+ The =-n= is “don’t wait for the client buffer to finish,” so you’ll get your GUI frame immediately. If that works, the server is up and your sockets are good.
+
+3) If you /really/ want =emacsclient -c -a ''= to both start Emacs –daemon /and/ immediately pop a graphical frame, you have two choices:
+
+ • Let =-a= fall back to =emacs --daemon=. On many platforms simply omitting the =-a= will do this.
+ • Explicitly tell it:
+
+ emacsclient -c -a "emacs --daemon" # note the command in quotes
+
+ On macOS/Homebrew, for instance, people often do
+
+ alias ec='emacsclient -c -a "emacs --daemon"'
+
+ so that if there is no server, emacsclient will shell out to =emacs --daemon=, launch it, and /then/ connect.
+
+4) If you still suspect your theme is triggering a startup error (and killing the daemon before it gets to =(server-start)=), you can sprinkle a tiny bit of ELisp into your init:
+
+ #+begin_src elisp
+ ;; very early in ~/.emacs or init.el
+ (setq debug-on-error t)
+ (add-hook 'after-init-hook
+ (lambda ()
+ (message "finished init; about to (server-start)")))
+
+ (require 'server)
+ (unless (server-running-p)
+ (server-start))
+ #+end_src
+
+ Then run:
+
+ emacs --daemon --debug-init
+
+ and watch =~/.emacs.d/server/server= get created or watch the =*Messages*= buffer or your =~/.emacs.d/emacs-debug.log= (if you redirect =--debug-init= output). If there is a hard error in your theme, you will get a backtrace in your =*Backtrace*= buffer.
+
+5) Finally, a sanity check for your theme file. Launch Emacs /without/ your init:
+
+ emacs -Q
+
+ Then:
+
+ M-x load-file RET /path/to/dupre-theme.el RET
+ M-x load-theme RET dupre RET
+
+ If this produces any errors or warnings in =*Messages*= or =*Warnings*=, you have your smoking gun.
+
+---
+
+Summary
+-------
+
+• *The theme itself isn’t going to silently block server-socket creation.*
+• *You almost certainly have either:*
+ – A mis-invocation of =emacsclient -a ''= so that it never starts Emacs –daemon.
+ – A genuine startup error in your init or in the theme that kills Emacs before =(server-start)= runs.
+• *Use*
+ emacs --daemon --debug-init
+ plus removing chunks of your init until you find the offending form.
+• *Test your theme in a vanilla Emacs (=-Q=)* to see any compile/load errors.
+
+Once you have a clean =emacs --daemon= up and running you will find that
+
+ emacsclient -c # or with your favorite fallback: -a "emacs --daemon"
+
+just works, whether you are on wombat, solarized, or good old dupre.
+
+*** 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 [#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.
+
+*** 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 [#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.
+
+*** 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
+
** 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]
@@ -43,8 +414,25 @@ Can be used with the `gptel-post-response-functions' hook."
*** TODO Change the Prompt: C-c g p
*** TODO Change the Directive: C-c g d
*** TODO Default should be coding
-** TODO [#A] Add Templates Back to Emacs Repository!
-** TODO [#A] Add Org Capture Template for Vocabulary Words
+** PROJECT [#A] Work on mu4e email
+*** DONE [#A] mu4e contacts not expanding on forwarding emails
+CLOSED: [2025-08-29 Fri 16:09]
+removed org-contacts functionaality and it returned!
+*** DONE [#A] Add org-msg
+CLOSED: [2025-08-30 Sat 12:12]
+https://github.com/jeremy-compostella/org-msg
+*** TODO [#A] Fix org-contacts functionality
+** 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
@@ -114,19 +502,23 @@ 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 [#B] Add Past Due to F8 Agenda Summary in Emacs
-** TODO [#B] Separate B and C in F8 Agenda Summary in Emacs
-** 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 [#C] Check and test native comp logging changes in
+** 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?
-* Emacs Next Release/Label
-** TODO Emacs Signal Client
+** 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]
@@ -134,16 +526,6 @@ Captured On: [2025-05-29 Thu 04:24]
[[https://jao.io/blog/signel.html][signel, a barebones signal chat on top of signal-cli]]
Captured On: [2025-05-29 Thu 04:23]
-** TODO Install ZOxide Integration into Emacs
-[[https://gitlab.com/Vonfry/zoxide.el][Vonfry / zoxide.el · GitLab]]
-Captured On: [2025-06-07 Sat 17:11]
-** TODO 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 Rename 'sync-dir' Variable in Init File to 'org-dir'
-** TODO ryuslash/mode-icons: Show icons instead of mode names
-[[https://github.com/ryuslash/mode-icons][ryuslash/mode-icons: Show icons instead of mode names]]
-Captured On: [2025-06-07 Sat 13:29]
* 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]]