From: pillule <pillule@riseup.net>
To: Robert Pluim <rpluim@gmail.com>
Cc: pillule <pillule@riseup.net>,
48916@debbugs.gnu.org, Juri Linkov <juri@linkov.net>
Subject: bug#48916: 28.0.50; allow windmove to select windows with the 'no-other-window parameter
Date: Wed, 09 Jun 2021 19:37:15 +0200 [thread overview]
Message-ID: <87mtryj28g.fsf@riseup.net> (raw)
In-Reply-To: <878s3k76pe.fsf@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2210 bytes --]
Robert Pluim <rpluim@gmail.com> writes:
> >> Maybe Magit have a something that I am not aware for this
> >> purpose
> >> ?
>
> Eli> AFAIK, Magit does have such a command, but don't ask me
> what it is...
>
> 'magit-generate-changelog', which you can run from your Magit
> commit
> buffer. It's pretty much the same as C-x 4 A
> (diff-add-change-log-entries-other-window), which you'd run from
> a
> *vc-diff* buffer. The main difference is that C-x 4 A and C-x 4
> a will
> put entries into a ChangeLog file or buffer.
Thanks you for the guidance, I think I would have had difficulties
to find it
myself because it seems dependant of the context (at least the
magit one)
and I couldn't find them directly with eg 'helpfull-function'.
However it don't seems to always works and another annoyance but
it is
another topic.
Very much appreciated.
Juri Linkov <juri@linkov.net> writes:
>>>> +(defcustom windmove-ignore-no-other-window nil
>>>
>>> This name is not the best one. For starters, "ignore-no" is a
>>> kind of
>>> double negation, which makes it harder to understand and
>>> remember.
>>> Can you come up with a better description of what exactly is
>>> ignored
>>> here?
>
>> Yes, i think 'windmove-move-in-all-windows' will be more
>> explicit.
>
> Repeating words "...move-move..." doesn't look nice. Maybe a
> better name
> would be 'windmove-allow-all-windows'.
That is better, indeed, thank you.
>> Because it applies to `windmove-find-other-window', it allows
>> the commands
>> windmove-right, windmove-left, windmove-down, windmove-up to
>> select windows
>> with the no-other-window parameter, but not for the
>> `windmove-display-*'
>> functions. I suppose it is the desired behavior.
>
> You could try using new option in all functions that call
> window-in-direction:
> in windmove-display-in-direction, in
> windmove-delete-in-direction,
> in windmove-swap-states-in-direction.
Done.
I am in terra incognita for theses commands, The opportunity to
add new
keybindings in my configuration is always nice :p
It was really simple and my tests seems to works fine with
'windmove-allow-all-windows' for all functions.
See the patch attached.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: windmove-allow-all-windows --]
[-- Type: text/x-diff, Size: 6690 bytes --]
From f1e8eb238305b4c956fe3dc02edfa96bdbcb67c6 Mon Sep 17 00:00:00 2001
From: Trust me I am a doctor <pillule@riseup.net>
Date: Tue, 8 Jun 2021 11:51:55 +0200
Subject: [PATCH] User option to select 'no-other-window with windmove
* lisp/windmove.el (windmove-wrap-around): Remove superfluous :group
tag.
(windmove-create-window): Remove superfluous :group tag.
(windmove-window-distance-delta): Remove superfluous :group tag.
(windmove-allow-all-windows): Add new user option to allow the
commands of windmove to target windows with the 'no-other-window
parameter.
(windmove-find-other-window): Use windmove-allow-all-windows.
(windmove-display-no-select): Remove superfluous :group tag.
(windmove-display-in-direction): Use windmove-allow-all-windows.
(windmove-delete-in-direction): Use windmove-allow-all-windows.
(windmove-swap-states-in-direction): Use windmove-allow-all-windows.
(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 | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/lisp/windmove.el b/lisp/windmove.el
index f558903681..8ba1242519 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-allow-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")
+
\f
;; 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-allow-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)
@@ -517,7 +522,7 @@ windmove-display-in-direction
((eq dir 'same-window)
(selected-window))
(t (window-in-direction
- dir nil nil
+ dir nil windmove-allow-all-windows
(and arg (prefix-numeric-value arg))
windmove-wrap-around 'nomini)))))
(unless window
@@ -606,8 +611,8 @@ windmove-delete-in-direction
select the window at direction DIR.
When `windmove-wrap-around' is non-nil, takes the window
from the opposite side of the frame."
- (let ((other-window (window-in-direction dir nil nil arg
- windmove-wrap-around 'nomini)))
+ (let ((other-window (window-in-direction dir nil windmove-allow-all-windows
+ arg windmove-wrap-around 'nomini)))
(cond ((null other-window)
(user-error "No window %s from selected window" dir))
(t
@@ -680,8 +685,8 @@ windmove-swap-states-in-direction
"Swap the states of the selected window and the window at direction DIR.
When `windmove-wrap-around' is non-nil, takes the window
from the opposite side of the frame."
- (let ((other-window (window-in-direction dir nil nil nil
- windmove-wrap-around 'nomini)))
+ (let ((other-window (window-in-direction dir nil windmove-allow-all-windows
+ nil windmove-wrap-around 'nomini)))
(cond ((or (null other-window) (window-minibuffer-p other-window))
(user-error "No window %s from selected window" dir))
(t
@@ -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")
\f
(provide 'windmove)
--
2.20.1
[-- Attachment #3: Type: text/plain, Size: 721 bytes --]
As a side note, while reading these commands,
I think 'windmove-display-same-window',
'windmove-display-new-frame',
'windmove-display-new-tab' are not really at they own place in
windmove.
We have already "C-x 4 1" (same-window-prefix) and "C-x 5 5"
(other-frame-prefix) and (other-tab-prefix) --that is not bound to
any
key on my system but would eventually have its place in the "C-x
t" map.
Should we --for these windmove-commands :
1. keep them as they are
2. make aliases and clean-up 'windmove-display-in-direction'
3. delete them and clean-up 'windmove-display-in-direction'
?
Since it becomes to get off the topic with the removal of the
:group tag, I can start another patch "clean-up" if requested.
next prev parent reply other threads:[~2021-06-09 17:37 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-08 10:09 bug#48916: 28.0.50; allow windmove to select windows with the 'no-other-window parameter pillule
2021-06-08 11:44 ` Eli Zaretskii
2021-06-08 13:28 ` pillule
2021-06-08 14:12 ` Eli Zaretskii
2021-06-08 14:48 ` Robert Pluim
2021-06-09 17:37 ` pillule [this message]
2021-06-09 20:13 ` Juri Linkov
2021-06-10 8:58 ` pillule
2021-06-08 13:57 ` pillule
2021-06-08 14:13 ` Eli Zaretskii
2021-06-08 14:26 ` pillule
2021-06-08 16:46 ` Juri Linkov
2021-06-15 19:50 ` pillule
2021-06-15 23:27 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87mtryj28g.fsf@riseup.net \
--to=pillule@riseup.net \
--cc=48916@debbugs.gnu.org \
--cc=juri@linkov.net \
--cc=rpluim@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).