What's new in tab v0.5.0

I just released tab v0.5.0, the next version of the tab terminal multiplexer.

This release contains many new features, including a built-in fuzzy finder, and a new global workspace config file with keybinding support.

Built-in Fuzzy Finder

Tab is designed as a navigating terminal multiplexer. It tries to get you where you need to go, asking for just a few keystrokes.

Tab now has a built-in fuzzy finder simiar to fzf/skim/scout:

Screen Shot 2020-10-24 at 11.31.00 PM.png

The fuzzy finder can be activated by invoking tab with no arguments, or by pressing ctrl-T from within a session.

Global Workspace configuration

Tab now supports a global workspace configuration, which can be defined at ~/.config/tab.yml or $XDG_CONFIG_HOME/tab.yml.

The global config is useful for 'pinning' links to workspaces or repositories, as it is loaded by tab in any working directory. It can also be used to configure tabs that are always available.

workspace:
  # these links are relative to your home directory
  - workspace: open-source
  - repo: repo
  - tab: global-tab
    doc: this tab is always available

Configurable Key Bindings

The default keybindings have changed. The ctrl-W sequence has been replaced with ctrl-T.

Tab can be configured with keybindings in the global workspace configuration:

workspace: []

key_bindings:
  - action: SelectInteractive
    keys: ctrl-T

  - action: Disconnect
    keys: ctrl-A W

Tab supports the actions 'Disconnect' and 'SelectInteractive'. As well as the keys ctrl-[A-Z], ESC, and all visible ASCII characters. Key sequences can be bound by separating elements by spaces:

ctrl-A A

Tab detects these key sequences while forwarding your stdin to terminal applications. For multi-key sequences, keys before the final binding are transmitted to the terminal application. This allows the overloading of ctrl keys that vim/emacs use for other purposes.

tab --disconnect / tab --close

Tab now supports tab --disconnect / tab -z, which disconnects clients.

It can be invoked for named tabs:

❯ tab --disconnect foo bar baz

Both tab --disconnect and tab --close / tab -w now support no arguments, in which case the currently selected tab is closed or disconnected. If not in a session, they exit with a failure, which means they can be combined with || in a shell alias which disconnects within a tab session and quits outside a session: alias quit='tab --disconnect || exit'

tab --check, a linter for tab.yml configurations

Tab tries to be permissive when it encounters issues in your tab.yml configurations, but it now provides a utility that scans the active workspace for errors and warnings.

❯ tab --check
4 errors were detected:
    - Workspace path does not exist: /Users/austinjones/open-source/../not-exists
    - Tab tab/foo/ has a working directory that does not exist: /Users/austinjones/open-source/tab-rs/not-exists/
    - Repository path does not exist: /Users/austinjones/open-source/not-exists
    - Tab any/ has duplicate definitions