unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#48917: 28.0.50; allow user to choose what function is used when windmove create a window
@ 2021-06-08 10:31 pillule
  2021-06-08 11:49 ` Eli Zaretskii
  0 siblings, 1 reply; 8+ messages in thread
From: pillule @ 2021-06-08 10:31 UTC (permalink / raw)
  To: 48917

[-- Attachment #1: Type: text/plain, Size: 1012 bytes --]


Hi,

This is not directly related to bug#48916 but nonetheless derive 
from a same logic of window management.

Actually the user can choose if windmove will create a window when 
it encounter the edges of the frame. I propose to let the user 
eventually provides instead a function that will be triggered in 
that case.

The function will receive as arguments the `dir' and `window' 
bindings of `windmove-do-window-select' so it can adapt its 
behavior accordingly.

The simplest use case I found for this feature is to creates a 
dispatch function that choose from the direction to display eg, a 
dired side window on the left, a shell side window on the top, a 
message side window on the bottom, another thing on the right ; 
and that act as a toggle, eg :

windmove-left : creates a dired side window
windmove-left again : delete the dired side window

From here the function can be tuned again to behave differently in 
different contexts with eg, a local binding or by inspecting the 
WINDOW argument.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: allow user to choose what function is used when windmove create a window --]
[-- Type: text/x-diff, Size: 1877 bytes --]

From cf9007ce6fdba60a1c27b0952833139731c9fe8c Mon Sep 17 00:00:00 2001
From: Trust me I am a doctor <pillule@riseup.net>
Date: Tue, 8 Jun 2021 11:44:54 +0200
Subject: [PATCH] User option to choose a function triggered by windmove-create

* lisp/windmove.el
  (windmove-create-window): add a defcustom choice
  (windmove-do-window-select): trigger custom functions
---
 lisp/windmove.el | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/lisp/windmove.el b/lisp/windmove.el
index f558903681..d648613e10 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -142,11 +142,14 @@ windmove-wrap-around
   :group 'windmove)
 
 (defcustom windmove-create-window nil
-  "Whether movement off the edge of the frame creates a new window.
+  "Whether movement off the edge of the frame creates a new window or
+trigger a custom function.
 If this variable is set to t, moving left from the leftmost window in
 a frame will create a new window on the left, and similarly for the other
 directions."
-  :type 'boolean
+  :type '(choice (const :tag "Don't create new windows" nil)
+          (const :tag "Create new windows" t)
+          (function :tag "Provide a function"))
   :group 'windmove
   :version "27.1")
 
@@ -357,7 +360,9 @@ windmove-do-window-select
                (or (null other-window)
                    (and (window-minibuffer-p other-window)
                         (not (minibuffer-window-active-p other-window)))))
-      (setq other-window (split-window window nil dir)))
+      (setq other-window (if (functionp windmove-create-window)
+                             (funcall windmove-create-window dir window)
+                           (split-window window nil dir))))
     (cond ((null other-window)
            (user-error "No window %s from selected window" dir))
           ((and (window-minibuffer-p other-window)
-- 
2.20.1


[-- Attachment #3: Type: text/plain, Size: 441 bytes --]


The second attachment is a library I am currently working on that 
implement a functional dired side window and its windmove bindings 
in 200 loc, so you can eventually try it and feel what I am 
requesting.
I wrote it for testing purposes for bug#48493 so some of its 
functionalities relies on fixes that are not yet available, and it 
is less about dired in a side window than implementing local 
bindings on couples of buffer/windows.


[-- Attachment #4: moirai early stage --]
[-- Type: application/gzip, Size: 34691 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-06-16  1:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-08 10:31 bug#48917: 28.0.50; allow user to choose what function is used when windmove create a window pillule
2021-06-08 11:49 ` Eli Zaretskii
2021-06-08 14:12   ` pillule
2021-06-12 22:09     ` Juri Linkov
2021-06-15 22:04       ` pillule
2021-06-15 22:20         ` pillule
2021-06-15 23:32         ` Juri Linkov
2021-06-16  1:26           ` pillule

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).