summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-11 15:16:56 -0500
committerCraig Jennings <c@cjennings.net>2026-05-11 15:16:56 -0500
commitf837e5f7464932fc49c10a7442dc1a23af61b257 (patch)
tree62a21072c37f44d4daf1657d7d2589177173747c /tests
parentc14d6c8d0f669d694dd765d6f592ce6eb72c50f5 (diff)
downloaddotemacs-f837e5f7464932fc49c10a7442dc1a23af61b257.tar.gz
dotemacs-f837e5f7464932fc49c10a7442dc1a23af61b257.zip
feat(window): resize the split with C-; b <arrow>
`C-; b <left>/<right>/<up>/<down>' moves the active window's divider that way (via `windsize'), then keeps `cj/window-resize-map' active so bare arrows keep nudging until any other key (or `C-g'/`<escape>'). `C-u N C-; b <right>' resizes by N. windsize was on `C-s-<arrow>' (Ctrl+Super), which a tiling WM intercepts, so those keys were useless. I dropped that binding. The package is now `:commands'-deferred, and `windsize-cols'/`windsize-rows' drop to 2 (8/4 overshoots in a held nudge loop). `cj/window-resize-sticky' dispatches on the arrow that triggered it and arms the loop.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-ui-navigation--window-resize.el51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test-ui-navigation--window-resize.el b/tests/test-ui-navigation--window-resize.el
new file mode 100644
index 00000000..3be0313b
--- /dev/null
+++ b/tests/test-ui-navigation--window-resize.el
@@ -0,0 +1,51 @@
+;;; test-ui-navigation--window-resize.el --- Tests for the C-; b <arrow> resize keys -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; `C-; b <left>/<right>/<up>/<down>' moves the active window's divider in the
+;; arrow's direction (via `windsize'), then keeps `cj/window-resize-map' active
+;; so bare arrows keep nudging until any other key. We own the dispatch
+;; (`cj/window-resize-sticky' -- pick the matching `windsize-*' command, run it,
+;; arm the loop) and the keymaps; the resize math is `windsize's job and isn't
+;; tested here.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'ui-navigation)
+
+(ert-deftest test-ui-navigation-window-resize-map-bindings ()
+ "Normal: the sticky-resize map maps the four arrows to the `windsize' commands."
+ (should (eq (keymap-lookup cj/window-resize-map "<left>") #'windsize-left))
+ (should (eq (keymap-lookup cj/window-resize-map "<right>") #'windsize-right))
+ (should (eq (keymap-lookup cj/window-resize-map "<up>") #'windsize-up))
+ (should (eq (keymap-lookup cj/window-resize-map "<down>") #'windsize-down)))
+
+(ert-deftest test-ui-navigation-window-resize-sticky-dispatches-and-arms ()
+ "Normal: `cj/window-resize-sticky' runs the `windsize' command matching the
+arrow key that triggered it, then arms the sticky-repeat map."
+ (dolist (case '((left . windsize-left)
+ (right . windsize-right)
+ (up . windsize-up)
+ (down . windsize-down)))
+ (let ((ran nil)
+ (overriding-terminal-local-map nil)
+ (pre-command-hook nil))
+ (cl-letf (((symbol-function (cdr case))
+ (lambda (&rest _) (interactive) (setq ran t))))
+ (let ((last-command-event (car case)))
+ (cj/window-resize-sticky)))
+ (should ran) ; dispatched to the right command
+ (should overriding-terminal-local-map)))) ; loop armed
+
+(ert-deftest test-ui-navigation-window-resize-bound-under-c-semicolon-b ()
+ "Normal: `C-; b <arrow>' (each direction) reaches the sticky-resize command."
+ (require 'custom-buffer-file)
+ (dolist (arrow '("<left>" "<right>" "<up>" "<down>"))
+ (should (eq (keymap-lookup cj/buffer-and-file-map arrow)
+ #'cj/window-resize-sticky))))
+
+(provide 'test-ui-navigation--window-resize)
+;;; test-ui-navigation--window-resize.el ends here