My terminal emulator (Konsole) has tabs. It also has tiling features I've never taken the habit to use. It has infinite history and allows me to easily select and copy paste many lines. It has a perfect scrolling behavior: it automatically scrolls, but stops auto scrolling if I scrolled a bit up. I'm used to its keyboard shortcuts to switch tabs. My window manager (KWin) also has tiling-like features when I need to see several terminal sessions at the same time.
I use screen when I need to be able to leave and rejoin later. I almost never need to restore several remote terminal sessions at once, and when I do, I'm happy to just ssh several times.
I feel like my use case is completely covered by the terminal emulator and the WM which are incredibly convenient and efficient. I would expect any layer between this efficient / optimized character display and the programs I run can only add latency. I also quickly feel overwhelmed by a screen full of characters. I think I would miss out on convenience by switching to tmux and it's unclear to me what I would gain.
Happy to be convinced otherwise, though :-)
I tried a few times to see if I could get any advantage using tmux but always revert back to none at all. To me the scrollback that works 'as expected' without having to remember key combos, and also work with the mouse are a key feature!
edit: That is just my personal killer feature, obviously having a terminal setup that is consistent cross platform and great for stream processing is a given.
The one big advantage of a multiplexer that I can think of is you can disconnect and reconnect from a session. Not something I really need but might be useful.
Tmux is more programmable. You can write scripts to automate stuff, for example setting up a layout, etc. with a degree of freedom that is not possible with Konsole.
You are probably fine with your setup, not trying to convince you ;-)
Personally: I just like fancy TUIs. One of the first things I programmed was mIRC scripts, might be because of that.
- a tmux session can be used by multiple people
- with tmux a single command “tmux attach -t someusefulname” restores the layout and all of the commands used, saving a bunch of time and opportunity for error
- tmux has an API, so you can spawn a fully loaded session from scratch with code, rather than by manually doing things or by having a pre-made session (this is soooo underrated, especially if you make it configurable)
Honestly there comes a point where you just redesign the software and have it run in a more automated fashion anyway, but for the odd job that you have to run from time to time it’s very handy to have tmux as a persistent, shareable, configurable scratch space.
Using this you could automatically spawn your ssh connections as nested tmux sessions. Obviously this brings some complications, namely that you need to set different prefix keys (or double press prefix) and any non-prefix hotkeys always get sent to your local session. Personally I just configure remote tmux to have only prefixed keybinds and never make any complicated layouts on remote sessions so that having to press <inner-prefix> + <key> doesn't get annoying.
If they would just add a tty protocol for good scrollback! :-)
I do use GNU Screen on servers for long-lived sessions. Just because it's more familiar than tmux to me. It's great for persistence, but really annoying to have to use key combos to look through and search the scrollback in Screen sessions, so I tend to log all sessions to files and read the real-time logs with `less -R` and `ripgrep` when I need to look back through session history, even though I could use the Screen interface to do it.
In some jobs, I always have multiple tmux terminals running. I was about to claim that I have none running right now, but shamefully I have a Mastodon bot that I never productionized running in a tmux on my server.
If you're exclusively a front-end JS developer, it's hard to see how you'd use tmux at all.
I haven’t seen anything tmux gains me over this setup (though I’m sure to be missing something).
I do use tmux or screen when sshd into a server, though, just to survive disconnects.
because they live in an IDE and don't need a terminal.
The way people are reacting to zellij is how I reacted going from screen to tmux. It was so much easier to understand and quickly get started doing advanced things in, compared to screen.
If I want to run something in background, I just Cmd+number to another window and run it there. Thanks to multiple panes & windows, I can have N things running “in background”, it takes a millisecond to switch to any of them, and I guess if I bother I could even have window tab title reflect the status of the process.
I’ve seen floating windows in Neovim, but I see only one use for them: expanded LSP error messages. Otherwise, I use floaters when they come plugin’s config, but they are more of a nuisance and are tricky to manage without resorting to pointer device.
The benefit is that you can only use one window for every project instead of 2 or more.
What I usually do is have Vim take up the entire window and use floating terminals for background stuff which can be brought in and out of view with a hot key.
The floating terminals are stacked by default, but they can also be arranged side by side if needed.
I won't claim it to be a huge game-changer for productivity, but its definitely a nicer workflow for me.
From what I saw while making my changes, that area of the code has a bunch more possible optimisations, but it's 'good enough' for me at this point so I'm not planning to continue pulling at the thread right now. If you wanted to look yourself, I left the script I used for benchmarking and profiling in https://github.com/zellij-org/zellij/issues/2622#issuecommen...
Frankly i've spent too much time in the past fiddling with complex confs and tools which expect the user to spent days figuring out a conf which work for them. Then if you don't use the tool for 1 month, or simply don't edit the conf for a big while you've forgotten half of it.
Zellij has a conf file, it took me a bit of time to tweak it at first, but i know I can understand it in a pinch. Same thing for actually using it, it's mostly discoverable.
And most importantly, it is very clear that simplicity and predictability are big priorities. It shows everywhere in the project, I totally vouch this approach and tend to do the same thing on my work projects. I know from experience than understanding your user's needs and getting out of your way to make their life easy by not having to think about how the implementation is done is really much harder that just making a tool configurable and extensible...
So, big kudos to you Zellij devs !
I've never quite understood why TUIs on *nix systems seem so downright unfriendly compared to TUIs on ye olde MS-DOS systems. Some of them are excusable, sure. vi predates consumer TUIs, and vim clones it. Emacs at least has a menu bar, even if there's no on-screen indication that F10 activates it.
But tmux was created in 2007. I can think of no reason for it to have such an obtuse UI other than "they're just like that on *nix". Would at be so much to ask to at least by default have a "press C-b ? for help" on screen?
As for prevalence: this very often has to do with the distributions themselves and their ability to accept certain (rust) dependencies.
Otherwise though, I always say Zellij is not competing with tmux. That tool choices should be more equivalent to clothing choices than to choosing a school for your kids. Choose what you like, there should not be religious disagreements here.
Zellij (Arabic: الزليج, romanized: zillīj; also spelled zillij or zellige) is a style of mosaic tilework made from individually hand-chiseled tile pieces.
zellij run --floating -- date
This will open a new floating window with the result of the command (`date` in this case) and pressing enter will run it again. I use it for running tests (make some changes, show floating windows, press enter). Depending on your OS you might already have shell aliases such as zrf (run floating) or zr.Annoyingly, though the example I was reproducing (from an image of a tiling on a wall) had either been squashed in one dimension or the original was asymmetric in an unexpected way. Like an octagon that was 120 mm in one direction and 130 mm in the other.
(Thanks for attending my TED talk lol).
Can someone explain why this is needed and how it's better that of vim's splits tabs and panes?
I personally also like the separation and navigating my Tmux is very fast. To me Vim is the perfect editor but I don't want to use it as windowing or operating system replacement. Obviously I use tabs and windows in Vim but always only regarding the project I am working in. E.g. I use tabs for diffs a lot and reviewing.
I guess the way we operate terminal tabs and splits is just something we get used to once and never change, even if it tooling to do it starts to layer on top of each other :)
Zellij on the other started with the goal to be as user friendly as possible and basic tmux features(such as detach) were implemented very recently. There are too many elements on the screen, and each actions requires you to go into a "mode" which feels like unnecessary overhead after getting used to the way the modifier/prefix approach works in tmux. And I am more then fine with modes(I use neovim and emacs with evil keybindings) but when it comes to terminal multiplexer or window manger I feel a modifier provides less friction.
When its all said and done and tmux is configured I feel I am getting a more fluent experience. Unlike vim and emacs I don't see a lot of distinction between tmux and Zellij and I don't see a many reasons to switch at the moment.
That being said - use whichever software makes you happy. I'm just a stickler for facts. :)
A use case I found is keeping a k9s instance running while working on a jump host. Just jumping to the k9s floating pane on demand is priceless.
I still use screen - I dont really understand the compelling advantage of tmux and its replacements. Maybe better split screen support?
Its not something I have ever felt a compelling need to use.
I really like the concept of quickly hiding and showing a pane, and spawning it for a single command that can be easily repeated with Enter. Quick scrollback editing is great as well. I often do this manually in tmux with copy/paste, or re-running the command with `tee`, which is a bit cumbersome.
One nitpick would be to have an option to minimize or remove the borders around panes. It's nice to have extra metadata around a pane, such as the CWD, but space is precious in terminals, and showing borders around every pane feels wasteful. Maybe this is already possible, I haven't looked at the docs yet. Will definitely give this a try soon.
EDIT: Ah, kudos for the nice roadmap[1]! It seems this might already be planned as part of [2].
I find sandboxed plugins the killer feature.
I trust the Debian maintainers and couple of teams and individuals (including Aram), but there is no way I can remotely build trust for the number of people needed to build a convenient tmux/nvim development environment. I really, really wish neovim would have a sandboxed plugin environment like this.
[Goes without saying that the sandbox is not a replacement for trust and vice versa, but it would be a big step forward. What we are doing right now with plugins in this space is terribly dangerous.]
- Much easer to discover and use features
- The default bindings made vim unbearable so I make tmux-like bindings.
- The default color scheme is not great in light mode
- Session restore is helpful though still has issues to be worked out
Could anyone offer recommendations on "riced" zellij configuations, or just a demo where it shows doing with (say charts of disk usage per folder), watching a movie with mpv + keeping a vim to type on?
What I would still like to see is support for kitty image protocol [1] so I could use e.g. image.nvim [2] which currently works in tmux (which I migrated away from in favor of zellij).
I'd love Zellij with true tmux style keybindings - a single prefix key followed by a non-modified letter.
With zellij, you have to unlock, do your zellij command, then lock again.
In general I notice a lot more resources used for terminal multiplexing, starting with GPU-focused terminal emulators (or even ones using Electron).
Maybe I missed something, I probably could run screen + xterm and barely notice any difference. Almost getting a bit of FOMO here, but have yet to see e.g. a screencast that would make me envious.