aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* feat(theme-studio): move the contrast verdict into a hoverCraig Jennings11 days5-4/+71
| | | | The contrast column showed "5.4 PASS". The number's color already encodes the tier (green AAA, grey AA, red fail), so the PASS/FAIL word was redundant. I dropped it and put the WCAG meaning in the cell's hover via a pure contrastTitle helper. crHtml now renders just the colored number. verdictFor stays for the covered-overlay worst-case readout, which is unchanged.
* chore(todo): file two studio tasks from the roam inboxCraig Jennings11 days1-0/+4
| | | | Routed two emacs/studio captures: move the clear-palette button, and drop dropdown packages with no preview elements. Both need design or a criterion from Craig before implementing.
* feat(theme-studio): mark per-face setting boxes that differ from defaultCraig Jennings11 days6-4/+140
| | | | A non-default height looks identical to the default in the size input, so a stray 1.1 hides in plain sight. I added a small gold corner flag on any per-face setting cell (fg, bg, style, inherit, size, box) whose value differs from the face's seed default. A pure faceBoxNonDefaults helper computes the per-box flags. buildPkgTable resolves fg/bg to hex before comparing, so a palette-name-vs-hex difference doesn't read as a change.
* chore(todo): file buffer-differs 4-way-prompt feature from the roam inboxCraig Jennings11 days1-0/+2
| | | | Routed an emacs-owned roam capture into Open Work. Needs design (which prompt, diff-then-return loop) before it's implementable.
* chore(todo): close the alphabetize-assignment-dropdown taskCraig Jennings11 days1-3/+2
| | | | Resolved by afd2ddad. Dated-rewrote the VERIFY to a log entry per the todo format.
* feat(theme-studio): alphabetize packages in the assignment dropdownCraig Jennings11 days5-14/+57
| | | | The assignment-view dropdown listed package faces in APPS build order (bespoke apps first, then inventory). generate.py builds them that way, so the list wasn't alphabetical. I added a pure appViewKeysSorted helper that orders the app keys by display label, and buildViewSel uses it. The @code and @ui editor entries above the divider are unchanged.
* chore(todo): dashboard icons (Cause C) done, reframe item-color as ↵Craig Jennings12 days1-2/+6
| | | | | | theme-studio work Cause C (per-filetype file icons) is fixed and committed. Cause B reframed per Craig: items already default to fg, coloring routes through theme-studio (task 2418), no hardcoded hex. Filed a visual-verify VERIFY.
* feat(dashboard): per-filetype icons on the list itemsCraig Jennings12 days1-0/+1
| | | | I enabled dashboard-set-file-icons so the project, bookmark, and recent-file rows show nerd-icons file icons, colored per filetype. They render now that the dashboard is out of global font-lock, which was stripping the icon faces too. Bookmarks fall back to a generic icon since there's no filetype to map.
* chore(todo): mark dashboard font-lock fix (Cause A) doneCraig Jennings12 days1-0/+20
| | | | Cause A of the dashboard-theming task is fixed and committed. Causes B (item color, themeable not hardcoded) and C (enable file/section icons, per-filetype color) stay open.
* fix(dashboard): exclude dashboard-mode from global font-lockCraig Jennings12 days2-0/+44
| | | | | | The dashboard banner title and section headings render in the default face instead of their theme colors. The faces are defined correctly. Global font-lock fontifies the dashboard buffer and strips the `face' text properties dashboard sets by hand: it owns `face' and clears props it didn't apply. Items and the navigator survive because their color rides a dashboard-items-face overlay, which font-lock leaves alone. Excluding dashboard-mode from global font-lock keeps the banner and heading faces. I set it at top level so it applies regardless of the use-package body.
* chore(todo): close gptel string-model crash, file dedup + manual-test follow-upsCraig Jennings12 days1-1/+12
| | | | Closed the gptel-switch-backend bug (fixed this session). Filed a VERIFY for the dedup decision (keep switch-backend or fold into change-model) and a manual-test VERIFY for the C-; a B interactive check.
* fix(ai-config): intern model in gptel-switch-backend (modeline hang)Craig Jennings12 days3-2/+76
| | | | | | cj/gptel-switch-backend set gptel-model to the raw completing-read string. gptel's modeline code calls symbolp on gptel-model and signals wrong-type-argument on a string, which surfaces as a redisplay hang (reachable from C-; a B). The sibling command cj/gptel-change-model already interns. This one didn't. I added a pure cj/gptel--model-to-symbol helper (mirroring cj/gptel--model-to-string) and route the model through it before the setq. The existing switch-backend test asserted the buggy string value. It now asserts a symbol plus an explicit symbolp guard.
* chore(todo): resolve :next: sweep — fixes closed, rest parked as VERIFYCraig Jennings12 days1-7/+7
| | | | Close the tasks fixed this session and park the rest as VERIFY with what's needed (fixture / measurement / design pick / confirm). Child-priority sync bumps, lint mechanical fixes, and PROPERTIES-drawer repairs from the wrap-up cleanup.
* build: add task-sorted target to archive resolved todo tasksCraig Jennings12 days2-45/+49
| | | | make task-sorted wraps todo-cleanup.el --archive-done, moving DONE/CANCELLED level-2 subtrees from Open Work into Resolved. Ran it: archived this session's closed tasks.
* chore(todo): park remaining :next: tasks as VERIFY with next-stepsCraig Jennings12 days1-12/+24
| | | | deploy-wip (mechanism), calendar-sync x2 (need .ics fixture), org-roam refile (measurement-first), dashboard icons (font approach), transcription (focused pass), music faces (theme-side colours), music tests (audit session), alphabetize + sort-newest (focused studio pass), compact-contrast (clarify intent), fullscreen-terminal (confirm gesture). Each carries what I need or the plan.
* refactor(theme-studio): drop the too-similar-colors warning boxCraig Jennings12 days6-57/+9
| | | | The warning box under the palette wasn't useful there; the same ΔE info is reachable per-chip via the nearest-ΔE tooltip and inline contrast. Remove renderPaletteWarnings, the #palwarn element, its CSS, and the #deltatest gate. paletteWarnings still runs for the per-chip nearest distance.
* chore(todo): park cannot-reassign-fg as VERIFY (need exact repro)Craig Jennings12 days1-1/+2
|
* chore(todo): close C-s C-s vertico-repeat (verified live)Craig Jennings12 days1-1/+3
|
* feat(system-utils): tint the *scratch* background a shade lighterCraig Jennings12 days3-3/+62
| | | | A buffer-local face remap lightens the *scratch* default background by cj/scratch-background-lighten percent (default 5) so it reads as the scratch buffer, applied on emacs-startup-hook. The colour math is display-dependent (verified live); the pure helper's guard contract is unit-tested.
* chore(todo): park input-needed/large :next: tasks as VERIFYCraig Jennings12 days1-6/+12
| | | | native-comp re-enable (stability judgment), stale-elpa-gptel (needs the gptel-magit dep resolved), org-agenda theme-studio app (multi-phase feature), dirvish hard-delete (confirm key + dangerous sudo rm -rf), remove system-power keys (confirm which to keep), face-consistency check (needs a spec). Each carries what I need from Craig.
* fix(vertico): Page-Up/Down scroll the candidate list, not historyCraig Jennings12 days2-8/+14
| | | | <next>/<prior> weren't bound in vertico-map, so in a long completing-read they fell through and selected-then-dismissed the list. Bind them to vertico-scroll-up / vertico-scroll-down.
* fix(custom-comments): heavy-box interiors are valid commentsCraig Jennings12 days3-42/+54
| | | | The heavy-box empty and text lines began with a bare decoration char, so in line-comment languages (elisp, Python) C-; C h injected syntax-breaking lines. Prefix the interiors with the comment char and suffix them like cj/--comment-box does. Add the missing min-length guard so small or negative widths error cleanly instead of failing inside make-string. Updated the two characterization assertions to the corrected output.
* fix(dirvish): mark-all-visible no longer skips every other fileCraig Jennings12 days5-379/+372
| | | | dired-mark advances point itself, so the loop's extra forward-line skipped every other file (and could mark a directory). Use dired-get-filename + file-directory-p with an if/else: a marked file line advances once via dired-mark, non-file/directory lines advance manually. Replaces the regex line predicate (retired with its mock test) with a real-Dired marked-count test.
* chore(todo): fix doubled :next: tag on music extract-facesCraig Jennings12 days1-87/+58
|
* chore(todo): close the no-approvals batch tasks, archive resolvedCraig Jennings12 days1-64/+74
| | | | Mark the 12 batch fixes DONE (eww, prog electric-pair/line-numbers, auth-config, system-defaults, prog-go, eshell, split-window, dashboard keys, undo-kill-buffer, ai-term, Signal launcher, groundPair) with their commit refs, then archive all newly-resolved subtrees into Resolved.
* refactor(ui-config): drop buffer-state cursor coloringCraig Jennings12 days4-260/+11
| | | | A cursor that changed color by buffer state was confusing. Remove cj/set-cursor-color-according-to-mode, its two cache defvars, and the post-command / server-after-make-frame hook registrations; the cursor now uses the theme cursor face. The cj/buffer-status-state / cj/buffer-status-color classifier stays in user-constants.el for the modeline buffer-name indicator. Delete the cursor-function integration test; keep the classifier tests.
* chore(todo): archive resolved tasksCraig Jennings12 days1-36/+34
|
* chore(todo): close audit fixes, file roam captures, note gptel deferCraig Jennings12 days1-5/+22
| | | | Close reconcile-open-repos and dupre-theme-test-failures (the latter moot since dupre was retired and its test file deleted). File four roam-inbox studio/music captures. Note on the stale-elpa-gptel task that deleting the elpa copy standalone introduces a gptel-magit activation warning, so it must be paired with the gptel-magit dependency fix.
* test(ai-term): stub default-direction in display-rule testCraig Jennings12 days1-1/+1
| | | | Same fragility as the sibling tests: it stubbed env-laptop-p (now unused by the direction logic) and passed only because the batch frame is landscape. Stub the direction directly.
* test(ai-term): stub default-direction in reuse-edge-window testsCraig Jennings12 days1-7/+7
| | | | These tests stubbed env-laptop-p to pin the dock edge, but the aspect-ratio rework dropped env-laptop-p from the direction logic, so the laptop case resolved to the batch frame's real (landscape) aspect and split a third window. Stub cj/--ai-term-default-direction directly.
* refactor(theme-studio): extract a groundPair() helperCraig Jennings12 days4-68/+76
| | | | The literal {bg:MAP['bg'],fg:MAP['p']} repeated 32 times across app.js, palette-actions.js, and the browser gates. Replace it with a groundPair() helper. Named groundPair, not ground, to avoid colliding with the local ground bindings destructured from columnsFromPalette. No behavior change; node tests and browser gates are the safety net.
* feat(dashboard): add a Signal launcherCraig Jennings12 days2-14/+18
| | | | Signal joins the dashboard launchers on key S (icon nf-md-message), opening cj/signel-message. Row sizes go 4-4-3-3 so Slack, Linear, and Signal share the last navigator row.
* test(ai-term): pin display-saved defaults via stubbed directionCraig Jennings12 days1-8/+7
| | | | The aspect-ratio rework dropped env-laptop-p from the direction logic, so these tests stubbed a dead function and depended on the batch frame's real dimensions. Stub cj/--ai-term-default-direction directly.
* feat(ai-term): dock the agent window by frame aspect ratioCraig Jennings12 days2-39/+52
| | | | The agent window now docks from whichever edge conserves more space, chosen at display time: right on a landscape frame, bottom on a square or portrait one, replacing the host (laptop/desktop) branch. cj/--ai-term-direction-for-aspect is the pure decision; default-size pairs the width or height fraction with it.
* fix(ui-navigation): undo-kill-buffer skips open files via equalCraig Jennings12 days2-1/+27
| | | | The visited-file filter used delq, comparing expand-file-name strings by eq, so an already-open file was never removed from the candidates (the skip logic was dead). Use delete (equal). Adds a test with the open file at the head of the list, where the eq/equal difference actually shows.
* feat(dashboard): g refreshes, Telegram moves to G, F1 refreshes on showCraig Jennings12 days2-2/+10
| | | | | - g on the dashboard now runs dashboard-refresh-buffer (the dired/magit convention) instead of opening Telegram. Telegram moves to G in the launcher table. - cj/dashboard-only (F1) refreshes before showing, so re-displaying the dashboard always lands on fresh content.
* feat(ui-navigation): C-x 2/3 show the dashboard in the new windowCraig Jennings12 days2-0/+97
| | | | Splitting with C-x 2 or C-x 3 now shows *dashboard* in the freshly created window and keeps point in the original, instead of mirroring the current buffer. cj/--split-show-buffer does the placement; cj/--dashboard-buffer fetches or opens the dashboard without disturbing windows.
* fix(eshell): flatten visual-commands, wire xterm-color correctlyCraig Jennings12 days1-14/+20
| | | | | - eshell-visual-commands is a flat string list, but add-to-list pushed the whole list as one element, so lf/ranger/htop/top never opened in a visual terminal. dolist the strings instead. (visual-subcommands/options are alists and were already correct.) - The xterm-color before-prompt hook was registered as eshell-before-prompt-hook, which use-package turned into eshell-before-prompt-hook-hook and never ran. Use the real hook name, and actually install xterm-color-filter into eshell-preoutput-filter-functions (dropping eshell-handle-ansi-color) so color output is interpreted.
* fix(prog-go): autoload gofmt so C-; f works under go-ts-modeCraig Jennings12 days1-0/+4
| | | | .go opens the built-in go-ts-mode, so nothing triggered the go-mode package: gofmt was never autoloaded (C-; f signalled void-function) and the :config setting goimports + exec-path never ran. Add :commands (gofmt) so the first format pulls go-mode and its config.
* fix(system-defaults): guard server-start and custom-file against batchCraig Jennings12 days2-4/+21
| | | | A raw module load under --batch started a server and dropped a throwaway custom-file temp on every run; the suite only passed because a testutil stubbed the server. Guard both with (unless noninteractive ...), the established pattern here. Adds a batch-load test for the custom-file guard.
* fix(auth-config): guard gpg-connect-agent, require user-constants at runtimeCraig Jennings12 days1-4/+6
| | | | | - The bare call-process to gpg-connect-agent in :config aborted init with file-missing on a machine without the binary. Guard it with cj/executable-find-or-warn. - user-constants was required only eval-when-compile, but authinfo-file is read at load time, so a standalone .elc load failed. Require it at runtime.
* fix(prog): keep electric-pair and line-number setup buffer-localCraig Jennings12 days6-13/+17
| | | | | | - Go/C/shell setup hooks called the global electric-pair-mode, so one prog buffer turned pairing on in org and text everywhere. Use electric-pair-local-mode. - prog-general set display-line-numbers-type inside the hook, after the mode turned on, so the first prog buffer of a session got absolute numbers. Set the type and width at top level instead. - Updated the go/c tests to stub the local mode.
* fix(eww): quick-add bookmarks to the default store, not a new dirCraig Jennings12 days1-5/+2
| | | | cj/eww-bookmark-quick-add let-bound eww-bookmarks-directory to a path and created a directory there, so B (eww-list-bookmarks) read an unreadable path and quick-added bookmarks vanished after restart. Use the default store both commands share.
* chore(todo): file studio inbox tasks, archive resolvedCraig Jennings12 days1-193/+183
|
* chore(todo): close the gallery color picker taskCraig Jennings12 days1-4/+5
|
* feat(theme-studio): 2D gallery color picker for the assignment dropdownsCraig Jennings12 days6-33/+234
| | | | | | | | | | - The color dropdown opens a grid, not a long list. - The grid mirrors the palette: ground strip, then a row per family. - Members run dark to light, with the current color outlined. - A default chip clears the assignment. - A (gone) cell shows a color no longer in the palette. - The trigger and step buttons stay the same. - All three tiers share the one dropdown.
* feat(theme-studio): show view-area > element usages on palette tile hoverCraig Jennings12 days5-8/+106
| | | | I added paletteUsages, which enumerates every place a color is assigned, grouped by view area (the view dropdown's names: color/code assignments, ui faces, each package app) and the element within it. renderPalette builds the per-area scopes once and appends the list to each used tile's hover title, under the existing name/hex/nearest-deltaE line. Node tests and a #usagetest gate cover it.
* chore(todo): file ground() helper extraction refactorCraig Jennings12 days1-0/+2
|
* style(theme-studio): thin the barber-pole flag borderCraig Jennings12 days2-6/+6
|
* style(theme-studio): make the unused and gone flags a two-color barber-pole ↵Craig Jennings12 days2-6/+20
| | | | | | border The single-color dashed outline blended in. I replaced it with a ring of two alternating contrasting colors, drawn as a masked repeating gradient so it overlays without shifting layout. Unused tiles and columns use gold and black; gone assignments use red and white, keeping the two states distinct at a glance.