diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-28 14:30:41 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-28 14:30:41 -0500 |
| commit | 08cd3a12730d26cfc2eae8510da132747643da9e (patch) | |
| tree | 8af113923242ec042ceefc8d850ce37dd1a7c7d6 /gloss.el | |
| parent | 4cd1e8e63d885d8de2728dc76d4f35f0eb597037 (diff) | |
| download | gloss-08cd3a12730d26cfc2eae8510da132747643da9e.tar.gz gloss-08cd3a12730d26cfc2eae8510da132747643da9e.zip | |
feat: implement gloss-core data layer
Public API: gloss-core-lookup, gloss-core-save, gloss-core-list, gloss-core-find-buffer-position. Save inserts entries at the alphabetical position (case-insensitive compare), creates the file and parent directory on first call, prompts on collision via completing-read over Replace/Append/Cancel, and updates the in-memory cache directly.
Lookup checks gloss-file's mtime against the cached load time. If disk is newer than the buffer, it reverts the buffer first. Out-of-band edits land on the next read. Parser failures during reload preserve the existing cache and surface a one-line message.
Tested by the 32-test suite from the previous commit. All 32 pass in 0.16 seconds.
The defgroup and defcustoms (gloss-file, gloss-debug) live here rather than in gloss.el. That keeps the data layer self-contained when tests load it directly without the orchestration layer.
Diffstat (limited to 'gloss.el')
| -rw-r--r-- | gloss.el | 19 |
1 files changed, 3 insertions, 16 deletions
@@ -56,22 +56,9 @@ (require 'gloss-display) (require 'gloss-drill) -(defgroup gloss nil - "Personal glossary with online-sourced definitions." - :group 'tools - :prefix "gloss-") - -(defcustom gloss-file - (expand-file-name "gloss.org" (or (bound-and-true-p org-directory) - user-emacs-directory)) - "Path to the glossary org file." - :type 'file - :group 'gloss) - -(defcustom gloss-debug nil - "When non-nil, write diagnostic events to *gloss-debug*." - :type 'boolean - :group 'gloss) +;; The `gloss' defgroup, `gloss-file', and `gloss-debug' defcustoms live in +;; `gloss-core' so they are defined whenever the data layer is required — +;; tests load `gloss-core' directly without pulling in the orchestration here. (defvar gloss-prefix-map (make-sparse-keymap) "Keymap for `gloss' commands. Default prefix: C-h g.") |
