This tools reads from stdin and displays the input as a list. Each line is matched against a regular expression. Lines can be selected interactively to execute commands built upon selected matches.
The usage of lisst can best be explained with an example:
git log --oneline | lisst "[0-9a-f]{7,40}" git show
This command will pipe the output of git log
into lisst. It will open an interactive list which you can browse with the arrow keys.
Each commit hash matching the regular expression [0-9a-f]{7,40}
will be highlighted. When you select a line containing a commit hash
and hit the enter key, the command git show <commit hash>
will be executed. When this command returns, the list will be shown again allowing you
to select the next line of interest.
The main advantage of lisst is its ability to interactively select lines. Often a combination of grep
and xargs
can achieve a somewhat similar
effect, but much less convenient. The following command, for example, will also run git show
for all commits, however, one after the other, which
is typically not very useful:
git log --oneline | grep -E "[0-9a-f]{7,40}" -o | xargs -L 1 -p git show
lisst accepts all non-empty output piped into it and splits it on line breaks. Each line is matched against the given regular expression. The first match within a line is highlighted. The enter key triggers the upstream command only if the selected line contains a match. An arbitrary number of command line arguments can be added to the command. The highlighted match in the selected line is appended to this list of arguments. The status bar at the bottom displays the command that is about to be executed when the enter key is pressed.
The following example demonstrates how to efficiently edit many files:
grep -r func | lisst "^(.*?):" vi
All occurrences of func
in all files in the current directory and all sub-directories will be displayed as a list with each file name being highlighted.
When you select a certain line and press the enter key, the editor vi
will be launched and you can edit the file as usual. When you close the editor,
the list will be visible again allowing you to edit the next file.
You can use human-readable keywords for frequently used patterns. In the screencast shown above, for example,
the keyword --git-commit-hash
is used for convenience instead of the actual regular expression.
See lisst --help
for a complete list of supported keywords and more useful examples.
You can download prebuilt binaries of lisst here. If you work with bash, you might want to include the corresponding bash completion:
source bash_completion.sh
On the following Linux distributions, you can alternatively install lisst using your package manager:
Distribution | Repository |
---|---|
Ubuntu 24.04 | https://download.opensuse.org/repositories/home:/terminationshock/xUbuntu_24.04 |
Ubuntu 24.10 | https://download.opensuse.org/repositories/home:/terminationshock/xUbuntu_24.10 |
OpenSUSE Leap 15.5 | https://download.opensuse.org/repositories/home:/terminationshock/15.5 |
OpenSUSE Leap 15.6 | https://download.opensuse.org/repositories/home:/terminationshock/15.6 |
OpenSUSE Tumbleweed | https://download.opensuse.org/repositories/home:/terminationshock/openSUSE_Tumbleweed |
Debian 12 | https://download.opensuse.org/repositories/home:/terminationshock/Debian_12 |
Installation commands for the most common distributions are given below.
wget -qO- https://build.opensuse.org/projects/home:terminationshock/signing_keys/download?kind=gpg | sudo gpg --dearmor -o /etc/apt/keyrings/obs-terminationshock.gpg
echo "deb [signed-by=/etc/apt/keyrings/obs-terminationshock.gpg] https://download.opensuse.org/repositories/home:/terminationshock/xUbuntu_24.04/ ./" > /etc/apt/sources.list.d/obs-terminationshock.list
apt update
apt install lisst
zypper addrepo --refresh https://download.opensuse.org/repositories/home:/terminationshock/\$releasever terminationshock
zypper install lisst
zypper addrepo --refresh https://download.opensuse.org/repositories/home:/terminationshock/openSUSE_Tumbleweed terminationshock
zypper install lisst
You can build the executable yourself by running make
. It requires Go version 1.19 or later for building.
The tests (unit and integration tests) can be run with make check
.
lisst is licensed under the MIT License.
lisst depends on several other Go packages. Their licenses are listed here.