aboutsummaryrefslogtreecommitdiff
path: root/modules/org-drill-config.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-29 08:42:10 -0400
committerCraig Jennings <c@cjennings.net>2026-06-29 08:42:10 -0400
commit4d64437433ed221a08a5258243c01e3a05980db9 (patch)
tree5fe8b4ebe02310d33890545bc020b2c163141d40 /modules/org-drill-config.el
parent2cec4136bcef7d984ecbafe95ad5280d7fa463f0 (diff)
downloaddotemacs-4d64437433ed221a08a5258243c01e3a05980db9.tar.gz
dotemacs-4d64437433ed221a08a5258243c01e3a05980db9.zip
feat(completion): annotate the file-basename pickers with size and date
Eight completing-read pickers listed bare file basenames, so marginalia had no directory to resolve and couldn't annotate them. Add cj/completion-file-annotator to system-lib — an annotation-function factory that takes a candidate->path resolver and yields a size + modification-date suffix (or "dir" for directories, nil for missing files). Wire each picker through cj/completion-table-annotated with a per-site category and resolver: timer sounds, drill flashcards, Info files, the test-runner focus add/remove, vc clone dirs, hugo drafts, and agenda projects (the project's todo.org mtime). music-config's existing completion table gains the category and annotator inline, keeping its sort metadata. The candidate strings and every return value are unchanged — this only adds completion metadata — so all downstream logic is untouched. The six modules that didn't already pull in system-lib now require it. Tests: cj/completion-file-annotator gets Normal/Boundary/Error coverage (file, directory, nil path, missing file). Full suite green at 5394. Claude-Session: https://claude.ai/code/session_014fyKMTTqLrZpL3rDF3dYc3
Diffstat (limited to 'modules/org-drill-config.el')
-rw-r--r--modules/org-drill-config.el11
1 files changed, 9 insertions, 2 deletions
diff --git a/modules/org-drill-config.el b/modules/org-drill-config.el
index 2c6e400e0..29f6130a2 100644
--- a/modules/org-drill-config.el
+++ b/modules/org-drill-config.el
@@ -8,7 +8,7 @@
;; Eager reason: none; optional flashcard workflow, a command-loaded deferral
;; candidate for Phase 4.
;; Top-level side effects: defines a drill keymap, registers it under cj/custom-keymap.
-;; Runtime requires: user-constants, keybindings.
+;; Runtime requires: user-constants, keybindings, system-lib.
;; Direct test load: yes (requires keybindings explicitly).
;;
;; Notes: Org-Drill
@@ -29,6 +29,7 @@
(require 'user-constants) ;; `drill-dir'
(require 'keybindings) ;; provides `cj/custom-keymap'
+(require 'system-lib) ;; completion table + file annotator
(declare-function org-drill "org-drill" (&optional scope drill-match resume-p))
(declare-function org-drill-resume "org-drill" ())
(declare-function org-capture "org-capture" (&optional goto keys))
@@ -57,7 +58,13 @@ drill commands and the drill capture templates share."
(defun cj/--drill-pick-file (dir)
"Prompt for one of the drill Org files in DIR; return its absolute path."
(expand-file-name
- (completing-read "Choose flashcard file: " (cj/--drill-files-or-error dir) nil t)
+ (completing-read "Choose flashcard file: "
+ (cj/completion-table-annotated
+ 'cj-drill-file
+ (cj/completion-file-annotator
+ (lambda (c) (expand-file-name c dir)))
+ (cj/--drill-files-or-error dir))
+ nil t)
dir))
(defun cj/--drill-pick-dir (other-dir)