1. 35
  1.  

  2. 9

    The README doesn’t really describe what makes this different from something like screen or tmux, although it implies that it is.

    The website describes what seems to be a difference:

    https://zellij.dev/about/

    With an example of a plug-in. But it doesn’t make it clear what the difference is between running a plug-in and running a “full screen” executable.

    Zellij uses Webassembly and WASI in order to load these panes and give them access to the host machine, so they can be written in any compiled language.

    That’s the only differentiator I can find, and it’s kind of a strange one, since you can already run programs written in any compiled language natively.

    I assume that plug-ins have some control over multiple panes/allow some kind of multi-process coordination that distinguishes them, but this isn’t touted as a feature anywhere. So I’m not sure. Is there a provided UI toolkit that makes it very easy to write terminal UIs, maybe?

    I am happy to see a new terminal multiplexer, but since this project doesn’t bill itself as such, I spent a few minutes trying to understand why that is, assuming I was missing something. But I just came up confused. Declarative pane setup is a nice feature for a terminal multiplexer: although tmux is scriptable imperatively, you need a plug-in if you want the “yaml layout” model. But it’s still a feature for a terminal multiplexer.

    https://github.com/rothgar/awesome-tmux#tools

    If anyone from the project is reading this, a little section on “why it’s more than a multiplexer” or “differences between zellij and tmux/screen” (or whatever) would be very helpful for people encountering the project blind like this.

    1. 4

      That’s the only differentiator I can find, and it’s kind of a strange one, since you can already run programs written in any compiled language natively.

      What “pane access” means is that these programs get access to terminal state like scrollback while other programs are running as usual in the terminal. This can be used to extend the terminal to add features like:

      1. Copy selected terminal text to clipboard as HTML with color codes
      2. Extract all URLs from scrollback, save to clipboard

      It sounds very useful and hacker friendly to me. Kitty has had a similar feature: https://sw.kovidgoyal.net/kitty/kittens/custom.html

      When launching a kitten, kitty will open an overlay window over the current window and optionally pass the contents of the current window/scrollback to the kitten over its STDIN. The kitten can then perform whatever actions it likes, just as a normal terminal program. After execution of the kitten is complete, it has access to the running kitty instance so it can perform arbitrary actions such as closing windows, pasting text, etc.

      The differentiator here is that you can write Zellij plugins in any language that compiles to WASM, while Kittens are python scripts.

      1. 2

        That does sound very useful, but the things you described are also available in tmux and screen. They work by providing commands that output relevant pieces of scrollback or your selection to stdout, so you can compose tmux with standard filters or fzf or something like tmux thumbs (which, despite the name, operates on arbitrary text via stdin). You can do this from within tmux (via keybindings or the :command line), or from outside of a tmux session, by interacting with it as a server (which the tmux executable does by default, if you give it a command).

        This means you can “script” tmux in whatever language you want – rather than having a plugin architecture, it thinks in terms of stdin/stdout, which feels very hacker friendly to me – although I realize this is a personal preference.

        (Actually, I’m lying: as far as I know tmux doesn’t have a way to extract the current selection while preserving color escape codes. If you want to preserve escape codes, I think you have to output entire lines of the scrollback buffer. This would make it very annoying to implement (1) in tmux as a simple series of pipes; you’d either need to patch tmux or write a script that queries the scrollback contents and selection indices and do the slicing yourself. Which would maybe end up looking similar to a zellij plugin?)

        I’m not trying to be a shill for tmux here – I really am happy to see a new terminal multiplexer. The reason I want to dig into it to see what makes it tick is that I’m currently working on my own “terminal workspace” program (which is not quite a multiplexer) and I’m looking for good ideas to steal. :)

      2. 2

        […] what makes this different from something like screen or tmux

        At a superficial layer, having the powerline style cheat “menu” showing shortcuts, and sane shortcut defaults setup out of the box is a big enough difference that a few people at my office have started using zellij regularly where their efforts to get into tmux/screen were tenuous at best.

        1. 1

          Does it support copy/paste yet? I don’t see that in the docs or the code so I’m assuming not.

          1. 1

            I couldn’t say for sure. In my limited testing of it this far, I’ve only used the terminal emulator for copy/paste.

      3. 2

        It would have sold me if it could make my mouse pane aware and limit the selection to them.