github Gaurav-Gosain/tuios v0.8.5

4 hours ago

tuios 0.8.5 makes tiling more configurable and lets herdr plugins run in a tuios pane. It adds a tmux-style size policy for sessions with more than one client. Scrollback keeps its text when you resize a pane. The sidebar files list follows the disk and panes on other machines.

Before you upgrade, read Breaking changes and migration. The pure Go emulator now reflows lines when a pane changes width.

The full list is at tuios.dev/releases.

Install

brew install tuios                     # Homebrew (macOS, Linux)
yay -S tuios-bin                       # AUR (tuios-web-bin for the web server)
nix run github:Gaurav-Gosain/tuios     # Nix
curl -fsSL https://raw.githubusercontent.com/Gaurav-Gosain/tuios/main/install.sh | bash
go install github.com/Gaurav-Gosain/tuios/cmd/tuios@v0.8.5
docker run -it --rm ghcr.io/gaurav-gosain/tuios:v0.8.5

A binary installed by the script or from an archive updates with tuios update.

New features

  • Master position. The master pane can be on the left, right, top or bottom, or in the center (#325). With center, the other panes go to the right and to the left in turn. This closes #321.
    • appearance.master_position sets the side. appearance.master_count sets how many master panes there are (1 to 9).
    • In the layout prefix (Ctrl+B L):
      • o moves the master to the next side.
      • Enter swaps the focused pane with the master.
      • m focuses the master.
      • i and d add and remove a master.
    • tuios set-layout --master-position center --masters 2 changes the current workspace.
    • Each workspace keeps its own side and count, also after a daemon restart.
  • herdr plugins. In a pane, herdr's command line now answers through tuios (#328).
    • terminal-browser, terminal-code and the Vim navigation plugins work in a tuios pane.
    • The herdr socket answers 8 more methods: pane.process_info, pane.focus_direction, pane.neighbor, pane.edges, pane.swap, pane.zoom, workspace.focus and agent.start.
    • Every pane gets HERDR_TAB_ID.
    • Each method is held to the grants of the pane that calls it. pane.process_info shows the command line and folder only to a pane that has write.
  • Session size. [daemon] window_size sets the size of a session that has more than one client (#330). The values are the values of tmux's window-size option.
    • smallest (the default) works as before.
    • largest uses the biggest client.
    • latest follows the client you typed in last.
    • A client smaller than the session shows the part of the session around the cursor. A mark on the line above the dock says so.
    • tuios set-config daemon.window_size latest -s NAME changes a running session.
    • A read-only tuios-web viewer does not set the size under largest or latest.
  • Subagents. A Claude Code agent's rail row shows how many subagents it runs, for example 3 subagents (#307). Thanks to @JakeChop.

Fixes

  • Scrollback and resize. Text no longer gets lost when a pane changes size (#331, #333, #323).
    • A narrower pane keeps the end of each line, and a wider pane shows it again.
    • A shorter pane keeps the text below the cursor and the prompt under a full-screen program.
    • A scroll region moves its rows to history.
    • Wide characters stay in history.
    • A daemon restart keeps history rows that are wider than the pane.
  • Files list. The sidebar files list now updates when a file is added, removed or renamed (#319, #327). This closes #313.
    • A pane on another machine updates its list when you cd, and when files change on that machine.
    • In a pane that runs ssh, the files section says that the shell is on the other machine.
    • Nothing polls. An idle session stays idle.
  • New windows in BSP. A new window now splits the focused pane, on the preselected side when you set one (#349). Before, it always split the last pane, which is the bottom-right one. This answers discussion #347.
    • A preselection now works in daemon sessions too.
    • longest_side reads the size of the pane it splits.
  • Zoom in the scrolling layout. Moving to the next column while zoomed no longer shows a gap during the slide (#324).
  • Log viewer. The log viewer opens on the newest entry and scrolls to the last entry it draws (#329). Thanks to @davidreuss.
  • install.sh on the BSDs. install.sh downloads the right archive on FreeBSD and OpenBSD (#322). Thanks to @fdoving.
  • herdr events. A client that subscribes and then acts at once now gets the event (#326).
  • Kitty images. An image in a pane started with new-window -- prog no longer disappears when the session state syncs (#343).
  • Speed.
    • The terminal emulator reads kitty and sixel image data about 15 times faster (#338).
    • A cropped pane draws about three times faster, and a folder that changes often causes fewer sidebar redraws (#335).

Breaking changes and migration

Reflow

  • The pure Go emulator now rewraps the lines on the screen when a pane changes width, as kitty, ghostty and tmux do. Older history keeps the width it was written at.
  • On the pure Go emulator, a full-width prompt that is not marked with OSC 133 leaves one extra row each time the pane gets narrower. The ghostty emulator already did this. To stop it, mark the prompt with OSC 133. See the shell recipes in tuios doctor.

herdr

  • HERDR_BIN_PATH in a pane now names a link to tuios that answers herdr's command line. Before, it named the tuios binary.
  • A herdr plugin that calls $HERDR_BIN_PATH now reaches tuios. To run the real herdr inside a tuios pane, set [agents] herdr_protocol = "agents" as before.

Layout keys

  • o, Enter, m, i and d in the layout prefix are new defaults. If your [keybindings.layout_prefix] already binds one of these keys, your binding wins.

Claude Code subagents

  • The subagent count needs version 3 of the Claude Code integration. Run tuios integration status. If it reports the integration as out of date, run:

    tuios integration install claude-code

Mixed versions

  • The session size policy, the herdr command front, the files list for panes on other machines, the subagent count and master positions need a v0.8.5 daemon. To start a v0.8.5 daemon, run tuios kill-server after the upgrade. This closes every pane in every session, so save your work first.
  • An older client in a session under latest or largest makes the session use smallest until it leaves.

Contributors

Thank you to everyone who sent a pull request for this release:

Thanks to @adamcstephens for the master position request (#321), and to @LovesAsuna for the files list reports (#313) and the BSP report (#347).


Full Changelog: v0.8.4...v0.8.5

Don't miss a new tuios release

NewReleases is sending notifications on new releases.