6 releases

0.2.1-beta Jun 28, 2024
0.2.0-beta Jun 28, 2024
0.1.7 Nov 7, 2023
0.1.4 May 5, 2023

#437 in Algorithms

CC0 license

22KB
491 lines

tabs.kak

View open buffers in status line, like tabs, and navigate between them quickly.

Demo

asciicast

Keybindings

The recommended key bindings can be set by calling tabs-recommended-keys:

define-command tabs-recommended-keys -docstring "set the recommended kak-tabs bindings" %{
  map global normal q b
  map global normal Q B
  map global normal b ': enter-user-mode tabs<ret>' -docstring 'tabs'
  map global normal B ': enter-user-mode -lock tabs<ret>' -docstring 'tabs (lock)'
}

Within the tabs mode, the keybindings are as follows:

a:(alternate)      return to the previously focused buffer
h:(previous)       navigate to the buffer on the left
l:(next)           navigate to the buffer on the right
s:   (*scratch*)      open the *scratch* buffer
u:   (*debug*)        open the *debug* buffer
H:(drag left)      swap this buffer to the left
L:(drag right)     swap this buffer to the right
d:   (delete current) delete the current buffer

Configuration

Example Configuration

set-option global tabs_modelinefmt '%val{cursor_line}:%val{cursor_char_column} {{mode_info}} '
set-option global tabs_options --minified

Options

  • tabs_modelinefmt: when set to a modelinefmt string, it is placed in the space preceding the tabs

  • tabs_options: a list of switches that affect tabs' appearance.

    • --minified
      • this will cause tabs to show as little of their paths as possible while still being unique. For example, if the currently open buffers are
        projects/1/src/main.rs projects/2/src/main.rs projects/2/Cargo.toml
        
        then the rendered tabs will be
        | 1/src/main.rs | 2/src/main.rs | Cargo.toml |
        
        because these are the smallest unique suffixes of each buffer.

Installation

  1. Install the rc/tabs.kak so your kakoune instance auto-loads it.
  2. Install the kak-tabs rust crate.

TODO

  • the order of tabs changes how the disambiguation of files with the same names work. for example:
    • we have a buflist that looks like:
      • | *debug* | xml.rs | pypi/mirror/mod.rs | cargo/mirror/mod.rs | mod.rs |
    • swapping the last two buffers yields the following tabs:
      • | *debug* | xml.rs | mirror/mod.rs | api/mod.rs | mod.rs |
  • tabs should shrink when there's not enough space
  • add more buffer deletion options, see: https://github.com/enricozb/tabs.kak/issues/3

Originally inspired by Delapouite's kakoune-buffers.

Warning This plugin is incompatible with powerline.kak, see here for why.

Dependencies

~2–3MB
~57K SLoC