Crates.io | television |
lib.rs | television |
version | 0.6.2 |
source | src |
created_at | 2024-09-11 12:41:29.979644 |
updated_at | 2024-12-06 09:51:14.069416 |
description | The revolution will be televised. |
homepage | https://github.com/alexpasmantier/television |
repository | https://github.com/alexpasmantier/television |
max_upload_size | |
id | 1371905 |
size | 294,040 |
A blazingly fast general purpose fuzzy finder TUI.
The revolution will (not) be televised. |
Television
is a blazingly fast general purpose fuzzy finder TUI.
It is inspired by the neovim telescope plugin and is designed to be fast, efficient, simple to use and easily extensible. It is built on top of tokio, ratatui and the nucleo matcher used by the helix editor.
brew install television
pacman -S television
curl -LO https://github.com/alexpasmantier/television/releases/download/0.6.2/television_0.6.2-1_amd64.deb
sudo dpkg -i television_0.6.2-1_amd64.deb
pixi global install television
From the latest release page:
tv-vX.X.X-linux-x86_64.tar.gz
if you're on a linux x86 machine)/usr/local/bin
on macos and linux for a global installation)Setup the latest stable Rust toolchain via rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update
Install television
:
cargo install --locked television
tv [channel] #[default: files] [possible values: env, files, git-repos, text, alias]
By default, television
will launch with the files
channel on.
tv 's files channel running on the curl codebase |
television
uses a fuzzy matching algorithm to filter the list of entries. The algorithm that is used depends on the
input pattern that you provide.
Matcher | Pattern |
---|---|
Fuzzy | foo |
Substring | 'foo / !foo to negate |
Prefix | ^foo / !^foo to negate |
Suffix | foo$ / !foo$ to negate |
Exact | ^foo$ / !^foo$ to negate |
For more information on the matcher behavior, see the nucleo-matcher documentation.
Default keybindings are as follows:
Key | Description |
---|---|
↑ / ↓ | Navigate through the list of entries |
Ctrl + u / d | Scroll the preview pane up / down |
Enter | Select the current entry |
Ctrl + y | Copy the selected entry to the clipboard |
Ctrl + r | Toggle remote control mode |
Ctrl + s | Toggle send to channel mode |
Ctrl + g | Toggle the help panel |
Esc | Quit the application |
These keybindings are all configurable (see Configuration).
The following built-in channels are currently available:
Files
: search through files in a directory tree.Text
: search through textual content in a directory tree.GitRepos
: search through git repositories anywhere on the file system.Env
: search through environment variables and their values.Alias
: search through shell aliases and their values.Stdin
: search through lines of text from stdin.Tired of broadcast television? Want to watch your favorite shows on demand? television
has you covered with cable channels. Cable channels are channels that are not built-in to television
but are instead provided by the community.
You can find a list of available cable channels on the wiki and even contribute your own!
Installing cable channels is as simple as creating provider files in your configuration folder.
A provider file is a *channels.toml
file that contains cable channel prototypes defined as follows:
my-custom-channels.toml
[[cable_channel]]
name = "Git log"
source_command = 'git log --oneline --date=short --pretty="format:%h %s %an %cd" "$@"'
preview_command = 'git show -p --stat --pretty=fuller --color=always {0}'
[[cable_channel]]
name = "My dotfiles"
source_command = 'fd -t f . $HOME/.config'
preview_command = 'bat -n --color=always {0}'
This would add two new cable channels to television
available using the remote control mode:
By default, each line of the source command can be passed to the previewer using {}
.
If you wish to pass only a part of the output to the previewer, you may do so by specifying the preview_delimiter
to use as a separator and refering to the desired part using the corresponding index.
Example:
[[cable_channel]]
name = "Disney channel"
source_command = 'echo "one:two:three:four" && echo "five:six:seven:eight"'
preview_command = 'echo {2}'
preview_delimiter = ':'
# which will pass "three" and "seven" to the preview command
Television's design is primarily based on the concept of Channels.
Channels are just structs that implement the OnAir
trait.
As such, channels can virtually be anything that can respond to a user query and return a result under the form of a list of entries. This means channels can be anything from conventional data sources you might want to search through (like files, git repositories, remote filesystems, environment variables etc.) to more exotic implementations that might inclue a REPL, a calculator, a web browser, search through your spotify library, your email, etc.
Television provides a set of built-in Channels that can be used out of the box (see Built-in Channels). The list of available channels will grow over time as new channels are implemented to satisfy different use cases.
When it makes sense, Television allows for transitions between different channels. For example, you might want to start searching through git repositories, then refine your search to a specific set of files in that shortlist of repositories and then finally search through the textual content of those files.
This can easily be achieved using transitions.
Entries returned by different channels can be previewed in a separate pane. This is useful when you want to see the contents of a file, the value of an environment variable, etc. Because entries returned by different channels may represent different types of data, Television allows for channels to declare the type of previewer that should be used. Television comes with a set of built-in previewers that can be used out of the box and will grow over time.
Here are some examples of how you can use television
to make your life easier, more productive and fun. You may want to add some of these examples as aliases to your shell configuration file so that you can easily access them.
NOTE: most of the following examples are meant for macOS. Most of the commands should work on Linux as well, but you may need to adjust them slightly.
cd `tv git-repos`
open `tv`
code --goto `tv`
vim `tv`
at a specific line using the text channel
tv text | xargs -oI {} sh -c 'vim "$(echo {} | cut -d ":" -f 1)" +$(echo {} | cut -d ":" -f 2)'
ls -1a | tv
Here is a list of terminal emulators that have currently been tested with television
and their compatibility status.
Terminal Emulator | Tested Platforms | Compatibility |
---|---|---|
Alacritty | macOS, Linux | ✅ |
Kitty | macOS, Linux | ✅ |
iTerm2 | macOS | ✅ |
Wezterm | macOS, Linux, Windows | ✅ |
macOS Terminal | macOS | functional but coloring issues |
Konsole | Linux | ✅ |
Terminator | Linux | ✅ |
Xterm | Linux | ✅ |
Cmder | Windows | ✖️ |
Foot | Linux | ✅ |
Rio | macOS, Linux, Windows | ✅ |
Warp | macOS | ✅ |
Hyper | macOS | ✅ |
You may wish to customize the behavior of television
by providing your own configuration file. The configuration file
is a simple TOML file that allows you to customize the behavior of television
in a number of ways.
Here are default locations where television
expect the configuration files to be located for each platform:
Platform | Value |
---|---|
Linux | $HOME/.config/television/config.toml |
macOS | $HOME/Library/Application Support/com.television/config.toml |
Windows | {FOLDERID_LocalAppData}\television\config |
NOTE: on either platform, XDG_CONFIG_HOME
will always take precedence over default locations if set, in which case
television will expect the configuration file to be in $XDG_CONFIG_HOME/television/config.toml
.
You may also override these default paths by setting the TELEVISION_CONFIG
environment variable to the path of your desired configuration folder.
export TELEVISION_CONFIG=$HOME/.config/television
touch $TELEVISION_CONFIG/config.toml
The default configuration file can be found in the repository's ./.config/config.toml.
Contributions, issues and pull requests are welcome.
See CONTRIBUTING.md and good first issues for more information.