Subject: Re: bug#48916: 28.0.50; allow windmove to select windows with the 'no-other-window parameter

From: pillule <[email-masked]>
Date: Tue, 08 Jun 2021 16:26:51 +0200

Eli Zaretskii <[email-masked]> writes:

>> got them. the last one may be a little bit confusing for the
>> reader that is not aware of it because all others defcustoms of
>> window.el applies a :group tag. Do you want that I remove the
>> others unnecessary ones ?
>
> Fine with me if you remove them.
>
> (The patch you sent was the old one, right?)
>> [...]
>
> If that's the case, I suggest to send the patch as an 
> attachment.

My bad the bug was me ;)

>From dff7eedd24f5ff85b075b3616fca6c0fa090ff90 Mon Sep 17 00:00:00 2001
From: Trust me I am a doctor <[email-masked]>
Date: Tue, 8 Jun 2021 11:51:55 +0200
Subject: [PATCH] User option to select 'no-other-window with windmove

* lisp/windmove.el (windmove-ignore-no-other-window): Add new user
option, remove superfluous :group tag.
(windmove-find-other-window): Use windmove-ignore-no-other-window
to choose whether windmove can access to the window with the
'no-other-window property.
(windmove-wrap-around): Remove superfluous :group tag.
(windmove-create-window): Remove superfluous :group tag.
(windmove-window-distance-delta): Remove superfluous :group tag.
(windmove-display-no-select): Remove superfluous :group tag.
(windmove-default-keybindings): Remove superfluous :group tag.
(windmove-display-default-keybindings): Remove superfluous :group tag.
(windmove-delete-default-keybindings): Remove superfluous :group tag.
(windmove-swap-states-default-keybindings): Remove superfluous :group tag.
---
 lisp/windmove.el | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/lisp/windmove.el b/lisp/windmove.el
index f558903681..b883824413 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -138,8 +138,7 @@ windmove-wrap-around
 a frame will find the rightmost one, and similarly for the other
 directions.  The minibuffer is skipped over in up/down movements if it
 is inactive."
-  :type 'boolean
-  :group 'windmove)
+  :type 'boolean)
 
 (defcustom windmove-create-window nil
   "Whether movement off the edge of the frame creates a new window.
@@ -147,7 +146,6 @@ windmove-create-window
 a frame will create a new window on the left, and similarly for the other
 directions."
   :type 'boolean
-  :group 'windmove
   :version "27.1")
 
 ;; If your Emacs sometimes places an empty column between two adjacent
@@ -157,11 +155,18 @@ windmove-window-distance-delta
 Measured in characters either horizontally or vertically; setting this
 to a value larger than 1 may be useful in getting around window-
 placement bugs in old versions of Emacs."
-  :type 'number
-  :group 'windmove)
+  :type 'number)
 (make-obsolete-variable 'windmove-window-distance-delta
                         "no longer used." "27.1")
 
+(defcustom windmove-move-in-all-windows nil
+  "Whether the windmove commands are allowed to target all type of windows.
+If this variable is set to non-nil, `windmove-find-other-window--side' and
+subsequently all interactive windmove commands will ignore the
+no-other-window parameter applied with `display-buffer-alist'."
+  :type 'boolean
+  :version "28.0.50")
+
 
 ;; Note:
 ;;
@@ -342,7 +347,8 @@ windmove-find-other-window
 Optional ARG, if negative, means to use the right or bottom edge of
 WINDOW as reference position, instead of `window-point'; if positive,
 use the left or top edge of WINDOW as reference point."
-  (window-in-direction dir window nil arg windmove-wrap-around t))
+  (window-in-direction dir window windmove-move-in-all-windows
+                       arg windmove-wrap-around t))
 
 ;; Selects the window that's hopefully at the location returned by
 ;; `windmove-find-other-window', or screams if there's no window there.
@@ -480,7 +486,6 @@ windmove-default-keybindings
 (defcustom windmove-display-no-select nil
   "Whether the window should be selected after displaying the buffer in it."
   :type 'boolean
-  :group 'windmove
   :version "27.1")
 
 (defun windmove-display-in-direction (dir &optional arg)
@@ -761,8 +766,7 @@ windmove-default-keybindings
           (null val))
          (set-default sym val))
   :type windmove--default-keybindings-type
-  :version "28.1"
-  :group 'windmove)
+  :version "28.1")
 
 (defcustom windmove-display-default-keybindings nil
   "Default keybindings for windmove directional buffer display commands.
@@ -780,8 +784,7 @@ windmove-display-default-keybindings
           (null val))
          (set-default sym val))
   :type windmove--default-keybindings-type
-  :version "28.1"
-  :group 'windmove)
+  :version "28.1")
 
 (defcustom windmove-delete-default-keybindings nil
   "Default keybindings for windmove directional window deletion commands.
@@ -796,8 +799,7 @@ windmove-delete-default-keybindings
           (null val))
          (set-default sym val))
   :type windmove--default-keybindings-type
-  :version "28.1"
-  :group 'windmove)
+  :version "28.1")
 
 (defcustom windmove-swap-states-default-keybindings nil
   "Default keybindings for windmove's directional window swap-state commands.
@@ -812,8 +814,7 @@ windmove-swap-states-default-keybindings
           (null val))
          (set-default sym val))
   :type windmove--default-keybindings-type
-  :version "28.1"
-  :group 'windmove)
+  :version "28.1")
 
 
 (provide 'windmove)
-- 
2.20.1

--