From fcdea7f0fcc20b1980ee0ee3fc0ba6159c0cf86e Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 14 May 2026 08:30:47 -0500 Subject: refactor(org-config): flatten table ops directly under the org menu Drop the `T' sub-prefix so table operations sit directly under `C-; O': `O r i' / `O r d' for rows, `O c i' / `O c d' for columns. Move `cj/org-clear-element-cache' from `c' (which now hosts the table-column sub-prefix) to capital `C'. Single-key org commands under this menu live on capitals from here on so the lowercase letters stay free for table sub-prefixes. Drop `cj/org-table-map' entirely -- its bindings now live directly on `cj/org-map'. Three tests in `test-org-config-keymap-ownership.el' updated/added: `C' for clear-cache, plus row and column binding assertions. --- modules/org-config.el | 31 ++++++++++++++----------------- tests/test-org-config-keymap-ownership.el | 22 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/modules/org-config.el b/modules/org-config.el index e13dc59f..8c2dc646 100644 --- a/modules/org-config.el +++ b/modules/org-config.el @@ -126,15 +126,13 @@ :ensure nil ;; use the built-in package :pin manual ;; never upgrade from the version built-into Emacs :init - (defvar-keymap cj/org-table-map - :doc "org table operations.") - (defvar-keymap cj/org-map :doc "General org-mode operations and utilities.") (keymap-set cj/custom-keymap "O" cj/org-map) - ;; Table operations live under the org menu (was at top-level "T", - ;; which collided silently with `cj/transcribe-map'). - (keymap-set cj/org-map "T" cj/org-table-map) + ;; Table operations live directly under the org menu: `r' for row, + ;; `c' for column. Single-key org commands under this prefix use + ;; capitals (e.g. `C' for clear element cache) to leave the + ;; lowercase letters free as table sub-prefixes. :bind ("C-c c" . org-capture) ("C-c a" . org-agenda) @@ -152,7 +150,7 @@ ("" . org-reveal) ("C-c " . widen) ("C-c C-a" . cj/org-appear-toggle)) - (:map cj/org-table-map + (:map cj/org-map ("r i" . org-table-insert-row) ("r d" . org-table-kill-row) ("c i" . org-table-insert-column) @@ -291,7 +289,7 @@ the current buffer's cache. Useful when encountering parsing errors like (org-element-cache-reset 'all) (message "Cleared org-element cache for all buffers"))) -(keymap-set cj/org-map "c" #'cj/org-clear-element-cache) +(keymap-set cj/org-map "C" #'cj/org-clear-element-cache) ;; ----------------------- Org Multi-Level Sorting ----------------------------- @@ -323,15 +321,14 @@ status to preserve priority ordering within TODO groups." (which-key-add-key-based-replacements ;; org general operations "C-; O" "org menu" - "C-; O c" "clear element cache" - ;; org table operations (under the org menu) - "C-; O T" "org table menu" - "C-; O T r" "table row" - "C-; O T r i" "insert row" - "C-; O T r d" "delete row" - "C-; O T c" "table column" - "C-; O T c i" "insert column" - "C-; O T c d" "delete column" + "C-; O C" "clear element cache" + ;; org table operations (live directly under the org menu) + "C-; O r" "table row" + "C-; O r i" "insert row" + "C-; O r d" "delete row" + "C-; O c" "table column" + "C-; O c i" "insert column" + "C-; O c d" "delete column" ;; org global bindings "C-c a" "org agenda" "C-c c" "org capture" diff --git a/tests/test-org-config-keymap-ownership.el b/tests/test-org-config-keymap-ownership.el index dd7d314d..7f08a172 100644 --- a/tests/test-org-config-keymap-ownership.el +++ b/tests/test-org-config-keymap-ownership.el @@ -23,10 +23,28 @@ cj/org-map))) (ert-deftest test-org-config-keymap-ownership-normal-clear-cache-on-org-map () - "The Org prefix should expose one cache-clear command on c." - (should (eq (keymap-lookup cj/org-map "c") + "The Org prefix should expose the cache-clear command on capital C. + +Lowercase `c' is reserved as a sub-prefix for table column operations +(`c i' insert, `c d' delete); the single-key org commands under this +menu use capitals to leave the lowercase letters free as table +sub-prefixes." + (should (eq (keymap-lookup cj/org-map "C") #'cj/org-clear-element-cache))) +(ert-deftest test-org-config-keymap-ownership-table-row-bindings () + "Table row operations live directly under the org menu at `r i' / +`r d', no longer behind a `T' sub-prefix." + (should (eq (keymap-lookup cj/org-map "r i") #'org-table-insert-row)) + (should (eq (keymap-lookup cj/org-map "r d") #'org-table-kill-row))) + +(ert-deftest test-org-config-keymap-ownership-table-column-bindings () + "Table column operations live directly under the org menu at `c i' / +`c d', sharing the `c' prefix that used to host the clear-cache +command (which moved to capital `C')." + (should (eq (keymap-lookup cj/org-map "c i") #'org-table-insert-column)) + (should (eq (keymap-lookup cj/org-map "c d") #'org-table-delete-column))) + (ert-deftest test-org-config-keymap-ownership-regression-no-duplicate-org-keymap () "The old duplicate `cj/org-keymap' binding should not exist." (should-not (boundp 'cj/org-keymap))) -- cgit v1.2.3