tere - a faster alternative to cd + ls

tere is a terminal file explorer. It is a faster alternative to using cd and ls to browse folders in your terminal. It only really does one thing: it allows you to navigate to a folder efficiently using a TUI, and then prints the path to that folder when you exit.

A gif showing what tere using looks like

Note that tere is not a file manager, it can only be used to browse folders, not to create, rename or delete them.

tere aims to be minimal and simple. It should be obvious how to use it. Navigating the file system should be efficient and require as few keystrokes as possible. A great source of inspiration for tere is the "type-ahead search" functionality found in many GUI file managers.

"Tere" means "hello" in Estonian. It also feels nice to type.

Setup

To start using tere, follow these steps:

  1. Download the latest release
  2. Configure your shell to cd to the folder which tere prints when it exits. It has to be usually done using a function instead of an alias, since the latter only changes the working directory of the subshell.

    For bash/zsh, put this in your .bashrc or .zshrc:

    sh tere() { local result=$(/path/to/tere "$@") [ -n "$result" ] && cd -- "$result" }

    For xonsh v0.10 or newer, put this in your .xonshrc:

    ```py def _tere(args): result = $(/path/to/tere @(args)).strip() if result: cd @(result)

    aliases["tere"] = _tere ```

    If instructions for your shell are missing, feel free to send a pull request that includes them!

  3. That's it. The next time you open a new shell, the command tere should work (you can also of course call the shell function/alias whatever you like). The above shell configuration also acts as a config file for tere, just add the options you want (see tere --help).

Supported platforms

Currently, tere is tested on and built for Ubuntu. On Mac, it should be enough to compile the program yourself and the above bash/zsh shell configuration should work out of the box. Windows should also in principle work (the TUI is rendered using a cross-platform library), you just has to figure out the correct shell configuration. Pull requests welcome!

Hacking

To compile tere from source, follow the standard procedure:

  1. Install the Rust toolchain
  2. git clone git@github.com:mgunyho/tere.git
  3. cd tere
  4. Run cargo build (--release for the release version)

This will place the tere in the folder target/debug or target/release if you used --release.

User guide

You can navigate folders in tere by using the arrow keys and by typing to search. Basic navigation works by moving the cursor up or down, and pressing Enter or the right arrow to enter the highlighted folder. You can move to the parent folder by pressing Enter on the parent folder item .., or with the left arrow . Below is a full list of keyboard shortcuts.

Keyboard shortcuts

tere has the following keyboard shortcuts:

| Action | Shortcut(s) | |:---:|:---:| |Move cursor up | or Alt+k | |Move cursor down| or Alt+j | |Enter directory | Enter or or Alt+ or Alt+l or if not searching, Space | |Go to parent directory| or Alt+ or Alt+h or if not searching, Backspace or - | |Exit tere| Esc or Alt+q | |Exit tere without changing directory| Ctrl+c | |Go to home directory| Ctrl+Home or Ctrl+Alt+h| |Go to root directory| / or Alt+r| |Refresh current directory| Ctrl+r| |Move cursor up by one screen| Page Up or Ctrl+u or Alt+u | |Move cursor down by one screen| Page Down or Ctrl+d or Alt+d | |Move cursor to the top | Home or Alt+g | |Move cursor to the bottom| End or Alt+Shift+g | |Change case sensitivity mode| Alt+c | |Change gap search mode| Ctrl+f | |Show help screen| ? |

Some of the shortcuts starting with Alt should be familiar to Vim users.

Searching

To search for an item in the current folder, just type some letters. tere will incrementally highlight all folders and files that match the search query.

While searching, moving the cursor up or down jumps between only the items that match the search. The search query, as well as the number of matching items is shown at the bottom of the screen.

If only one folder matches your current search, tere will highlight it, and change the working directory to that folder. This way you can navigate folders very quickly.

To stop searching, press Esc or erase all search characters by pressing Backspace.

By default, the searching uses "smart case", meaning that if the query contains only lowercase letters, case is ignored, but if there are uppercase letters, the search is case sensitive. This can be changed with the --ignore-case and --case-sensitive options, or with the keyboard shortcut Alt+c while tere is running.

In addition, in the default search mode, "gap search" is enabled. This means that the search query matches any folder or file name that contains the searched characters, even if there are other characters between them. For example, searching for dt would match both DeskTop and DocumenTs. This behavior can be changed with the --gap-search-anywhere and --no-gap-search options, or with the keyboard shortcut Ctrl+f while tere is running. See the output of the --help option for further details.

Mouse navigation

Although tere is mainly keyboard-focused, it is also possible to navigate using the mouse. To maximize compatibility, mouse support is off by default, and has to be enabled with the option --mouse=on. With the mouse enabled, you can change to a folder by clicking on it, and move to the parent folder by right-clicking.

CLI options

You can adjust the behavior of tere by passing the following CLI options to it:

Some options have two or more versions that override each other (for example --folders-only and --no-folders-only). For such options, whichever is passed last wins. This way, you can have one option as the default in your shell's rc file, but you can sometimes manually override that option when running tere.

Similar projects

The idea of tere is by no means unique. There are actually quite a few CLI applications that attempt to make folder navigation faster. Below is a non-exhaustive list of such programs. The purpose of this section is to justify the existence of tere by showing how it is different from all these applications in subtle but important ways.

If there is a program that should be mentioned here, feel free to open an issue or pull request about it!

Terminal file browsers

These programs are designed for basically the same task as tere: navigate to a folder in the terminal and then cd to it.

Fuzzy matching and history-based navigation

These programs have a very similar goal as tere, to speed up filesystem navigation. However, these kinds of programs are not well suited for exploration, as they require that you visit a folder before you can jump to it. They also differ from tere in philosophy; tere aims to be deterministic, while the results of a fuzzy match or "frecency"-based query vary depending on your previous queries.

Terminal file managers

There are quite a few terminal file managers, and they can often be used in the same way as tere, for example using the --choosedir option of ranger. However, they have a huge number of other features compared to tere, which usually leads to a more complex UI and a higher learning curve. File managers are also not entirely focused on navigation, and therefore often require extra keystrokes to search and navigate folders. File management is not in the scope of tere, so these programs are not directly comparable to it.

Other similar programs

License

Copyright 2022 András Márton Gunyhó. Licensed under the EUPL, see the LICENSE file.