aboutsummaryrefslogtreecommitdiff
path: root/init.el
Commit message (Collapse)AuthorAgeFilesLines
* feat(gloss): wire gloss into init via :vc against cjennings.netCraig Jennings2026-04-301-0/+1
| | | | | | | | | | | | Adds modules/gloss-config.el with a use-package form that installs gloss from the cjennings.net bare repo. The bare's post-receive hook mirrors to GitHub, so the package shows up in both places. Eager-loaded so gloss-prefix-map exists at startup. :config calls gloss-install-prefix to bind C-h g. Lands in the "Modules In Test" section of init.el for v1. Can move out after the first-week shakedown shows the package is steady.
* feat(coverage): add cj/coverage-report command and F7 bindingCraig Jennings2026-04-231-0/+2
| | | | | | | | | | | | | | | | | | | Completes the coverage v1 user-facing path. cj/coverage-report is the interactive entry point: 1. Resolves the backend for the current project (honoring cj/coverage-backend from .dir-locals.el). 2. Prompts for a git-diff scope via completing-read (Working tree, Staged, Branch vs parent, Branch vs main). 3. Reads the cached simplecov report, intersects with the diff, renders records into a *Coverage Report* buffer. 4. If the report doesn't exist, prompts to run coverage first. With a prefix argument, re-runs regardless. The report buffer uses cj/coverage-report-mode, a compilation-mode derivative. Uncovered-line entries are formatted as path:line: uncovered so the standard gnu compilation-error-regexp-alist picks them up for next-error navigation. That means M-g n, M-g p, and C-x backtick walk through uncovered lines from any buffer without switching focus. F7 is bound to the command globally, matching the F-key layout ticket's design (F4 compile+run, F5 debug, F6 test, F7 coverage). Added to init.el: (require 'coverage-core) + (require 'coverage-elisp). Tests cover the pure scope-label helpers (label to symbol, symbol to label, roundtrip) plus a smoke test that exercises the full command with stubbed backend, stubbed completing-read, stubbed shell-command-to-string, and a prepared simplecov fixture. Coverage v1 is now functionally complete: make coverage produces the report, F7 drives the interactive flow.
* chore: delete wip.el and remove its stale require from init.elCraig Jennings2026-04-221-1/+0
| | | | | | | | wip.el held commented-out scratch code (efrit, buffer-same-mode, easy-hugo) plus one active pomm use-package block. The require in init.el was itself commented out, so the file compiled on every make compile pass but nothing in it ever ran at startup. The easy-hugo block motivated the new preview and publish commands that landed in the previous commit. The other entries (efrit, buffer-same-mode) have been dead code for months. Also removes the "Cannot load pomm" warning that has been appearing on every make compile run.
* feat: add Slack client module with dashboard integrationCraig Jennings2026-03-061-0/+1
| | | | | | 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.
* feat(json,yaml): add tree-sitter modes, formatting, and jq integrationCraig Jennings2026-03-021-0/+1
| | | | | | | 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.
* feat(restclient): add REST API client for interactive API explorationCraig Jennings2026-02-181-0/+1
| | | | | restclient.el + restclient-jq integration with SkyFi API templates, tutorial file, auto key injection from authinfo, 17 ERT tests.
* feat(reveal): add org-reveal presentation workflow with ERT testsCraig Jennings2026-02-141-0/+1
| | | | | | | 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.
* feat(hugo): extract hugo-config module with C-; h keybindingsCraig Jennings2026-02-141-0/+1
| | | | | | 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.
* chore: minor housekeeping updatesCraig Jennings2026-02-041-2/+2
| | | | | | | - Add typo correction: should't -> shouldn't - Add dirvish shortcut pcr for career project - Rename pc -> pcl for clipper project - Minor whitespace cleanup in init.el
* refactor(calendar): move calendar URLs into calendar-sync.elCraig Jennings2026-02-041-16/+4
| | | | | Consolidate calendar configuration within the module itself rather than requiring setup in init.el. Improves module encapsulation.
* feat(calendar-sync): add RECURRENCE-ID exception handling for recurring eventsCraig Jennings2026-02-031-1/+4
| | | | | | | | | | | | | | | | | | | | | Handle rescheduled instances of recurring calendar events by processing RECURRENCE-ID properties from ICS files. When someone reschedules a single instance of a recurring meeting in Google Calendar, the calendar-sync module now shows the rescheduled time instead of the original RRULE time. New functions: - calendar-sync--get-recurrence-id: Extract RECURRENCE-ID from event - calendar-sync--get-recurrence-id-line: Get full line with TZID params - calendar-sync--parse-recurrence-id: Parse into (year month day hour minute) - calendar-sync--collect-recurrence-exceptions: Collect all exceptions by UID - calendar-sync--occurrence-matches-exception-p: Match occurrences to exceptions - calendar-sync--apply-single-exception: Apply exception data to occurrence - calendar-sync--apply-recurrence-exceptions: Apply all exceptions to occurrences Also adds DeepSat calendar configuration (dcal-file) to user-constants, init.el, and org-agenda-config. 48 unit and integration tests added covering normal, boundary, and error cases.
* feat(keyboard): add GUI key translation for M-S- bindingsCraig Jennings2026-02-021-1/+1
| | | | | | | | | | | | | | | Rename terminal-compat.el to keyboard-compat.el and add GUI support. Problem: M-S-o and other Meta+Shift bindings didn't work in GUI mode. GUI Emacs receives M-O (uppercase) but bindings use M-S-o syntax. Terminal can't use M-O due to arrow key escape sequence conflicts. Solution: Use key-translation-map in GUI mode to translate M-O -> M-S-o for all 18 Meta+Shift keybindings. Terminal fixes unchanged. Also fix two test issues: - Remove expected-fail from expand-weekly test (timezone fix resolved it) - Add helpful install messages to dependency-checking tests
* fix(terminal): add console/mosh compatibilityCraig Jennings2026-01-231-0/+1
| | | | | | | | - Create terminal-compat.el for arrow key escape sequences - Fix M-uppercase keybindings (M-O → M-S-o, etc.) that conflicted with terminal escape sequences ESC O A/B/C/D - Add GUI-only guards for emojify and icon rendering - 18 keybindings updated across 13 modules with override comments
* feat(calendar-sync): multi-calendar support with property testsCraig Jennings2025-12-021-4/+8
| | | | | | Added multi-URL calendar sync supporting Google and Proton calendars. Each calendar syncs to separate file with per-calendar state tracking. Added 13 property-based tests for RRULE expansion. Total: 150 tests passing.
* feat(org-noter): implement custom org-noter workflowCraig Jennings2025-11-211-1/+1
| | | | | | | | | | | | Implemented custom org-noter workflow with F6 keybinding: - Creates notes files as org-roam nodes in org-roam-directory - Title prompt with pre-slugified default, notes-on-{slug}.org format - F6 toggles notes window visibility when session active - Preserves PDF fit setting on toggle - Deferred org-roam integration to prevent PDF open hang Also fixed: quick-sdcv quit binding, calendar-sync sentinel buffer error Added 30 ERT tests for title-to-slug and template generation functions
* feat(calendar-sync): Add automatic timezone detection and chronological sortingCraig Jennings2025-11-161-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implemented calendar-sync.el as a complete replacement for org-gcal, featuring: **Core Functionality:** - One-way sync from Google Calendar to Org (via .ics URL) - UTC to local timezone conversion for all event timestamps - Chronological event sorting (past → present → future) - Non-blocking sync using curl (works reliably in daemon mode) **Automatic Timezone Detection:** - Detects timezone changes when traveling between timezones - Tracks timezone offset in seconds (-21600 for CST, -28800 for PST, etc.) - Triggers automatic re-sync when timezone changes detected - Shows informative messages: "Timezone change detected (UTC-6 → UTC-8)" **State Persistence:** - Saves sync state to ~/.emacs.d/data/calendar-sync-state.el - Persists timezone and last sync time across Emacs sessions - Enables detection even after closing Emacs before traveling **User Features:** - Interactive commands: calendar-sync-now, calendar-sync-start/stop - Keybindings: C-; g s (sync), C-; g a (start auto-sync), C-; g x (stop) - Optional auto-sync every 15 minutes (disabled by default) - Clear status messages for all operations **Code Quality:** - Comprehensive test coverage: 51 ERT tests (100% passing) - Refactored UTC conversion into separate function - Clean separation of concerns (parsing, conversion, formatting, sorting) - Well-documented with timezone behavior guide and changelog **Migration:** - Removed org-gcal-config.el (archived in modules/archived/) - Updated init.el to use calendar-sync - Moved gcal.org to .emacs.d/data/ for machine-independent syncing - Removed org-gcal appointment capture template Files modified: modules/calendar-sync.el:442, tests/test-calendar-sync.el:577 Files created: data/calendar-sync-state.el, tests/testutil-calendar-sync.el Documentation: docs/calendar-sync-timezones.md, docs/calendar-sync-changelog.md
* fix(ui): Fix cursor color updates with post-command-hookCraig Jennings2025-11-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The cursor color was not updating correctly when switching buffers or modifying files. The original implementation used window-buffer-change and other specific hooks, but these were insufficient and internal buffers were interfering with cursor color updates. Root cause: - Cursor color is global (one cursor for all of Emacs) - Previous hooks fired in internal buffer contexts (*Echo Area*, *temp*) - This caused cursor to be set to white (unmodified) even when in read-only buffers like dashboard Solution: - Use post-command-hook which runs after every command in current buffer - Ignore internal buffers (names starting with space) - Cache optimization prevents redundant set-cursor-color calls Behavior now: - Dashboard (read-only): Red cursor - Unmodified file: White cursor - Modified file: Green cursor - After save: White cursor Tests: - Added 9 integration tests in test-ui-cursor-color-integration.el - Tests verify hook installation, buffer switching, modification tracking - All 27 tests passing (18 unit + 9 integration) Integration tests catch issues that unit tests miss: - Unit tests verified state detection logic (✓) - Integration tests verify hooks fire at right times (✓ now) - Integration tests verify real buffer switching behavior (✓ now) Cleanup: - Removed debug code from init.el - Removed debug-cursor-color.el temporary file
* feat:system: Add system utility library with executable checkCraig Jennings2025-11-091-0/+1
| | | | | | | | | | | | | Introduce a new `system-lib.el` module providing low-level system utility functions, including function `cj/executable-exists-p` to check for the availability of programs in PATH. Integrate this library in `init.el`. test(system): Add unit tests for executable check function Create comprehensive unit tests for `cj/executable-exists-p` in `system-lib.el`, ensuring coverage of normal, boundary and error scenarios.
* feat: Add AssemblyAI transcription backend with speaker diarizationCraig Jennings2025-11-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Integrated AssemblyAI as the third transcription backend alongside OpenAI API and local-whisper, now set as the default due to superior speaker diarization capabilities (up to 50 speakers). New Features: - AssemblyAI backend with automatic speaker labeling - Backend switching UI via C-; T b (completing-read interface) - Universal speech model supporting 99 languages - API key management through auth-source/authinfo.gpg Implementation: - Created scripts/assemblyai-transcribe (upload → poll → format workflow) - Updated transcription-config.el with multi-backend support - Added cj/--get-assemblyai-api-key for secure credential retrieval - Refactored process environment handling from if to pcase - Added cj/transcription-switch-backend interactive command Testing: - Created test-transcription-config--transcription-script-path.el - 5 unit tests covering all 3 backends (100% passing) - Followed quality-engineer.org guidelines (test pure functions only) - Investigated 18 test failures: documented cleanup in todo.org Files Modified: - modules/transcription-config.el - Multi-backend support and UI - scripts/assemblyai-transcribe - NEW: AssemblyAI integration script - tests/test-transcription-config--transcription-script-path.el - NEW - todo.org - Added test cleanup task (Method 3, priority C) - docs/NOTES.org - Comprehensive session notes added Successfully tested with 33KB and 4.1MB audio files (3s and 9s processing).
* init:doc:correcting comment on video captureCraig Jennings2025-10-311-1/+1
|
* maint:vc install org-msg, disable debugging on org-gcalCraig Jennings2025-10-271-3/+3
|
* refactor: Rename custom-file-buffer to custom-buffer-fileCraig Jennings2025-10-271-3/+4
| | | | | | | | | Renamed the module 'custom-file-buffer' to 'custom-buffer-file' to ensure consistency across the codebase. This change affects module imports and test files. Additionally, new module 'system-commands.el' has been created to handle system power and session management commands, removing these functionalities from 'wip.el'.
* chore:init.el: remove commented import for show-kill-ringCraig Jennings2025-10-271-1/+0
| | | | | Clean up the code by removing an unnecessary commented-out import line for show-kill-ring in the initialization file.
* chore(init): remove test status comments from require statementsCraig Jennings2025-10-271-13/+13
| | | | | Removed comments indicating test status for required modules to clean up and simplify the init.el file.
* feat:browser-config: Integrate browser configuration and add testsCraig Jennings2025-10-271-3/+4
| | | | | | | | | | | | | - Move `browser-config` from 'Modules In Test' to active modules - Refactor browser handling functions for better error handling: - Introduce `cj/--do-apply-browser-choice` and - `cj/--do-choose-browser` Return status symbols for success and - error cases Add comprehensive unit tests in - `tests/test-browser-config.el` Focus on internal `cj/--do-*` - functions and file I/O using temp files Validate return values and - ensure isolated tests with setup/teardown functions Ensure - consistent handling of browser configurations and improve - initialization logic
* feat:jumper: Integrate and enhance 'jumper' module with testsCraig Jennings2025-10-271-1/+1
| | | | | | | | | Enable 'jumper' module by uncommenting its require statement in init.el. Enhance 'jumper' by adding detailed documentation, refactoring logic into internal functions, and updating keybinding setup for better usability. Integrate 'which-key' for improved keybinding assistance. Add comprehensive unit tests for 'jumper' functionalities to ensure reliability.
* feat:text-generation: improve and rename lorem generatorCraig Jennings2025-10-261-1/+1
| | | | | | | | | Rename `lorem-generator.el` to `lorem-optimum.el` for fun. Enhance text tokenization, Markov chain learning, and text generation functions. Introduce new configuration variables for training files and improve efficiency with vectorized access. Add comprehensive benchmarks and unit tests under `tests/`. This improves performance and lays groundwork for further extensions.
* chore: Remove redundant autoload directives from modulesCraig Jennings2025-10-261-1/+1
| | | | | | | Remove unnecessary autoload directives from various functions across multiple modules, cleaning up the codebase and improving readability. These directives were redundant and not needed for the current project setup.
* chore:init.el: update comments and modules loading statusCraig Jennings2025-10-261-15/+14
| | | | | | Refined comments to note completion of module tests. Removed outdated function and disabled a module. Adjusted 'org-roam-config' for test addition.
* chore:init:change marker identifying test progressionCraig Jennings2025-10-261-1/+1
|
* feat:erc: Enable IRC client in dashboard and update keybindingsCraig Jennings2025-10-251-1/+1
| | | | | | | | | | Uncommented ERC client initialization in `init.el`. Replaced "cj/erc-start-or-switch" with "cj/erc-switch-to-buffer-with-completion" in dashboard. Altered keybindings to use "C-; E" instead of "C-c e" for ERC commands. Defined a new keymap "cj/erc-keymap" for better command organization. Removed deprecated `locate-library` checks and `cj/erc-command-map`. Refined code layout for clarity.
* chore:init: Remove obsolete eradio-config require statementCraig Jennings2025-10-251-1/+0
| | | | | The eradio-config dependency has been removed from the init file, potentially because it is no longer needed or has been deprecated.
* feat:browser: Add browser configuration moduleCraig Jennings2025-10-231-1/+1
| | | | | | | Introduce `browser-config.el` to handle browser selection and configuration within Emacs. This module discovers available browsers, allows user selection through `M-x cj/choose-browser`, and persists the choice while supporting all link types.
* chore:init: remove commented-out prog-lsp require lineCraig Jennings2025-10-231-1/+0
| | | | | Clean up init.el by removing the unnecessary commented require statement for prog-lsp.
* style(init.el): Update module requirements and commentsCraig Jennings2025-10-231-14/+13
| | | | | | Reorganize and comment out certain module requirements for clarity. Include comments to indicate test progress and modules in development.
* maint: gptel: fetch_page: needs major work so disabling for nowCraig Jennings2025-10-201-4/+10
|
* add quick video capture to initCraig Jennings2025-10-151-0/+1
|
* maint: remaining custom functions grouped into separate modulesCraig Jennings2025-10-121-1/+8
|
* maint: assemble file and buffer operations into single moduleCraig Jennings2025-10-121-1/+2
|
* feat: mousetrap-mode: move mousetrap-mode from wip into moduleCraig Jennings2025-10-121-0/+1
|
* changing repositoriesCraig Jennings2025-10-121-0/+142