[HN Gopher] Native frame transposition coming to Emacs 31
___________________________________________________________________
Native frame transposition coming to Emacs 31
Author : nanna
Score : 165 points
Date : 2025-04-08 08:10 UTC (2 days ago)
(HTM) web link (p.bauherren.ovh)
(TXT) w3m dump (p.bauherren.ovh)
| signa11 wrote:
| nice ! i typically use windmove.el for all windowing needs within
| Emacs including (but not limited to) moving between windows,
| swapping buffers etc. etc.
| gumbojuice wrote:
| I find myself very rarely using window features of emacs. Am I
| missing out on something? I value mostly screen space dedicated
| to the one thing I am doing.
| signa11 wrote:
| how big is the screen ?
| simiones wrote:
| I for one often split the window in two to have like an API
| definition and the implementation up at the same time, or to
| have a terminal and a script I'm running both visible, or such.
| goosedragons wrote:
| Do you never refer to other files or documentation while
| working? Or use a REPL? Sometimes I even refer to the top and
| bottom of the same file simultaneously.
| lelanthran wrote:
| > I value mostly screen space dedicated to the one thing I am
| doing.
|
| Sure, but that's like ... what? Half the screen in the best
| case scenario?
|
| The other half is whitespace, so it makes sense to see the rest
| of that file in the other half.
| grumbel wrote:
| Not much. A horizontal split (C-x 2) can be quite useful to
| keep the top of a file in view while editing around at the
| bottom of a file. A vertical split (C-x 3) is useful when
| comparing files side by side. But that's about as far as I go,
| beyond that it just becomes annoying, as popups like from magit
| will show up in random subwindows, often rendering them
| unusable, due to that subwindow not being big enough.
| signa11 wrote:
| perhaps i might interest you in display-buffer-alist ?
|
| useful resources:
|
| 1. https://protesilaos.com/codelog/2024-02-08-emacs-window-
| rule...
|
| 2. https://www.masteringemacs.org/article/demystifying-emacs-
| wi...
|
| 3. <this space is for rent>
| skydhash wrote:
| 3. https://karthinks.com/software/emacs-window-management-
| alman...
|
| (Additional useful knowledge)
| kreetx wrote:
| As a counterpoint, I pretty much always split into 2+
| windows. A 2-window setup is a code + terminal setup with
| shortcuts to run commands on the terminal(s). On more complex
| projects there are typically more than one terminal windows.
|
| My org-mode emacs instance for note taking is split into
| quite a few windows: ongoing work task(s), generic "today's
| scratch pad", various topical notes files, etc.
|
| On the posted topic: I don't know whether the transposition
| would be useful for me though - as the layout is set up by
| screen orientation then only a 180 degree turn would make
| sense.
| SoftTalker wrote:
| Seems like this new feature might help with that, if magit
| takes over or creates a new window, you can rotate or flip
| your window arrangement until it's in a usable space (if it
| works like most tiling window managers, which isn't entirely
| clear from TFA).
| federicotdn wrote:
| I only use C-x 1, C-x 2 and C-x 3, seems like that covers 95%
| of my use cases at least.
| kgwgk wrote:
| C-x 0 can also be useful.
| noelwelsh wrote:
| I usually have a vertical split, because it is useful to be
| able to refer to something else (e.g. other code, docs) while I
| work on my main task. I'll often have a pop up with a terminal
| or similar than I can bring up or dismiss with Doom shortcuts.
| That usually lives at the bottom. Occasionally three windows
| side by side is useful.
|
| I cannot imagine using the features discussed in TFA though.
| They don't seem to solve anything for me.
| lukaszkorecki wrote:
| Most of the time I have 4 or 6 buffers visible at once,
| including the REPL and files I'm editing - and that's when I'm
| working on "one thing", having packages like transpose frame or
| ace-window makes this type of workflow much easier
| kmstout wrote:
| For reading anything of length, I like to split horizontally
| into three balanced windows [1], put the buffer in all of them,
| and `M-x follow-mode'. At that point, I get a nice columnar
| display that makes better use of the screen real estate.
|
| If you do this, you can make paging snappier and more
| predictable like so: (setf scroll-preserve-
| screen-position t) (setf next-screen-context-lines 0)
|
| For many of the websites that I use, this arrangement combines
| nicely with eww to make a very screen-efficient browsing
| experience.
|
| ---
|
| [1] That is, three windows of the same size side-by-side.
| warp wrote:
| I almost always have two side-by-side windows (C-x 3), usually
| when I'm writing a function I'll have the function on one side,
| and the other side is where I'm calling the function. So both
| windows change buffer constantly as I navigate a codebase.
| jerf wrote:
| The default setup I've been using for years is to dedicate a
| desktop to emacs, break it into 3 windows horizontally, and
| then each of them fluidly switches between being full-frame in
| its bit and being cut in half. That gives me up to six contexts
| to operate in at once, though it's certainly some sort of code
| smell to need that many for some particular task! But 2, 3, and
| occasional dips into 4 are pretty common, as well as having
| something open for other reasons.
|
| This is also part of why I try to mostly, but not super
| pendantically, maintain the discipline of keeping lines under
| 80ish characters most of the time. Occasional spill is no big
| deal but constant spill gets hard to read in this context.
|
| Partially this is just out of habit of many years, but lately
| it's becoming an actual advantage. My most recent project has
| me diving through multiple codebases, none of them in the same
| language; I've followed some interactions through Perl, Java,
| PHP, and Typescript codebases in quick succession. Both having
| the multiple contexts, that I have years of muscle memory
| using, and not needing to load up separate IDEs for each of
| them has turned out to be really advantageous. Emacs may not be
| the "best" at handling any one language but I don't think
| there's much better at trying to handle all of them
| simultaneously.
| camgunz wrote:
| I do the same thing in Vim, which has turned me into the
| "please wrap to 80 cols" person, which I'm _completely fine
| with_ haha.
| a-french-anon wrote:
| More than two is a bit painful, in my experience, as I don't
| think Emacs has directional focus like the usual X11 WMs (e.g.
| i3, bspwm) and C-o works well with only two.
|
| Magit and sly/SLIME work much better with a second window, I'd
| say.
| jorams wrote:
| > I don't think Emacs has directional focus
|
| It does, but I don't think they have default bindings. The
| commands are windmove-{left,down,up,right}. I've had them
| bound to C-S-{h,j,k,l} for years and it makes moving around
| much more fluid and predictable than C-x o.
| Ataraxic wrote:
| If you need to manage multiple windows in emacs I find ace-
| window perfect.
|
| Pops up a number in the top left of the window and you hit it
| to jump to it. If only two, C-o works as before.
|
| https://github.com/abo-abo/ace-window
|
| I have never used more than like 5 windows and only for a
| short time. I guess it doesn't work past 10 but that's gotta
| be enough for anyone...
| arminiusreturns wrote:
| I tend to use emacs from within screen(s), and use screen for
| the layout, but I think I might need to reconsider when 31
| hits!
| UltraSane wrote:
| I have a 42" 4K TV I'm using as a monitor and need to split it
| into multiple windows to make effective use of it.
| BeetleB wrote:
| Beyond the obvious answer (looking at two files at once, or a
| shell, or compilation buffer, or docs), I have a much simpler
| reason. My monitor is wide enough that if I have only one
| window, then all the text will be on the left end of the
| monitor, which means I'm constantly turning my head to work,
| leading to neck strain.
|
| So even if I'm working on one thing, I do C-x 2 and use the
| right window, because then the beginning of the text is aligned
| to the center of my screen.
|
| Yes, this is because I insist on running Emacs maximized.
| pmontra wrote:
| I keep one window (in the common OS meaning of window) per
| virtual desktop and I usually split it into two horizontal
| buffers. Sometimes I split it in two vertical buffers, for
| comparing lines. Sometimes even in four, two rows and two
| columns per row. I can fit 55 lines into my emacs, plus the
| minibuffer, the status line above the minibuffer and the menu
| and title bar on top so even split in four buffers each of them
| is about the same size of the terminals I grew with. And I'm
| using proportional fonts, that are more readable and space
| efficient.
| SloopJon wrote:
| For a while I used dired-sidebar-show-sidebar and dired-omit-
| mode to give me a list of files in a narrow window on the left.
| I kept messing it up with C-x 1, though.
| agumonkey wrote:
| My most used is winner-mode. It's just undo / redo, doesn't
| provide any new logic, but allows to quickly goes back to the
| layout state before you maximized a buffer. Bound to S-b for
| winner-undo and S-n for winner-redo IIRC.
| geokon wrote:
| I'd love to use more than one window, but they're completely
| unpredictable and really hard to configure the way you want.
| Magit buffers will open in one way, Cider Error buffers open in
| some other way. And the behavior will also change based on your
| frame size... You can sometimes configure them, but only from
| the limited behaviors provided by the package itself. The
| behaviors are different in different packages and there is no
| configuration/coordination in the "runtime"
| funcDropShadow wrote:
| There is a central configuration, see here
| https://news.ycombinator.com/item?id=43642743
| taeric wrote:
| On my large screen, I find that having two windows is often
| quite useful. Sometimes three, but not for long.
|
| Main use cases are: * Look at a "template" file
| as I'm working. * The "occur" window * Really,
| any grep output * Compilation window (This is how I run
| all tests)
|
| I'd love to have it so that "output" is in the other window at
| all times. I haven't really found a way for that to work, too
| well. Especially since often working on websites. The idea
| behind skewer-mode is really enticing to me. I have yet to
| actually make that work, though.
| a_e_k wrote:
| Good list. A few more for me: *
| Implementation/header pairs in C++ * Language REPLs
| (e.g., Python) * Quick calculations in Calc while
| coding * Checking dates on the calendar *
| Magit status * Diff buffers (especially diff-buffer-
| with-file) * Listing neighboring files with dired
| * Notes on a code base/task in an Org mode file
| tptacek wrote:
| Just a comment in solidarity; I came here to ask the same
| question. :)
|
| I think my big problem is: I need a native terminal program,
| and I'm almost always using a terminal for something while I'm
| using Emacs. Which means I can't dedicate a whole screen to
| Emacs.
| skydhash wrote:
| Something to look at:
| https://www.masteringemacs.org/article/replacing-tmux-gnu-
| sc...
| tptacek wrote:
| Oh, I know it can be done. I've tried to become an Eshell
| person, I really have. But I need a native terminal app.
| tom_ wrote:
| Well you could see multiple buffers on screen simultaneously,
| rather than just one? But if you don't want that, then there's
| no point. And anyway, the point of Emacs is that you can do
| what you like, and customize it to work well for you.
| hollerith wrote:
| You are not alone. I've spent a lot of time over the years
| configuring Emacs _not_ to split the frame unless I explicit
| ask for a split with C-x 2 (which I do very rarely). The first
| 6 ways I found to do it stopped working over the 33 years I 've
| been using Emacs, so now I'm on version 7, which consists of
| (setq display-buffer-alist '((".*" (display-buffer-same-
| window)))) plus my own definition of compilation-goto-locus.
|
| If I were a better Emacs citizen, I would lobby the maintainers
| to fix compilation-goto-locus so that it obeys display-buffer-
| alist like every other part of Emacs (that I know about, except
| for the *Completions* buffer, which does not need to be fixed
| IMHO because the *Completions* window reliably deletes itself
| when the user aborts or exits the minibuffer).
| pama wrote:
| I have more than a dozen special commands for splitting to
| multiple n*m windows filled with different types of buffers or
| transposing existing window splits; I occasionally need a split
| into 4x4 or 5x5 or even more windows to quickly/visually find
| the shell that logs something of interest to me. It is not
| neccessary, really, but occasionally helpful. I often switch
| between 1x3, 2x3, 2x4, or 2x2 layouts that it was worth putting
| in the time to organize all these splits and then adding some
| more felt easy and useful. My three different main monitors
| (home/work/laptop) often require different optimal splits and
| depending on the focus mode, fonts, or the presense of a
| browser window I may again need differnet splits. I often find
| it helpful to have follow mode on a 1x3 setup either a single
| document to have focus over a larger context. The main reason
| for all the splits, however, is managing several dozens of
| shells or code files.
| trelane wrote:
| Depends on how you like to code. I have two full screen frames
| on their own monitors with 5 or 6 side-by-side windows, and a
| stack of three vertical split windows on one side.
|
| I like to have the side-by-side windows looking at different
| files (unless I'm in a really long file) and the stack of
| windows have vcs, messages, and sometimes eglot
| smitty1e wrote:
| The joy of this is that emacs doesn't care if you have a desktop
| or if you're headless in a terminal. Which sounds a but morbid.
| eddieh wrote:
| I'm confused, is this operating on Emacs' frames or windows.
|
| ** For those here that are not Emacs users these terms mean the
| opposite of what you're likely used to.
| skydhash wrote:
| For those that don't know. Emacs was there before windows
| managers was the norm (I think), so after splitting the emacs
| view, each part was called a window.
|
| The whole view is called a frame and store the window layout.
| You can create as many frames as you, each with its own layout
| and in terminal mode, they would swap like i3 workspaces. But
| in graphic mode (GUI) they are what we call window today, what
| emacs users refer as windows would be panes.
| tom_ wrote:
| It operates on frames, moving the windows inside them, similar
| to how transposing a matrix moves around the values it
| contains.
| mediumsmart wrote:
| I am on macOS with a split screen browser left and emacs in the
| right half. Max 2 window vertical split in that frame and if
| needed a C-x 5 2 which opens a full screen frame workspace to the
| right for a c-x 3 side by side layout. That's it - all the other
| buffers are backstage partying until they get called.
| globnomulous wrote:
| Kudos to the programmer, who is apparently still in high school:
| https://p.bauherren.ovh/
| Buttons840 wrote:
| We've been seeking proof for years that Emacs still attracts
| new users--finally found one :D
| BeetleB wrote:
| Actually, he's a 40+ year old person. His obsession with
| Emacs is what prevented him from graduating high school all
| these years :-)
| timacles wrote:
| He opened his ~/.emacs file as a Junior in High School.
| Says he'll be ready to close it as soon as he gets this
| particular edit just right
| taeric wrote:
| I mean, this and native compilation. And the new json parser
| that landed. And... (I'm sure I could go on.)
|
| What it doesn't have is a marketing department pushing it.
| But it has plenty of new users. No?
| globnomulous wrote:
| The comment you answered is tongue in cheek, the joke being
| that emacs is for old people.
| taeric wrote:
| :) Always fun to realize you missed an obvious joke.
| dustfinger wrote:
| I'm an old person. I love emacs, no complaints here. Does
| this mean that when you are old, you will love emacs as
| well? Conclusion: in the long run, everyone loves emacs
| :-)
| Buttons840 wrote:
| Joking aside, you're right. It's easy to imagine that Emacs
| has stagnated, but there are regular releases with
| improvements, some of them important fundamental
| improvements like native compilation.
|
| I recently saw a Reddit post in a vim subreddit about using
| AI for coding, the response was "we don't do that here". I
| saw the same thing in the Emacs subreddit, and there's like
| 10 different packages for AI integrations, and, allegedly,
| Emacs is state-of-the-art when it comes to AI interactions
| through the editor (if only the user can configure it
| correctly). It's something I've been meaning to try.
|
| https://www.reddit.com/r/neovim/comments/1js30ep/whats_ever
| y...
| skydhash wrote:
| Vim is an editor with quite a good API for integration
| with other tools and I don't see how you can't build one
| for AI (and you can use python for the integration).
| Emacs will have it much easier as almost everything you
| need has a better interface there.
| terrabiped wrote:
| I'm pretty sure that the answer you quoted was a joke,
| mainly because the topic of AI packages comes up all the
| time on that subreddit and people are starting to make
| fun of the same question that's asked every other day.
|
| Codecompanion (Zed-like experience), Avante (Cursor-like
| experience), and Copilot all exist and integrate well
| with the rest of the neovim ecosystem.
| ilrwbwrkhv wrote:
| > Your local web gangster
|
| > My name is Pranshu, I'm currently an highschool student, on
| the way to become a proffesional freerider. I am ethniclly
| Indian(half Bihari and half Punjabi, for my brown brothers),
| you can find me in Brisbane, Australia, probably bathing in a
| public fountain.
|
| Haha, so lovely. Reminds me of older times when the internet
| was cool and weird.
| sharkjacobs wrote:
| I think this kid has a very promising freeriding career ahead
| of them
| taeric wrote:
| Any chance folks have pointers on how I could do this for the
| windows of my desktop? Running PopOS and would love to setup some
| keyboard macros to setup common window arrangements. I am
| embarrassed that I have basically no idea where to start in doing
| that, though. :( Would I be looking to do a Gnome plugin?
| dfc wrote:
| Sway/i3/etc?
| taeric wrote:
| Do I really have to jump to a new compositor/window manager
| to get this? Seems like I should be able to query the state
| of my desktop without doing that. :(
| yjftsjthsd-h wrote:
| In theory if GNOME exposes enough API surface then sure you
| can write a plugin to do it. I'm rather under the
| impression that GNOME is not particularly friendly to that
| kind of customization work, though. Perhaps it's better
| these days; I haven't paid it as much attention since
| jumping ship. It is entirely possible that it would be less
| overall work to switch to a window manager that
| enthusiastically exposes all the API surface you could ever
| ask for, but don't let that stop you from looking into it.
| taeric wrote:
| :D Completely fair answers!
|
| I don't know why it is so surprising to me that there
| isn't a very easy "list windows and locations" in
| computers. Feels like something that should be as a basic
| building block, but I have never seen it. Assumed I just
| didn't know where to look.
|
| Thanks!
| malicka wrote:
| Oh this makes me quite happy! I've been using an awful hack to do
| horizontal-mirroring (that sometimes borks), I'm so glad to find
| there'll be a better way. Massive props to the author!
| a_e_k wrote:
| Oh, this will be nice. I've had a home-grown (rotate-windows)
| function in my config for a long time. I love it when I can
| shrink my config because core now has an equivalent.
| precompute wrote:
| Neat, I've been using this for a while. Happy to strike off yet
| another package.
| taeric wrote:
| These functions are far more useful than I would have expected
| them to be. Will have to find a way to add them to my muscle
| memory. Curious if there are any obvious keybindings people have
| started using for them?
___________________________________________________________________
(page generated 2025-04-10 23:01 UTC)