5 ms·
The Emacs Window Management Almanac
- mark_l_watson 2y agoThat is a good exploration. I am on a mobile device right now but I can’t wait to try: ace-window and ace-window-display-mode frames-only-mode I admit my guilt: in about 40 years of using Emacs I mostly have always just used next-window, creating new windows under or next to, and when working on remote servers relying on tmux.
- cmrdporcupine 2y agoI'm the same, 30 years & C-x 1/2/3 C-x o, and that's about the extent of it. But tbh it's actually pretty powerful and sufficient for my purposes and I wish the various tiling window managers were just that.
- celrod 2y agoEXWM is ;). I used it for about a year, but ultimately found the performance, and in particular a low language server locking up the window manager, unacceptable.
- smartmic 2y agoI just switched to exwm and I'm curious if the article will teach me some tricks which might be useful there. My initial experience is good but it is still a bit rough around the edges. In other words, I have not yet found my best configuration and workflows.
- nextos 2y agoStumpWM uses Common Lisp, and can be setup to be nearly identical to Emacs window management. It is also quite performant. Out of the box, its configuration is pretty nice already.
- cmrdporcupine 2y agoBut is there a reasonable way to handle emacs buffers inside stumpwm?
- nextos 2y agoYes, absolutely. There are several StumpWM modules providing integration with Emacs. You can also roll your own functions.
- sbrother 2y agoI’ve also been doing exactly that for 20 years and will probably do it for 20 more years :) it works everywhere and is perfectly adequate and flexible!
- alakra 2y agoYes. Same for me as well. It just works and is easy for my fingers to remember without consciously thinking about it.
- wegwerff 2y agoSimilarly. I do have (global-set-key (kbd "M-o") #'other-window) since C-x o is a bit much, but I don't feel any need for all these extra packages. But it's nice to have such an in-depth reference, Karthik's articles are always very educational and interesting.
- trocado 2y agoI use the <apps> key, usually I hit it with the base of my right hand.
- bloopernova 2y agoThis article is very in-depth and I really like that the author took the time to draw good diagrams.
- chungus 2y agonice writeup, I'd like to share a great complementary package that has been indispensable for me: zygospore "zygospore lets you revert C-x 1 (delete-other-window) by pressing C-x 1 again" https://github.com/LouisKottmann/zygospore.el https://github.com/LouisKottmann/zygospore.el
- ParetoOptimal 2y agoYou might want to investigate winner mode for redoing and undoing all window configuration changes: https://www.emacswiki.org/emacs/WinnerMode https://www.emacswiki.org/emacs/WinnerMode
- gumby 2y agoIdeally, ahouldn’t it be undo? I suppose that would be weird, but c-u c-x 1 would be consistent.
- syene 2y ago> … c-u c-x 1 would be consistent. It seems like a Vim or a Kakoune thing to get stuck up attaching strict logic to the “command language”. Lisps have a concept of do-what-I-mean (DWIM)—the computer anticipates what the user intends to do, overlooking trivial errors.† There’s some subjectivity involved in making commands do-what-[you]-mean, but what’s the point of ‘C-x 1’-ing after we’ve just ‘C-x 1’-ed anyway? None. So why not make that into a convenient way to undo the previous ‘C-x 1’? The ‘undo’ command only acts on changes in buffers, and there’s always winner-mode and its undo, but as a zygospore user—it seems very natural from the get go. I repeat the ‘C-x 1’ if I press it accidentally, and more often I find myself temporarily magnifying a buffer to take up the whole screen to do some focussed editing, which I can come out of with another ‘C-x 1’ (as long as I don’t change the window configuration further). †: from https://en.wikipedia.org/wiki/DWIM https://en.wikipedia.org/wiki/DWIM
- gumby 2y agoAs far as Lisps go, Teitelman implemented DWIM just for Interlisp (annoyingly it was the macro expansion engine so you couldn’t disable it). MACLISP and its derivatives never had that misfeature. Of course the general concept was taken up elsewhere as well and is used to excellent (and terrible — I’m looking at you, Apple spelling autocorrect) effect. That Wikipedia article you cited is weird. Even the example cited, the file reference DWIM, is a rather degenerate case that has nothing to do with lisp itself. Certainly DWIM doesn’t operate on the execution of emacs lisp, despite the article’s hand-wavy attempt to imply so.
- hollerith 2y agoI configure my Emacs to avoid splitting the frame into multiple windows -- similar to how a web browser never splits the browser window into multiple viewports. (Also my Emacs never makes a second frame.) (The way I achieve that has changed over the years because the old way stops working.) The way I do it now, the frame does split in some situations (e.g., when Emacs shows me a *Completions* buffer) but AFAICR I never need to manually invoke the delete-window command to get rid of the second window: it always goes away by itself.
- eviks 2y ago> similar to how a web browser never splits the browser window into multiple viewports. Unless you have a browsers that does exactly that (e.g., Vivaldi), allowing you to view multiple pages at once!
- BenFeldman1930 2y agoI use a Brave extension that opens always a new window. Window management is then left to my WM, XMonad.
- eviks 2y agoWouldn't you lose tab hibernation? Also with dozens of tabs does this not pollute the WM?
- dctoedt 2y ago> I configure my Emacs to avoid splitting the frame into multiple windows Is that to address a particular problem? I use multi-window frames a fair amount. (Latest Mac OS, latest Emacs.) I've noticed that sometimes a multi-window frame will seemingly freeze up and be unresponsive to the keyboard or trackpad, including multiple Ctrl-G commands. But then C-x 5 2 will work to create a new frame. And I can go back to the frozen frame and C-x 5 0 to kill that frame.
- hollerith 2y ago
- ww520 2y agoNice article. Good explanation and good guidelines. Sometimes the evenly split windows don't cut it. I put the following function in the init.el file and bind "C-x 7" to it to adjust the current window and its peer to 70% and 30% sizes vertically. Same for horizontally with a "C-x 8" key binding. (defun partial-size-window () "Set the two split windows to 70% and 30% vertically." (interactive) (let ((size (- (truncate (* .70 (frame-height))) (window-height)))) (if (> size 0) (enlarge-window size)))) (defun partial-size-window-h () "Set the two split windows to 70% and 30% horizontally." (interactive) (let ((size (- (truncate (* .70 (frame-width))) (window-width)))) (if (> size 0) (enlarge-window-horizontally size))))
- jackcviers3 2y agogolden-ratio works for this as well.
- medstrom 2y agoyup, unlike the name implies, it does not only do the golden ratio (1.618:1) Though now I also found https://git.sr.ht/~wklew/golden https://git.sr.ht/~wklew/golden
- emporas 2y agogolden-ratio is very convenient. I also split the frame to two windows at most, and most of the times i focus on one window, and the other window takes just 25% of the screen space. What i have not found a solution yet, is when one window is expanded to 75% of space, then it collapses to 25%, the notes i wanted to focus on get moved up or down. After some trial and error i put my cursor somewhere downward not far from the text i want to be displayed, and most of the time it gets displayed after collapsing the space. I have yet to figure out how to select a region, and golden ratio keep that in display after rebalancing.
- BaculumMeumEst 2y agoI think zoom-mode is the more recommended package for this functionality nowadays, but I will defer to someone who knows more. I just know golden-ratio was a little jank when I tried it recently, but zoom works well.
- mcguire 2y agoIn case the author sees this, I enjoyed the nod to the Acme editor.
- ashton314 2y agoSomething I’d like to add to Karthink’s notes on `windmove-mode`: you can set `windmove-default-keybindings` to move through windows with Ctrl-<arrow keys> (windmove-default-keybindings 'control) I have this in my config (as well as in my minimalist (really minimalist) starter kit [1]) and it’s a game-changer! [1]: https://codeberg.org/ashton314/emacs-bedrock https://codeberg.org/ashton314/emacs-bedrock
- roboben 2y agoJust checked my .emacs and I am doing exactly the same. I prefer over C-x O since it is one key less to press and more flexible.
- thy77 2y agoHi. I want to call hledger-balance-sheet and have it open to the right at 30% and leave my .hledger.journal open on the left,and selected, instead of replacing it.