Quick question: How do I specify the number of characters in a split window? C-x-3 Splits my window into two windows evenly, but a subsequent split will split one of the windows in half. I'd like 3 equal sized windows. The documentation says that I should be able to specify the number of characters for the left buffer as a parameter, but I cant seem to get that to work. Any ideas for syntax?
Thanks.
C-x 3
twice followed by C-x +
to equally size all windows.
To specify the number of characters in the split window, do:
C-u number-of-characters C-x 3
C-x +
to make em evenly spaced
I have the following in my .emacs
:
(defadvice split-window-horizontally (after rebalance-windows activate)
(balance-windows))
(ad-activate 'split-window-horizontally)
this makes emacs call rebalance-windows
(which is what C-x +
is bound to by default) after every resize. It's not what I want all the time, but I want it much more often than the default behavior.
(ad-activate ...)
since you included activate
in a separate form.
(defadvice split-window-right (after rebalance-windows activate) (balance-windows))
add in .emacs
. I mapped to C-x 4, but anyone has a better idea?
(defun split-3-windows-horizontally-evenly ()
(interactive)
(command-execute 'split-window-horizontally)
(command-execute 'split-window-horizontally)
(command-execute 'balance-windows)
)
(global-set-key (kbd "C-x 4") 'split-3-windows-horizontally-evenly)
C-x 4
. That's the default prefix for a heap of other commands. See C-x 4 C-h
(without setting your binding, obviously).
(defun wenshan-split-window-vertical (&optional wenshan-number)
"Split the current window into `wenshan-number' windows"
(interactive "P")
(setq wenshan-number (if wenshan-number
(prefix-numeric-value wenshan-number)
2))
(while (> wenshan-number 1)
(split-window-right)
(setq wenshan-number (- wenshan-number 1)))
(balance-windows))
This function can be used to split the current window into N windows, you can type "C-u 3 M-x wenshan-split-window-vertical" to achieve what you want.
If you use evil do C-x 3
and then C-w =
I liked @quodlibetor's solution, but it didn't work as written. This works for me (emacs 24.5)
(advice-add 'split-window-right :after #'balance-windows)
One of the problems with many of the answers that use balance-windows
here is that they may not allow the window to split due to window-min-width
or split-width-threshold
even if everything would be fine after rebalancing. For example, I don't want windows less than 100 characters wide, but if I split my screen once I get two windows that are 160 characters wide and can't split again without resizing one of the windows. I haven't figured out how to determine whether a split is good yet, so I'll probably just dynamically bind those values to 0 while splitting, and maybe do a window-configuration-to-register
beforehand just in case so that I can recover the old layout when things go wrong.
Here is my solution, hope it helps:
(defun split-vertical-evenly ()
(interactive)
(command-execute 'split-window-vertically)
(command-execute 'balance-windows))
(global-set-key (kbd "C-x 2") 'split-vertical-evenly)
(defun split-horizontal-evenly ()
(interactive)
(command-execute 'split-window-horizontally)
(command-execute 'balance-windows))
(global-set-key (kbd "C-x 3") 'split-horizontal-evenly)
Success story sharing
C-x 3 C-x 3 C-x +
?C-x 2 C-x +
for horizontal splitting (good for vertical monitor)