branch: elpa/casual
commit 5f929b3c1b0c3bd888e750790a8f24de86058e0a
Merge: c0b2f51f27 098433b48d
Author: Charles Choi <[email protected]>
Commit: GitHub <[email protected]>

    Merge pull request #374 from 
kickingvegas/372-add-ret-to-dismiss-casual-editkit-windows-tmenu
    
    Redesign EditKit Window Management Menu
---
 docs/editkit.org                                   |  16 ++-
 .../images/casual-editkit-rectangle-screenshot.png | Bin 67405 -> 61656 bytes
 .../casual-editkit-window-delete-screenshot.png    | Bin 40653 -> 39746 bytes
 docs/images/casual-editkit-window-screenshot.png   | Bin 75543 -> 69194 bytes
 .../casual-editkit-window-unicode-screenshot.png   | Bin 58958 -> 54638 bytes
 lisp/casual-editkit-constants.el                   |  21 +++-
 lisp/casual-editkit-utils.el                       | 108 ++++++++++++---------
 tests/test-casual-editkit-constants.el             |  33 ++++++-
 tests/test-casual-editkit-utils.el                 |  60 ++++++++++++
 9 files changed, 187 insertions(+), 51 deletions(-)

diff --git a/docs/editkit.org b/docs/editkit.org
index c5335465a5..fd52d55983 100644
--- a/docs/editkit.org
+++ b/docs/editkit.org
@@ -23,8 +23,14 @@ A reference menu (~casual-editkit-main-tmenu~) illustrating 
nearly all the diffe
   (keymap-global-set "C-o" #'casual-editkit-main-tmenu)
 #+end_src
 
-For motivated users desiring a bespoke solution, it is recommended that they 
use Casual EditKit as a library of menus to build their own workflows.
+Also suggested is to globally bind the window and rectangle menus as shown 
below.
 
+#+begin_src elisp :lexical no
+  (keymap-global-set "C-c w" #'casual-editkit-windows-tmenu)
+  (keymap-global-set "C-c r" #'casual-editkit-rectangle-tmenu)
+#+end_src
+
+For motivated users desiring a bespoke solution, it is recommended that they 
use Casual EditKit as a library of menus to build their own workflows.
 
 ** EditKit Usage
 #+CINDEX: EditKit Usage
@@ -71,6 +77,7 @@ Depending on the buffer mode, text can be operated on with 
different granularity
 #+TEXINFO: @subheading Mark›
 #+CINDEX: Mark commands
 #+VINDEX: casual-editkit-mark-tmenu
+
 Text can be marked with different granularity with this menu. Note that 
marking functions (Defun) is only supported for modes derived from ~prog-mode~. 
 
 [[file:images/casual-editkit-mark-screenshot.png]]
@@ -141,6 +148,8 @@ This menu offers all the rectangle commands. It is packaged 
as a sub-menu of ~ca
 
 [[file:images/casual-editkit-rectangle-screenshot.png]]
 
+Users wishing more direct access to this menu can bind 
~casual-editkit-rectangle-tmenu~ as shown in the [[#editkit-install][install 
section]].
+
 
 *** Window management
 #+CINDEX: Window management
@@ -149,6 +158,8 @@ This menu provides support for different Emacs window 
management commands. Note
 
 [[file:images/casual-editkit-window-screenshot.png]]
 
+Note that the section “Transpose” is only available if the package 
[[https://melpa.org/#/transpose-frame][transpose-frame]] is installed.
+
 If the variable ~casual-lib-use-unicode~ is set to ~t~, then Unicode symbols 
are used in the labels.
 
 [[file:images/casual-editkit-window-unicode-screenshot.png]]
@@ -156,7 +167,8 @@ If the variable ~casual-lib-use-unicode~ is set to ~t~, 
then Unicode symbols are
 #+TEXINFO: @subheading Window Deletion
 #+CINDEX: Window deletion
 #+VINDEX: casual-editkit-window-delete-tmenu
-This menu provides support for deleting windows.
+
+This menu provides support for deleting windows. Note the commands apply to 
other windows, not the current one in focus.
 
 [[file:images/casual-editkit-window-delete-screenshot.png]]
 
diff --git a/docs/images/casual-editkit-rectangle-screenshot.png 
b/docs/images/casual-editkit-rectangle-screenshot.png
index 7c0ea7d9de..43b2110210 100644
Binary files a/docs/images/casual-editkit-rectangle-screenshot.png and 
b/docs/images/casual-editkit-rectangle-screenshot.png differ
diff --git a/docs/images/casual-editkit-window-delete-screenshot.png 
b/docs/images/casual-editkit-window-delete-screenshot.png
index df3fed3cbc..ec548ef0b7 100644
Binary files a/docs/images/casual-editkit-window-delete-screenshot.png and 
b/docs/images/casual-editkit-window-delete-screenshot.png differ
diff --git a/docs/images/casual-editkit-window-screenshot.png 
b/docs/images/casual-editkit-window-screenshot.png
index a1ff6c47e8..c121441223 100644
Binary files a/docs/images/casual-editkit-window-screenshot.png and 
b/docs/images/casual-editkit-window-screenshot.png differ
diff --git a/docs/images/casual-editkit-window-unicode-screenshot.png 
b/docs/images/casual-editkit-window-unicode-screenshot.png
index 78cdb68f35..4558d1c85b 100644
Binary files a/docs/images/casual-editkit-window-unicode-screenshot.png and 
b/docs/images/casual-editkit-window-unicode-screenshot.png differ
diff --git a/lisp/casual-editkit-constants.el b/lisp/casual-editkit-constants.el
index eb5a663d4b..84d3272094 100644
--- a/lisp/casual-editkit-constants.el
+++ b/lisp/casual-editkit-constants.el
@@ -33,14 +33,20 @@
     (:point-down . '("↓" "Down"))
     (:point-left . '("←" "Left"))
     (:point-right . '("→" "Right"))
+
+    (:window-above . '("↑" "Above"))
+    (:window-below . '("↓" "Below"))
+    (:window-left . '("←" "To Left"))
+    (:window-right . '("→" "To Right"))
+
     (:other-window . '("»" "Other"))
     (:delete-other-windows . '("❏" "Delete other"))
-    (:split-window-below . '("⇩" "Window below"))
-    (:split-window-horizontally . '("⇨" "Window right"))
+    (:split-window-below . '("━" "Below"))
+    (:split-window-horizontally . '("┃" "Right"))
     (:enlarge . '("+" "Enlarge"))
     (:shrink . '("−" "Shrink"))
-    (:horizontal . '("⦵" "Horizontal"))
-    (:vertical . '("⏀" "Vertical"))
+    (:horizontal . '("↔︎" "Horizontal"))
+    (:vertical . '("↕︎" "Vertical"))
     (:first . '("⤒" "first"))
     (:last . '("⤓" "last"))
     (:swap . '("⇄" "Swap"))
@@ -64,6 +70,13 @@ plain ASCII-range string."
    ("U" "Undo" undo :transient t)
    (casual-lib-quit-all)])
 
+(transient-define-group casual-editkit-navigation-group-with-return
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("U" "Undo" undo :transient t)
+   ("RET" "Dismiss" transient-quit-all)
+   (casual-lib-quit-all)])
+
 ;; Transient cursor navigation group for Casual EditKit menus.
 (transient-define-group casual-editkit-cursor-navigation-group
   ["Cursor"
diff --git a/lisp/casual-editkit-utils.el b/lisp/casual-editkit-utils.el
index adab6e0e1b..62dbc9123f 100644
--- a/lisp/casual-editkit-utils.el
+++ b/lisp/casual-editkit-utils.el
@@ -479,87 +479,108 @@ can be accessed here."
   "Menu for ‘Window’ commands.
 
 Commands pertaining to window management operations can be accessed here."
-  ["Window"
-   ["Navigate"
-    :pad-keys t
+
+  ["Casual Window"
+   :description (lambda () (format "Casual Window: %s" (buffer-name)))
+   :pad-keys t
+   ["Focus"
     ("o" "»" other-window
      :description (lambda () (casual-editkit-unicode-get :other-window))
-     :transient t)
+     :transient t)]
+   [""
     ("p" "↑" windmove-up
      :description (lambda () (casual-editkit-unicode-get :point-up))
-     :transient t)
+     :transient nil)
     ("n" "↓" windmove-down
      :description (lambda () (casual-editkit-unicode-get :point-down))
-     :transient t)
+     :transient nil)]
+   [""
     ("b" "←" windmove-left
      :description (lambda () (casual-editkit-unicode-get :point-left))
-     :transient t)
+     :transient nil)
     ("f" "→" windmove-right
      :description (lambda () (casual-editkit-unicode-get :point-right))
-     :transient t)]
+     :transient nil)]
 
    ["Swap"
-    :pad-keys t
     ("s" "⇄"
      window-swap-states
-     :description (lambda () (casual-editkit-unicode-get :swap)))
+     :transient t
+     :description (lambda () (casual-editkit-unicode-get :swap)))]
+   [""
     ("M-p" "↑" windmove-swap-states-up
-     :description (lambda () (casual-editkit-unicode-get :point-up)))
+     :description (lambda () (casual-editkit-unicode-get :point-up))
+     :transient nil)
     ("M-n" "↓" windmove-swap-states-down
-     :description (lambda () (casual-editkit-unicode-get :point-down)))
+     :description (lambda () (casual-editkit-unicode-get :point-down))
+     :transient nil)]
+   [""
     ("M-b" "←" windmove-swap-states-left
-     :description (lambda () (casual-editkit-unicode-get :point-left)))
+     :description (lambda () (casual-editkit-unicode-get :point-left))
+     :transient nil)
     ("M-f" "→" windmove-swap-states-right
-     :description (lambda () (casual-editkit-unicode-get :point-right)))]
+     :description (lambda () (casual-editkit-unicode-get :point-right))
+     :transient nil)]
 
-   ["New"
-    ("1" "❏" delete-other-windows
-     :description (lambda () (casual-editkit-unicode-get 
:delete-other-windows)))
+   ["Split"
     ("2" "⇩" split-window-below
-     :description (lambda () (casual-editkit-unicode-get :split-window-below)))
+     :description (lambda ()
+                    (casual-editkit-unicode-get :split-window-below)))
+
     ("3" "⇨" split-window-horizontally
-     :description (lambda () (casual-editkit-unicode-get 
:split-window-horizontally)))]
+     :description (lambda ()
+                    (casual-editkit-unicode-get :split-window-horizontally)))]]
 
-   ["Misc"
-    ("t" "Transpose" casual-editkit-transpose-frame
-     :if casual-editkit-package-transpose-frame-installed-p)
-    ;; ("T" "Toggle Tab Bar" mac-toggle-tab-bar
-    ;;  :if casual-editkit-window-system-mac-p)
-    ;;("J" "Jump to Window…" ace-select-window)
-    ("d" "Delete›" casual-editkit-windows-delete-tmenu)]]
-
-  ["Resize"
-   ["↕︎"
+  [["Delete"
+    :pad-keys t
+    ("1" "Other" delete-other-windows)
+    ("DEL" "Delete›" casual-editkit-windows-delete-tmenu)]
+
+   ["Resize ↕︎"
     :description (lambda () (casual-editkit-unicode-get :vertical))
     ("+" "Enlarge" enlarge-window
      :description (lambda () (casual-editkit-unicode-get :enlarge))
      :transient t)
     ("-" "Shrink" shrink-window
      :description (lambda () (casual-editkit-unicode-get :shrink))
-     :transient t)]
-   ["↔︎"
+     :transient t)
+    ]
+
+   ["Resize ↔︎"
     :description (lambda () (casual-editkit-unicode-get :horizontal))
-    (">" "Enlarge" enlarge-window-horizontally
+    ("[" "Enlarge" enlarge-window-horizontally
      :description (lambda () (casual-editkit-unicode-get :enlarge))
      :transient t)
-    ("<" "Shrink" shrink-window-horizontally
+    ("]" "Shrink" shrink-window-horizontally
      :description (lambda () (casual-editkit-unicode-get :shrink))
-     :transient t)]]
+     :transient t)]
 
-  casual-editkit-navigation-group)
+   ["Transpose"
+    :if casual-editkit-package-transpose-frame-installed-p
+    ("t" "Transpose" casual-editkit-transpose-frame)]]
+
+  casual-editkit-navigation-group-with-return)
 
 ;;;###autoload (autoload 'casual-editkit-windows-delete-tmenu 
"casual-editkit-utils" nil t)
 (transient-define-prefix casual-editkit-windows-delete-tmenu ()
-    "Menu for ‘Window Delete’ commands.
+  "Menu for ‘Window Delete’ commands.
 
 Commands pertaining to window deletion operations can be
 accessed here."
   ["Delete Window"
-   ("p" "Above" windmove-delete-up)
-   ("n" "Below" windmove-delete-down)
-   ("b" "On Left" windmove-delete-left)
-   ("f" "On Right" windmove-delete-right)]
-  [(casual-lib-quit-all)])
+   :pad-keys t
+   [("b" "To Left" windmove-delete-left
+     :description (lambda () (casual-editkit-unicode-get :window-left)))]
+
+   [("p" "Above" windmove-delete-up
+     :description (lambda () (casual-editkit-unicode-get :window-above)))
+    ("n" "Below" windmove-delete-down
+     :description (lambda () (casual-editkit-unicode-get :window-below)))]
+
+   [("f" "To Right" windmove-delete-right
+     :description (lambda () (casual-editkit-unicode-get :window-right)))]]
+
+   casual-editkit-navigation-group-with-return)
 
 ;;;###autoload (autoload 'casual-editkit-bookmarks-tmenu 
"casual-editkit-utils" nil t)
 (transient-define-prefix casual-editkit-bookmarks-tmenu ()
@@ -722,10 +743,9 @@ Commands pertaining to rectangle operations can be 
accessed here."
     ("D" "Delete Leading Spaces" delete-whitespace-rectangle
      :if-not casual-editkit-buffer-read-only-p
      :inapt-if-not use-region-p
-     :transient t)
-    ("RET" "Done" transient-quit-all)]]
+     :transient t)]]
   casual-editkit-cursor-navigation-group
-  casual-editkit-navigation-group)
+  casual-editkit-navigation-group-with-return)
 
 ;;;###autoload (autoload 'casual-editkit-transform-text-tmenu 
"casual-editkit-utils" nil t)
 (transient-define-prefix casual-editkit-transform-text-tmenu ()
diff --git a/tests/test-casual-editkit-constants.el 
b/tests/test-casual-editkit-constants.el
index ba4f6f0f36..aacfea5978 100644
--- a/tests/test-casual-editkit-constants.el
+++ b/tests/test-casual-editkit-constants.el
@@ -38,6 +38,22 @@
   (let ((casual-lib-use-unicode nil))
     (casualt-editkit-unicode-assert :previous "previous")
     (casualt-editkit-unicode-assert :next "next")
+    (casualt-editkit-unicode-assert :point-up "Up")
+    (casualt-editkit-unicode-assert :point-down "Down")
+    (casualt-editkit-unicode-assert :point-left "Left")
+    (casualt-editkit-unicode-assert :point-right "Right")
+    (casualt-editkit-unicode-assert :window-above "Above")
+    (casualt-editkit-unicode-assert :window-below "Below")
+    (casualt-editkit-unicode-assert :window-left "To Left")
+    (casualt-editkit-unicode-assert :window-right "To Right")
+    (casualt-editkit-unicode-assert :other-window "Other")
+    (casualt-editkit-unicode-assert :delete-other-windows "Delete other")
+    (casualt-editkit-unicode-assert :split-window-below "Below")
+    (casualt-editkit-unicode-assert :split-window-horizontally "Right")
+    (casualt-editkit-unicode-assert :enlarge "Enlarge")
+    (casualt-editkit-unicode-assert :shrink "Shrink")
+    (casualt-editkit-unicode-assert :horizontal "Horizontal")
+    (casualt-editkit-unicode-assert :vertical "Vertical")
     (casualt-editkit-unicode-assert :first "first")
     (casualt-editkit-unicode-assert :last "last")
     (casualt-editkit-unicode-assert :swap "Swap")
@@ -46,11 +62,26 @@
   (let ((casual-lib-use-unicode t))
     (casualt-editkit-unicode-assert :previous "↑")
     (casualt-editkit-unicode-assert :next "↓")
+    (casualt-editkit-unicode-assert :point-up "↑")
+    (casualt-editkit-unicode-assert :point-down "↓")
+    (casualt-editkit-unicode-assert :point-left "←")
+    (casualt-editkit-unicode-assert :point-right "→")
+    (casualt-editkit-unicode-assert :window-above "↑")
+    (casualt-editkit-unicode-assert :window-below "↓")
+    (casualt-editkit-unicode-assert :window-left "←")
+    (casualt-editkit-unicode-assert :window-right "→")
+    (casualt-editkit-unicode-assert :other-window "»")
+    (casualt-editkit-unicode-assert :delete-other-windows "❏")
+    (casualt-editkit-unicode-assert :split-window-below "━")
+    (casualt-editkit-unicode-assert :split-window-horizontally "┃")
+    (casualt-editkit-unicode-assert :enlarge "+")
+    (casualt-editkit-unicode-assert :shrink "−")
+    (casualt-editkit-unicode-assert :horizontal "↔︎")
+    (casualt-editkit-unicode-assert :vertical "↕︎")
     (casualt-editkit-unicode-assert :first "⤒")
     (casualt-editkit-unicode-assert :last "⤓")
     (casualt-editkit-unicode-assert :swap "⇄")
     (casualt-editkit-unicode-assert :jump "🚀")))
 
-
 (provide 'test-casual-editkit-constants)
 ;;; test-casual-editkit-constants.el ends here
diff --git a/tests/test-casual-editkit-utils.el 
b/tests/test-casual-editkit-utils.el
index c2e9605f66..7472b463b1 100644
--- a/tests/test-casual-editkit-utils.el
+++ b/tests/test-casual-editkit-utils.el
@@ -375,6 +375,66 @@
                                         '(lambda () (random 5000)))))
     (casualt-editkit-breakdown tmpfile)))
 
