aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* fix(erc): one mention notification, real server list, runtime requireCraig Jennings2026-06-142-4/+53
| | | | Three audit defects. erc-modules carried the built-in notifications module while :config also added cj/erc-notify-on-mention to the same erc-text-matched-hook, so every mention popped two desktop notifications. Dropped notifications from erc-modules and kept the custom one. cj/erc-connected-servers compared a buffer's erc-server-process to itself inside with-current-buffer (always true), so it returned every ERC buffer; it now filters on erc-server-buffer-p and erc-server-process-alive. And user-constants moved from an eval-when-compile-only require to a runtime require, since user-whole-name is read at load time for erc-user-full-name.
* refactor(faces): let the theme own face appearanceCraig Jennings2026-06-145-90/+6
| | | | Strip per-module face configuration so the active theme is the single source of face styling. Removed the dired text-greying set-face-attribute calls (kept the buffer-local face-remap), the org appearance set-face-attribute calls, the highlight-indent-guides colors, the rainbow-delimiters depth colors (which were overriding the theme's blue with red), and the cj/music-* defface forms plus the emms-playlist custom-set-faces. Left nerd-icons' set-face-foreground alone, since it's runtime tint logic rather than static config. Each touched file is backed up beside it as <name>.el.faces.bak (untracked). The cj/music-* faces now come from the theme instead of the module, so until the theme provides them music rendering falls back to the default face.
* fix(modeline): drop per-render truename, guard vc fetch against signalsCraig Jennings2026-06-143-58/+52
| | | | The VC modeline cache rebuilt its key every render, and the key included file-truename, so a stat ran on every redisplay rather than once per refresh as the comment claimed. Now it keys on (file show-remote). A moved symlink target is caught at the next TTL refresh, when vc-backend resolves the link fresh. And cj/modeline-vc-fetch is wrapped in condition-case returning nil, so a git signal on a slow or unmounted filesystem degrades to no-VC-info instead of breaking all redisplay.
* Update theme studio palette workflowCraig Jennings2026-06-1428-1792/+51998
|
* Add theme studio box color controlsCraig Jennings2026-06-135-32/+75
|
* Shorten theme studio reset erase labelsCraig Jennings2026-06-135-33/+32
|
* Clarify theme studio reset and erase actionsCraig Jennings2026-06-135-38/+83
|
* Add theme studio face color step arrowsCraig Jennings2026-06-137-30/+158
|
* Preview selected theme studio chip while pickingCraig Jennings2026-06-134-12/+40
|
* Change theme studio spans to endpoint divisionsCraig Jennings2026-06-136-35/+72
|
* Remove theme studio save buttonCraig Jennings2026-06-134-29/+10
|
* Fix theme studio span endpoint tilesCraig Jennings2026-06-137-31/+57
|
* Sort theme studio dropdown colors by lightnessCraig Jennings2026-06-134-8/+38
|
* Fix theme studio ground endpoint editCraig Jennings2026-06-133-6/+28
|
* Fix theme studio fg endpoint selectionCraig Jennings2026-06-133-6/+30
|
* Refine theme studio tile name editingCraig Jennings2026-06-135-8/+43
|
* Make theme studio column delete saferCraig Jennings2026-06-135-10/+31
|
* Add theme studio Rust and Zig samplesCraig Jennings2026-06-135-4/+95
|
* Add theme studio column deleteCraig Jennings2026-06-137-12/+103
|
* Refactor theme studio palette testsCraig Jennings2026-06-139-679/+835
|
* Add theme studio palette clear and lock togglesCraig Jennings2026-06-133-10/+112
|
* Fix theme studio ground column orderCraig Jennings2026-06-132-12/+34
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings2026-06-134-12/+26
|
* Fix theme studio style button stateCraig Jennings2026-06-132-2/+26
|
* Fix theme studio bg-like imported colorsCraig Jennings2026-06-135-44/+111
|
* Add theme studio palette generator specCraig Jennings2026-06-131-0/+241
|
* Add theme studio column selection and reorder controlsCraig Jennings2026-06-133-10/+120
|
* Set theme studio default picker colorCraig Jennings2026-06-133-12/+14
|
* Group numeric color names by stemCraig Jennings2026-06-135-4/+16
|
* Treat legacy color names as base columnsCraig Jennings2026-06-135-4/+28
|
* Split theme studio generator data and templateCraig Jennings2026-06-134-384/+394
|
* Add theme studio default face drift summaryCraig Jennings2026-06-133-1/+102
|
* Pin theme studio preview links and column exportsCraig Jennings2026-06-134-10/+58
|
* fix(help-config): non-destructive info open, clean cancel, drop dead configCraig Jennings2026-06-132-22/+59
| | | | Three audit defects in one file. cj/open-with-info-mode used cl-return-from inside a plain defun, so declining the save prompt threw "No catch for tag" instead of cancelling. The decision is now a pure cj/--info-open-plan and the command routes through it. A dead :hook (info-mode . info-persist-history-mode, which names a non-existent mode on the wrong hook) and an empty :preface are gone. The auto-mode-alist entry that mapped .info to that interactive, buffer-killing command is dropped, so find-file-noselect of a .info no longer destroys buffers. cj/open-with-info-mode stays an M-x command and C-h i still browses info files.
* Add theme studio generated file checkCraig Jennings2026-06-132-1/+12
|
* Rename theme studio column browser gateCraig Jennings2026-06-134-10/+10
|
* Pin theme studio generated defaultsCraig Jennings2026-06-131-0/+32
|
* Refactor theme studio face assemblyCraig Jennings2026-06-138-61/+205
|
* Rename theme studio color model to columnsCraig Jennings2026-06-135-187/+187
|
* Guard theme studio package face coverageCraig Jennings2026-06-131-0/+35
|
* Extract theme studio default face adapterCraig Jennings2026-06-133-81/+203
|
* Update theme studio color columns and defaultsCraig Jennings2026-06-1310-460/+30503
|
* fix(dwim-shell): valid zip name, real backup timestamp, reachable menu keyCraig Jennings2026-06-133-5/+50
| | | | Three audit fixes. Single-file zip named the archive after the input file (<<fne>>.<<e>>), making invalid archives and a "foo." name for directories. It now builds <fne>.zip. The dated backup single-quoted $(date ...), so the stamp sat literal in the filename. Now the timestamp is interpolated in Elisp with format-time-string. The dired menu used "M-S-d", which Meta-Shift-d never emits (it sends M-D), so the menu was unreachable in plain dired. It now binds M-D, matching the dirvish sibling. Both command strings moved to top-level builders so they're unit-testable without loading the dwim-shell-command package.
* fix(markdown): restore the live preview (rename, guard, dead setq)Craig Jennings2026-06-132-6/+14
| | | | F2 ran markdown-mode's own markdown-preview instead of the custom one, so the impatient-mode strapdown preview was dead. I renamed the custom command to cj/markdown-preview and rebound F2 so markdown-mode no longer shadows it. The server guard now uses httpd-running-p (httpd-process isn't a variable), and a dead (setq imp-set-user-filter 'markdown-html) that named neither a real variable nor a real filter is gone.
* fix(completion): let orderless match, prescient sortCraig Jennings2026-06-131-0/+5
| | | | vertico-prescient-mode defaulted vertico-prescient-enable-filtering to t, which overrode completion-styles to prescient inside vertico sessions and left the orderless config dead where it mattered. Setting it nil restores orderless space-separated out-of-order matching while prescient keeps doing the sorting.
* fix(keys): destructive delete on capital D, diff on lowercase dCraig Jennings2026-06-132-2/+32
| | | | C-; b d now runs cj/diff-buffer-with-file (the op I hit most, comparing a buffer against the saved file) and C-; b D runs cj/delete-buffer-and-file. The destructive command sat on the easy lowercase key and diff on the capital. A keymap-lookup test guards the swap.
* fix: vertico-repeat C-s and dotted-repo discovery (audit bugs)Craig Jennings2026-06-134-1/+24
| | | | | | | | | Two bugs from the 2026-06 config audit. - C-s C-s never repeated a search. cj/consult-line-or-repeat calls vertico-repeat on the second press, but vertico-repeat-save was never on minibuffer-setup-hook, so it always signalled "No Vertico session". I hooked vertico-repeat-save next to the vertico block. It's autoloaded, so the load defers to the first minibuffer. - reconcile-open-repos skipped any repo with a dot in its name. cj/find-git-repos filtered children through "^[^.]+$", which matches only dot-free names, so mcp.el, capture.el, and google-contacts.el were never reconciled while M-P still reported "Complete". It now filters through directory-files-no-dot-files-regexp plus a hidden-dir guard, so dotted repos pass and .git stays out. Each fix is test-first: a failing assertion (hook membership, three dotted repos found) precedes the change.
* fix: lock-screen, confirm-tier, and mail-folder audit bugsCraig Jennings2026-06-139-13/+150
| | | | | | | | | | Lock screen: slock is X11-only and never grabbed the Wayland session, so C-; ! l silently did nothing. On Wayland the locker now runs loginctl lock-session, which logind turns into a Lock signal that hypridle handles by running hyprlock, the same path idle and before-sleep locking already use. X11 keeps slock. system-commands.el now also requires host-environment, which it used at load time but never declared. Confirmation tier: the global (fset 'yes-or-no-p 'y-or-n-p) plus use-short-answers t both flattened yes-or-no-p to a single keystroke, so the deliberate strong-confirm tier for irreversible actions was dead. A stray space could power off the machine or destroy files. I added cj/confirm-strong, which binds use-short-answers nil for one call to force a typed "yes", and routed the six irreversible sites through it (shutdown/reboot, permanent file destruction, file overwrites). I dropped the redundant fset and kept use-short-answers t so ordinary prompts stay single-key. Mail folders: the cmail context set no trash folder, so D fell back to a nonexistent /trash, and no context set a refile folder, so r targeted a nonexistent /archive everywhere. Accepting mu4e's offer to create the maildir stranded mail where mbsync never syncs it. cmail now trashes to /cmail/Trash. Refile is computed per message rather than per context, because mu4e context :vars are sticky and a per-context refile would leak one account's archive folder into another. cmail archives to /cmail/Archive. The Gmail-backed accounts have no synced archive maildir, so they signal rather than move mail into an unsynced folder. Lock and confirm-tier need a daemon restart to fully take effect. The mail changes apply on next mu4e open.
* chore(todo): file keymap + capture follow-up tasks, archive resolved workCraig Jennings2026-06-131-0/+1
| | | | New Keymap-consolidation [#B] and deferred Note/Recipe [#D] tasks, plus cross-refs on the prog-hooks and org-capture manual-test tasks. Archived the CANCELLED launcher task and two other resolved subtrees into Resolved. Gitignore the smoke.db runtime artifact.
* fix(snippets): stop electric-pair from stranding ">" after "<"-key snippetsCraig Jennings2026-06-132-0/+70
| | | | | | | | Most of the yasnippet keys start with "<" (<cj, <for, <main, ...), mirroring org-tempo. electric-pair-mode pairs "<" into "<>" wherever the mode's syntax table gives "<" paren syntax, which org and the pairing-enabled prog modes both do. So typing "<cj" lands as "<cj>", and expanding the "<cj" key strands the ">" after the snippet. The cj-comment block came out with a "#+end_src>" close fence, which breaks the cj-scan fence parser and made every respond-to-cj-comments pass hand-parse around it. I set electric-pair-inhibit-predicate globally to inhibit the open angle bracket and defer to the default for every other character. That keeps the "<"-prefixed snippet convention intact across all 14 of them, at the cost of "<>" auto-pairing where it might otherwise be wanted (C++ templates). The snippet convention is universal, so it wins. Surfaced from the smoke project, which kept hitting the malformed fence in its todo.org.