summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/org-config.el32
-rw-r--r--tests/test-org-config-keymap-ownership.el55
-rw-r--r--tests/test-org-sort-by-todo-and-priority.el4
3 files changed, 64 insertions, 27 deletions
diff --git a/modules/org-config.el b/modules/org-config.el
index c817f3e0..caac29fd 100644
--- a/modules/org-config.el
+++ b/modules/org-config.el
@@ -276,21 +276,19 @@ with a file, the function will throw an error."
(defun cj/org-clear-element-cache ()
"Clear the org-element cache for the current buffer or all buffers.
-With prefix argument, clear cache for all org buffers. Otherwise, clear only
+By default, clear cache for all org buffers. With prefix argument, clear only
the current buffer's cache. Useful when encountering parsing errors like
'wrong-type-argument stringp nil' during agenda generation."
(interactive)
(if current-prefix-arg
- (progn
- (org-element-cache-reset 'all)
- (message "Cleared org-element cache for all buffers"))
- (if (derived-mode-p 'org-mode)
+ (if (derived-mode-p 'org-mode)
(progn
(org-element-cache-reset)
(message "Cleared org-element cache for current buffer"))
- (user-error "Current buffer is not in org-mode"))))
+ (user-error "Current buffer is not in org-mode"))
+ (org-element-cache-reset 'all)
+ (message "Cleared org-element cache for all buffers")))
-;; Add to org keymap
(keymap-set cj/org-map "c" #'cj/org-clear-element-cache)
;; ----------------------- Org Multi-Level Sorting -----------------------------
@@ -316,28 +314,8 @@ status to preserve priority ordering within TODO groups."
(user-error nil)))
(message "Sorted entries by TODO status and priority"))
-;; ----------------------- Org Element Cache Reset -----------------------------
-
-(defun cj/org-element-cache-reset-all ()
- "Reset the org-element cache in all org-mode buffers."
- (interactive)
- (let ((count 0))
- (dolist (buf (buffer-list))
- (with-current-buffer buf
- (when (derived-mode-p 'org-mode)
- (org-element-cache-reset)
- (cl-incf count))))
- (message "Reset org-element cache in %d buffer%s" count (if (= count 1) "" "s"))))
-
;; ------------------------------ Org Keybindings ------------------------------
-(defvar cj/org-keymap (make-sparse-keymap)
- "Keymap for org commands under C-; O.")
-
-(global-set-key (kbd "C-; O") cj/org-keymap)
-
-(define-key cj/org-keymap (kbd "c") #'cj/org-element-cache-reset-all)
-
;; which-key labels for org keymaps
(with-eval-after-load 'which-key
(which-key-add-key-based-replacements
diff --git a/tests/test-org-config-keymap-ownership.el b/tests/test-org-config-keymap-ownership.el
new file mode 100644
index 00000000..dd7d314d
--- /dev/null
+++ b/tests/test-org-config-keymap-ownership.el
@@ -0,0 +1,55 @@
+;;; test-org-config-keymap-ownership.el --- Tests for Org keymap ownership -*- lexical-binding: t; -*-
+
+;;; Commentary:
+
+;; Ensure org-config owns C-; O through one keymap.
+
+;;; Code:
+
+(require 'ert)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(setq load-prefer-newer t)
+
+(defun org-appear-mode (&optional _arg)
+ "Stub `org-appear-mode' for loading org-config in batch tests.")
+(provide 'org-appear)
+
+(require 'org-config)
+
+(ert-deftest test-org-config-keymap-ownership-normal-org-prefix-uses-org-map ()
+ "C-; O should be mounted through `cj/org-map'."
+ (should (eq (keymap-lookup cj/custom-keymap "O")
+ 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")
+ #'cj/org-clear-element-cache)))
+
+(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)))
+
+(ert-deftest test-org-config-keymap-ownership-normal-clear-cache-defaults-all ()
+ "Cache clear should reset all Org buffers by default."
+ (let ((current-prefix-arg nil)
+ (calls nil))
+ (cl-letf (((symbol-function 'org-element-cache-reset)
+ (lambda (&optional arg) (push arg calls))))
+ (cj/org-clear-element-cache))
+ (should (equal calls '(all)))))
+
+(ert-deftest test-org-config-keymap-ownership-normal-prefix-clears-current-buffer ()
+ "Cache clear should reset only the current Org buffer with a prefix."
+ (let ((current-prefix-arg '(4))
+ (calls nil))
+ (cl-letf (((symbol-function 'org-element-cache-reset)
+ (lambda (&optional arg) (push arg calls))))
+ (with-temp-buffer
+ (setq major-mode 'org-mode)
+ (cj/org-clear-element-cache)))
+ (should (equal calls '(nil)))))
+
+(provide 'test-org-config-keymap-ownership)
+;;; test-org-config-keymap-ownership.el ends here
diff --git a/tests/test-org-sort-by-todo-and-priority.el b/tests/test-org-sort-by-todo-and-priority.el
index cb9ce375..5ad7fccd 100644
--- a/tests/test-org-sort-by-todo-and-priority.el
+++ b/tests/test-org-sort-by-todo-and-priority.el
@@ -20,11 +20,15 @@
(require 'ert)
(require 'org)
+(setq load-prefer-newer t)
;; Stub variables needed by org-config before loading
(defvar cj/custom-keymap (make-sparse-keymap) "Stub keymap for testing.")
(defvar cj/org-map (make-sparse-keymap) "Stub org keymap for testing.")
(defvar org-dir "/tmp/test-org/" "Stub org directory for testing.")
+(defun org-appear-mode (&optional _arg)
+ "Stub `org-appear-mode' for loading org-config in batch tests.")
+(provide 'org-appear)
(require 'org-config) ; Defines cj/org-sort-by-todo-and-priority