From: martin rudalics <rudalics@gmx.at>
To: pranshu sharma <pranshusharma366@gmail.com>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: Add function to rotate/transpose all windows
Date: Thu, 3 Oct 2024 10:17:31 +0200 [thread overview]
Message-ID: <32650808-7cf9-4288-91b5-c7d78663de8f@gmx.at> (raw)
In-Reply-To: <87ed4xvf60.fsf@gmail.com>
>>> (defun transpose-windows--rearrange (frame-or-window conf norm-size)
>>
>> I'd call this just 'window--transpose'.
>
> done
Not really IIUC.
>> CONF is confusing. Why is it a cons cell in the first place? Wouldn't
>> a simple boolean - t for horizontal and nil for vertical - suffice? If
>> not, please explain why.
>
> You can also have below split and abvoe split, not just nil and t
Aha... So the values are the possible values of the SIDE argument of
'split-window'.
> I already explained the arguments in transpose-windows--rearrange. As
> far as I can tell most other -1 postfix don't explain their arguments eg
> window--resize-reset-1.
Then please say "the arguments are the same as for `window--transpose'".
> btw, what are the plans for the keybindings? imo they should be added
> top level in C-x w map, as there are lots of spots avaiable, and there
> are only 5 total new functions.
Once we have installed it, we'll consult Juri Linkov. He knows more
about keybindings in this area. BTW, you could have a look at the
function 'window-swap-states'. IIUC it should then be rewritten in
terms of the 'flip-windows-...' functions to get rid of window states
and the overlay rigmarole.
> (defun rotate-windows-anticlockwise (&optional frame-or-window)
> "Rotate windows of FRAME-OR-WINDOW anti-clockwise by 90 degrees.
> FRAME-OR-WINDOW must be a live frame or window and defaults to the
> selected frame. If FRAME-OR-WINDOW is a frame, rotate the main window
> of the frame, otherwise rotate FRAME-OR-WINDOW. See
> `rotate-windows-clockwise' for how to rotate windows in the opposite
> direction"
> (interactive `(,(and current-prefix-arg (window-parent))))
Please test what happens if you have a keybinding for this and you hit
that key in the minibuffer window, for example, after typing C-h f.
> (defun flip-windows-horizontally (&optional frame-or-window)
> "Horizontally flip windows of FRAME-OR-WINDOW. When the windows are
> flipped horzontally, the window layout is made to it's reflection from
> the side edge. FRAME-OR-WINDOW must be a live frame or window and
> defaults to the selected frame. If FRAME-OR-WINDOW is a frame, flip from
Still a space missing after the "."
> (defun flip-windows-vertically (&optional frame-or-window)
> "Horizontally flip windows of FRAME-OR-WINDOW. When the windows are
Newline missing after ".".
> flipped vertically, the window layout is made to it's reflection from
> the top edge. FRAME-OR-WINDOW must be a live frame or window and
> defaults to the selected frame. If FRAME-OR-WINDOW is a frame, flip from
Space missing after ".".
> (defun transpose-windows--rearrange (frame-or-window conf do-not-convert-size)
Rename to 'window--transpose' as you claimed above.
> "Rearrange windows of FRAME-OR-WINDOW recursively.
> CONF should be a cons cell: (HORIZONTAL-SPLIT . VERTICAL-SPLIT) where
> HORIZONTAL-SPLIT will be used as the third argument of `split-window'
> when splitting a window that was previously horizontally split, and
> VERTICAL-SPLIT as third argument `split-window' for a window that was
... third argument _of_ ...
> previously vertically split. When is DO-NOT-CONVERT-SIZE non-nil, the
Should become "If DO-NOT-CONVERT-SIZE is non-nil, ..."
> size argument of the window-split is converted from vertical to
> horizontal or vice versa, with the same proportion of the total split."
> (pcase-let ((`(,rwin . ,frame)
> (if (framep frame-or-window)
> (cons (window-main-window frame-or-window) frame-or-window)
> (cons frame-or-window (window-frame frame-or-window)))))
> (if (or (not rwin)
> (zerop (window-child-count rwin)))
Actually
(zerop (window-child-count rwin))
is equivalent to
(window-live-p rwin)
and the latter should be cheaper.
> ;; The relevent size of the window.
I think "respective size" is what you mean.
> ;; By using cdddr, we ignore over window split type, sizes and
Rather "ignore window split type" without the "over".
> ;; the first window (it's implicitly created).
> (nreverse (cdddr subtree))))
> ;; (caaddr subtree) is the first window.
> (unless (windowp (caaddr subtree))
> (window--transpose-1 (caddr subtree) cwin conf do-not-convert-size))))
What I forgot to ask so far: Have you completed copyright assignment
for Emacs? I can't look into this myself.
martin
next prev parent reply other threads:[~2024-10-03 8:17 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-24 13:45 Add function to rotate/transpose all windows pranshu sharma
2024-09-24 13:53 ` Eli Zaretskii
2024-09-25 8:05 ` martin rudalics
2024-09-25 8:34 ` pranshu sharma
2024-09-25 9:31 ` martin rudalics
2024-09-25 10:50 ` pranshu sharma
2024-09-25 13:53 ` martin rudalics
2024-09-25 15:31 ` pranshu sharma
2024-09-26 14:10 ` martin rudalics
2024-09-26 14:22 ` Eli Zaretskii
2024-09-27 17:29 ` martin rudalics
2024-09-28 7:52 ` pranshu sharma
2024-09-28 9:26 ` martin rudalics
2024-09-28 10:53 ` pranshu sharma
2024-09-28 14:48 ` martin rudalics
2024-09-29 7:36 ` pranshu sharma
2024-09-29 8:40 ` martin rudalics
2024-09-29 9:23 ` pranshu sharma
2024-09-29 14:48 ` martin rudalics
2024-09-30 6:29 ` pranshu sharma
2024-09-30 8:57 ` martin rudalics
2024-10-01 9:17 ` pranshu sharma
2024-10-02 9:04 ` martin rudalics
2024-10-03 7:06 ` pranshu sharma
2024-10-03 8:17 ` martin rudalics [this message]
2024-10-03 10:09 ` pranshu sharma
2024-10-03 14:18 ` martin rudalics
2024-10-04 5:50 ` pranshu sharma
2024-10-04 8:08 ` martin rudalics
2024-10-04 15:10 ` pranshu sharma
2024-10-05 14:43 ` martin rudalics
2024-10-06 2:54 ` pranshu sharma
2024-10-06 15:02 ` martin rudalics
2024-10-06 15:52 ` pranshu sharma
2024-10-07 8:33 ` martin rudalics
2024-10-07 9:42 ` pranshu sharma
2024-10-03 15:12 ` Eli Zaretskii
2024-10-08 18:35 ` Juri Linkov
2024-10-09 6:59 ` pranshu sharma
2024-10-09 16:21 ` Juri Linkov
2024-10-10 11:49 ` pranshu sharma
2024-10-10 16:57 ` Juri Linkov
2024-10-13 5:43 ` pranshu sharma
2024-10-13 8:17 ` martin rudalics
2024-10-14 17:36 ` Juri Linkov
2024-10-15 8:34 ` pranshu sharma
2024-10-15 16:16 ` Juri Linkov
2024-10-18 14:52 ` pranshu sharma
2024-10-18 17:48 ` martin rudalics
2024-10-18 18:37 ` Eli Zaretskii
2024-10-19 1:45 ` pranshu sharma
2024-10-19 6:45 ` Eli Zaretskii
2024-10-19 18:19 ` Juri Linkov
2024-10-19 8:33 ` martin rudalics
2024-10-20 8:19 ` martin rudalics
2024-10-20 14:11 ` Pranshu Sharma
2024-10-20 17:37 ` martin rudalics
2024-10-21 5:54 ` Pranshu Sharma
2024-10-21 8:14 ` martin rudalics
2024-10-21 9:23 ` martin rudalics
2024-10-21 13:37 ` Pranshu Sharma
2024-10-22 18:12 ` martin rudalics
2024-10-24 14:38 ` Pranshu Sharma
2024-10-24 18:39 ` martin rudalics
2024-10-25 14:24 ` Pranshu Sharma
2024-10-25 17:09 ` martin rudalics
2024-10-26 9:14 ` Pranshu Sharma
2024-10-27 8:23 ` martin rudalics
2024-11-02 14:06 ` Pranshu Sharma
2024-11-05 18:01 ` martin rudalics
2024-11-08 9:23 ` Pranshu Sharma
2024-11-08 10:06 ` Pranshu Sharma
2024-11-08 15:52 ` martin rudalics
2024-11-09 2:14 ` Pranshu Sharma
2024-11-09 8:48 ` martin rudalics
2024-11-08 15:52 ` martin rudalics
2024-11-09 2:09 ` Pranshu Sharma
2024-11-09 8:48 ` martin rudalics
2024-11-09 10:55 ` Pranshu Sharma
2024-11-09 18:06 ` martin rudalics
2024-11-10 10:09 ` Pranshu Sharma
2024-11-10 16:36 ` martin rudalics
2024-11-11 14:47 ` Pranshu Sharma
2024-11-11 16:55 ` martin rudalics
2024-11-12 13:50 ` Pranshu Sharma
2024-11-12 17:46 ` martin rudalics
2024-11-16 13:36 ` Pranshu Sharma
2024-11-16 16:54 ` martin rudalics
2024-11-17 2:45 ` Pranshu Sharma
2024-11-17 10:22 ` martin rudalics
2024-11-17 15:03 ` Pranshu Sharma
2024-11-17 16:38 ` martin rudalics
2024-11-18 0:37 ` Pranshu Sharma
2024-11-18 8:55 ` martin rudalics
2024-10-14 17:32 ` Juri Linkov
2024-09-28 7:58 ` pranshu sharma
2024-09-28 8:18 ` Eli Zaretskii
2024-09-28 9:40 ` martin rudalics
2024-09-28 11:35 ` Eli Zaretskii
2024-09-28 14:58 ` martin rudalics
2024-09-28 15:28 ` Eli Zaretskii
2024-10-07 8:33 ` martin rudalics
2024-09-28 13:22 ` pranshu sharma
2024-09-28 14:21 ` Eli Zaretskii
2024-09-28 14:49 ` martin rudalics
2024-09-27 10:06 ` pranshu sharma
2024-09-27 17:29 ` martin rudalics
2024-09-24 17:40 ` Petteri Hintsanen
2024-09-24 19:34 ` Charles Choi
2024-09-25 2:00 ` Emanuel Berg
2024-09-25 7:00 ` pranshu sharma
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=32650808-7cf9-4288-91b5-c7d78663de8f@gmx.at \
--to=rudalics@gmx.at \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=pranshusharma366@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).