+
+(ert-deftest test-casual-editkit-windows-tmenu ()
+  (let ()
+    (split-window-horizontally)
+    (split-window-vertically)
+    (cl-letf ((casualt-mock #'other-window)
+              (casualt-mock #'casual-editkit-windows-delete-tmenu)
+              (casualt-mock #'windmove-down)
+              (casualt-mock #'windmove-up)
+              (casualt-mock #'windmove-right)
+              (casualt-mock #'windmove-left)
+              (casualt-mock #'window-swap-states)
+              (casualt-mock #'window-swap-states-left)
+              (casualt-mock #'window-swap-states-right)
+              (casualt-mock #'window-swap-states-up)
+              (casualt-mock #'window-swap-states-down)
+
+              (casualt-mock #'split-window-below)
+              (casualt-mock #'split-window-horizontally)
+              (casualt-mock #'casual-editkit-windows-delete-tmenu)
+              (casualt-mock #'enlarge-window)
+              (casualt-mock #'shrink-window)
+              (casualt-mock #'enlarge-window-horizontally)
+              (casualt-mock #'shrink-window-horizontally)
+              (casualt-mock #'delete-other-windows))
+
+      (let ((test-vectors
+             '((:binding "o" :command other-window)
+               (:binding "n" :command windmove-down)
+               (:binding "p" :command windmove-up)
+               (:binding "f" :command windmove-right)
+               (:binding "b" :command windmove-left)
+               (:binding "s" :command window-swap-states)
+               (:binding "o" :command other-window)
+               ;;(:binding "M-b" :command window-swap-states-left)
+               ;;(:binding "M-f" :command window-swap-states-right)
+               ;;(:binding "M-p" :command window-swap-states-up)
+               ;;(:binding "M-n" :command window-swap-states-down)
+
+               (:binding "2" :command split-window-below)
+               (:binding "3" :command split-window-horizontally)
+               (:binding "DEL" :command casual-editkit-windows-delete-tmenu)
+
+               (:binding "+" :command enlarge-window)
+               (:binding "-" :command shrink-window)
+
+               (:binding "[" :command enlarge-window-horizontally)
+               (:binding "]" :command shrink-window-horizontally)
+
+               (:binding "1" :command delete-other-windows)
+               (:binding "RET" :command transient-quit-all))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-editkit-windows-tmenu
+                                        '(lambda () (random 5000)))))
+
+    (delete-other-windows)
+    ;;(casualt-editkit-breakdown)
+    ))
+
 ;; (ert-deftest test-casual-editkit-windows-tmenu ()
 ;;   (let ((tmpfile "casual-editkit-windows-tmenu.txt"))
 ;;     (casualt-editkit-setup tmpfile)

Reply via email to