| Age | Commit message (Collapse) | Author |
|
- Extract cj/gptel--build-model-list from cj/gptel-change-model
- Extract cj/gptel--current-model-selection from cj/gptel-change-model
- Add test-ai-config-build-model-list.el (9 tests)
- Add test-ai-config-current-model-selection.el (8 tests)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Replace use-package gptel-magit hook with autoloads via
with-eval-after-load 'magit (loads gptel only on key press)
- Move org header defuns above use-package to fix load order
- Set gptel-include-reasoning to "*AI-Reasoning*" buffer
- Rebind rewrite to C-; a r, clear context to C-; a c
- Add test-ai-config-gptel-magit-lazy-loading.el (8 tests)
- Mark all ai-config cleanup items DONE in todo.org
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Move cj/gptel--fresh-org-prefix, cj/gptel--refresh-org-prefix,
cj/gptel-backend-and-model, cj/gptel-insert-model-heading out of
use-package :config to top level (fixes byte-compile warnings)
- Set gptel-include-reasoning to "*AI-Reasoning*" buffer
- Rebind rewrite to C-; a r, clear context to C-; a c
- Update todo.org with completed cleanup items
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add testutil-ai-config.el with gptel stubs for batch testing
- Add tests for cj/gptel--model-to-string (9 tests)
- Add tests for cj/gptel--fresh-org-prefix (8 tests)
- Add tests for cj/gptel-backend-and-model (8 tests)
- Remove dead cj/gptel-backends defvar (duplicates cj/gptel--available-backends)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Escape single quote in cj/ensure-gptel-backends docstring
- Wrap cj/gptel--available-backends docstring to 80 chars
- Add missing docstring to cj/gptel--model-to-string
- Rename cj/gptel--model->string to cj/gptel--model-to-string
- Mark stale model list task as DONE in todo.org
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Remove redundant gptel-backend setq and orphaned section header.
Fix commentary keybinding references: M-a → C-; a, correct buffer
add (.) and rewrite (&) bindings.
|
|
Update Anthropic model list to current: claude-opus-4-6, claude-sonnet-4-6,
claude-haiku-4-5-20251001. Fix gptel--system-message not picking up the
custom default.org directive (defvar set at load time before gptel-prompts
replaces the default entry). Add cleanup tasks for ai-config, calibredb,
and slack reaction workflow to todo.org.
|
|
Notifications silently failed: slack-room-im-p (nonexistent) replaced
with slack-im-p; slack-message-to-string replaced with slack-message-body.
Mark-as-read bound to nonexistent function; added cj/slack-mark-read-and-bury.
|
|
Add emacs-slack config with auth-source credentials, DM/mention-only
notifications via notify script, compose buffer workflow, and dashboard
icon. Keybindings under C-; S prefix.
|
|
Replaced pylsp with lsp-pyright in prog-python.el for better type inference,
especially for Django ORM. Added Django engine and indent settings to web-mode
in prog-webdev.el. Pyright already installed via pacman.
|
|
New prog-json module: json-ts-mode with jq formatting (C-; f) and
jq-interactively (C-c C-q). Upgraded prog-yaml to yaml-ts-mode with
prettier formatting. Both use treesit-auto for grammar management.
Includes 18 new tests (10 JSON, 8 YAML), 185/185 passing.
|
|
Rework quick-setup device picker:
- Labels: [in use], [ready], [available], [muted] instead of
PulseAudio jargon (RUNNING/IDLE/SUSPENDED)
- Muted devices now shown (previously hidden) so users can see
all connected hardware and understand why a device is unsuitable
- Sink step shows which apps are playing through each output:
"JDS Labs Element IV [in use] (Firefox, Spotify)"
- Prompt changed from "audio output to monitor" to "audio output
to capture" to avoid PulseAudio monitor terminology confusion
- Sort order: in use → ready → available → muted
|
|
Replace hard-to-distinguish nerd font icons with clear text labels:
Jabra SPEAK 510 Mono [active - running]
Shure MV7+ Analog Stereo [active - idle]
Ryzen HD Audio Controller [inactive - suspended]
Both mic and sink steps use the same labeling. Devices sorted
running → idle → suspended. Removed mic-active-p and sink-active-p
helpers — state now comes directly from the verbose pactl parsers
via get-available-mics/sinks which return (name description state).
|
|
Mic step now shows with green/dim coloring to indicate which mics
are actively in use (RUNNING state), with active mics sorted to top.
Changed sink inactive icon from (slashed speaker, reads as
"broken/muted") to (plain speaker, reads as "no streams right
now"). Active sinks still show .
|
|
Validation Check 2 (default sink drifted) would silently replace the
user's explicit sink selection from quick-setup with the default sink's
monitor on every recording start. Removed it — if the device still
exists, trust the user's choice. The no-audio warning (Check 3) already
catches wrong-sink scenarios.
Also fix commentary: device selection does not persist across sessions
(both vars are plain defvar), and update validation section to match
the two remaining checks.
|
|
Quick-setup (C-; r s) is now a two-step flow: pick a mic, then pick an
audio output sink. Sinks display / icons with green/dim coloring to
indicate which have active audio streams, with active sinks sorted to
the top. The chosen sink's .monitor is set as the system audio device.
This replaces the old auto-default-sink approach, letting users see
where audio is actually going and pick the right sink in one command.
|
|
The no-audio warning was a y-or-n-p prompt that blocked recording start.
This fires too often in legitimate scenarios (starting before a meeting
connects, during silence). Replace with a message in the echo area and
diagnostic steps logged silently to *Messages*. Also add pre-recording
validation to the Commentary section.
|
|
Add pre-recording validation that catches stale or drifted system audio
devices before they cause silent recordings. When the default audio
output changes (Bluetooth reconnect, device switch) between setup and
recording, the monitor device is auto-updated. Warns if no audio is
currently playing through the monitored sink.
Co-Authored-By: Craig Jennings <c@cjennings.net>
|
|
pdf-tools-install was in use-package :config for pdf-tools, but opening
a PDF only loads pdf-view.el — never pdf-tools.el — so the server never
started. Move it to with-eval-after-load 'pdf-view and revert any PDF
buffers that opened before the server was ready.
|
|
Wire cj/xdg-open (C-; b o) and cj/open-this-file-with (C-; b O) into
the buffer keymap. Fix xdg-open fallback to try buffer-file-name before
dired context. Remove old C-c x o binding from external-open.
|
|
Update load-path, GitHub URL, and all project/package name
references to reflect the chime.el → Chime rename.
|
|
org-agenda-list prompts interactively for missing files, which hangs
the async subprocess chime uses to fetch events. Create empty
placeholders at init so calendar-sync can populate them on first sync.
|
|
Unsetting C-z bound it to nil, which blocked font-config.el from
binding C-z F. This cascaded through init and prevented alert and
chime from loading.
|
|
Bind orderless-smart-case to nil in cj/music-fuzzy-select-and-add
so typing uppercase characters doesn't switch to case-sensitive matching.
|
|
minor-mode-map-alist is global, so the last buffer to set its keymap
won for all buffers. Dashboard's scroll+primary profile was immediately
overwritten by other buffers' disabled profile. Switch to
emulation-mode-map-alists with a buffer-local variable so each buffer
gets its own independent keymap. Fixes dashboard click navigation.
|
|
- Enable wttrin-debug in weather-config.el
- Remove redundant lipsum chain reset at startup (silences noisy message)
- Improve learn message to identify lorem-optimum as source
- Delete unused lipsum-generator.el (superseded by lorem-optimum)
|
|
restclient.el + restclient-jq integration with SkyFi API templates,
tutorial file, auto key injection from authinfo, 17 ERT tests.
|
|
Unbind comma, restore . to goto-today, use angle brackets for day
navigation, and M-comma/M-dot for month navigation.
|
|
Relocate snippets-dir from ~/sync/org/snippets/ to ~/.emacs.d/snippets/
and restore 28 snippet files from backup.
|
|
- Move all org-noter bindings to C-; n prefix with which-key labels
- Remove F6 global binding, add i in pdf-view-mode for insert-note-dwim
- Auto-detect split direction from frame aspect ratio (threshold 1.4)
- Add background highlight on notes window focus (matches music-config)
- Fix session start to use find-file-noselect (keeps PDF visible)
- Fix split fraction (70/30 doc/notes)
- Replace hardcoded path with roam-dir from user-constants
- Update commentary to reflect new workflow
|
|
use-package :config for pdf-tools never ran because opening a PDF loads
pdf-view.el (provides 'pdf-view), not pdf-tools.el. Moved keybindings
to with-eval-after-load 'pdf-view. Arrow keys now scroll within page
only; C-up/C-down change pages.
|
|
notification-package → notification-sound in cj/tmr-reset-sound-to-default.
Also remove 10 untestable modules from ERT checklist [13/14].
|
|
New test coverage (86 tests across 7 files):
- custom-case: 43 tests (title-case-region, upcase-dwim, downcase-dwim)
- custom-datetime: 10 tests (all insert methods with mocked time)
- config-utilities: 11 tests (format-build-time type branching)
- org-capture-config: 22 tests (date-prefix + event-content)
Production bugs found and fixed:
- custom-case: title-case-region crashes on whitespace/punctuation-only input
(char-after returns nil when no word chars found)
- org-capture-config: browser branch missing empty-string guard on :initial
plist value, producing stray newline in capture output
- mousetrap-mode: keymap never registered in minor-mode-map-alist, so mode
was silently not blocking any mouse events. Now pushes/removes on toggle.
Additional fixes:
- local-repository: fix cons cell syntax bug in localrepo-initialize
(was calling vars as functions instead of using cons)
- dupre-theme tests: update rainbow-delimiter color expectations
- mousetrap tests: update dashboard profile (primary-click → scroll+primary)
- music completion test: bind completion-ignore-case to prevent pollution
- Delete redundant interactive recording test (duplicate of ERT version)
Refactoring:
- org-capture-config: extract cj/org-capture--date-prefix pure function
from cj/org-capture-format-event-headline for testability
Test checklist: todo.org updated to [11/25], removed untestable modules
|
|
- Add date:nil, timestamp:nil, author:t to template OPTIONS
- Set global CSS override (text-transform:none) via org-reveal-head-preamble
- Move transition from obsolete REVEAL_TRANS to REVEAL_INIT_OPTIONS
- Default transition changed to "none"
- Global init options now reference cj/reveal-default-transition constant
|
|
Resolves conflict with align-regexp on the same key. Auth cache reset
is accessible via M-x cj/reset-auth-cache.
|
|
Replace raw file paths with clean track descriptions (Artist - Title [M:SS]),
add multi-line header overlay showing playlist info, now-playing, mode
indicators with gold/muted toggle states, and keybinding hints. Style
non-playing tracks in Dupre steel, playing track in Dupre gold. Playlist
window now opens from the bottom at 50% height with subtle background
highlight on focus.
Unit tests for format-duration (13 tests) and track-description (16 tests).
|
|
Dashboard: reorder nav rows (Code/Email/Agenda/Files/Music, Feeds/IRC/
Flashcards/Books/Terminal), show 10 recent files with filename only,
exclude EMMS history from recents. Calibredb: use bookmark emoji for
favorites, change favorite keyword to in-progress.
|
|
Document playlist-mode keybindings with ncmpcpp default alignment
status (83% match). Note intentional divergences (SPC/p swap,
x=consume vs crossfade) and EMMS-only features.
|
|
Reconcile playlist-mode bindings with ncmpcpp defaults: add ncmpcpp-
compatible aliases (>/<, +, S-up/S-down, c), new toggles (r repeat,
t repeat-track, z random, x consume), info keys (i, o), and relocate
radio (r→R), reload (R→g), shuffle (x→Z). Add consume mode that
removes tracks from playlist after playback via emms-player-finished-
hook. Fix buffer-local bug where emms-playlist-selected-marker was
checked outside with-current-buffer. 13 ERT tests.
|
|
Added 5 most recent files below projects and bookmarks using
dashboard's built-in recentf integration.
|
|
convert-tz-to-local was spawning a `date` subprocess per timestamp,
causing ~15s parse freezes on Proton (223 events) and ~10s on Google
(1543 events). Replaced with encode-time/decode-time ZONE argument —
same TZ database, no subprocess overhead. Parse times now 0.2-2.8s.
Also adds phase timing instrumentation behind cj/debug-modules flag.
|
|
Replaced pandoc-based reveal.js export with native ox-reveal integration.
New org-reveal-config.el module provides offline, self-contained HTML export
with keybindings under C-; p. Includes setup script for reveal.js 5.1.0
and 34 ERT tests covering header template and title-to-filename helpers.
|
|
Add 67 tests across 6 new test files for modeline and hugo modules.
Refactor hugo-config: extract post-file-path and post-template helpers
from interactive new-post function for testability. Update todo.org
with test audit (31 modules), priority adjustments, and task cleanup.
|
|
Standalone module for ox-hugo blog workflow. One-file-per-post
structure with keybindings for new post, export, open dir (dirvish
and system file manager), and toggle draft.
|
|
Enable ox-hugo for Hugo blog workflow. Adds C-c c h capture template
for quick post creation with auto-generated slug and date.
|
|
Replace recursive directory-files-recursively with shallow scan that
only checks ~/projects/*/todo.org. Excludes nested archive todo.org
files and keeps ~/code and ~/.emacs.d out of agenda.
|
|
GUI key translations (M-O → M-S-o, etc.) were never installed in daemon
mode because env-gui-p returns nil at startup with no frame. Use
server-after-make-frame-hook for daemon, emacs-startup-hook otherwise.
Also adds timestamps to assemblyai-transcribe output.
|
|
Emacs 30.2 + HarfBuzz 12.3.2 segfaults when arabic-shape-gstring is
called on emoji characters during mu4e header rendering. Disable Arabic
composition ranges, set inhibit-compacting-font-caches, and disable
auto-composition in mu4e-headers-mode. Remove duplicate bidi settings
from system-defaults.el (already in early-init.el).
|
|
|
|
Video stop fix: kill wf-recorder (producer) first on Wayland so ffmpeg
gets clean EOF, then signal process group. Replaces sit-for with
poll-based wait-for-exit. Fixes zero-byte output files.
Device selection: rewrite quick setup to show all available mics with
PulseAudio descriptions, auto-detect default sink monitor for system
audio. Skip confirmation dialog, add Cancel option to mic list.
Modeline: replace red dot emoji with nerd font icons (mic/camcorder).
Rename quick-setup-for-calls to quick-setup, rebind C-; r s / C-; r S.
173 recording tests pass (was 165).
|