matchmaker-cli 0.0.4

Command-line interface for the matchmaker fuzzy finder
matchmaker-cli-0.0.4 is not a library.

m&m Crates.io License: AGPL v3

Matchmaker is a fuzzy searcher, powered by nucleo and written in rust.

screen1

Features

  • Matching with nucleo.
  • Declarative configuration which can be sourced from a toml file, or overridden using an intuitive syntax for specifying command line options.
  • Interactive preview supports color, scrolling, wrapping, multiple layouts, and even entering into an interactive view.
  • FZF-inspired actions.
  • Column support: Split input lines into multiple columns, that you can dynamically search, filter, highlight, return etc.
  • Available as a rust library to use in your own code.

Installation

cargo install matchmaker-cli

Pass it some items:

find . | mm

[!NOTE] The default input and preview commands rely on fd, bat and eza. For an optimal experience, install them or update your configuration.

Configuration

To begin, you can dump the default configuration to a file:

matchmaker --dump-config

The default locations are in order:

  • ~/.config/matchmaker/config.toml (If the folder exists already).
  • {PLATFORM_SPECIFIC_CONFIG_DIRECTORY}/matchmaker (Generally the same as above when on linux)

Matchmaker options are hierarchical but most categories are flattened to the top level:

[preview]
    show = true
    wrap = true
    header_lines = 3 # sticky the top 3 lines

# Full specification of (the default values of) a single layout. Multiple layouts can be specified.
[[preview.layout]]
    command    = ""
    side       = "right"
    percentage = 60
    min        = 30
    max        = 120

Options can be overridden on the command line, where abbreviations are supported:

mm --config ~/.config/matchmaker/alternate.toml p.l "cmd=[echo {}] p=50 max=20" cmd "ls" o "'{}'"

# 1. Start mm with an alternate config, as well as with the following overrides:
# 2. List the contents of the current directory by executing `ls`
# 3. Show the current item name in the preview pane
# 4. Set a preferred percentage of 50 for the preview pane, and a maximum column width of 20 for the preview pane
# 5. Output the result wrapped in single quotes

Keybindings

Actions can be defined in your config.toml or on the command line.

The list of currently supported actions can be found here or from mm --options.

To get the names of keys, type mm --test-keys.

In addition to keys, actions can also be bound to Events and Crossterm events (check your default config for details).

CLI

See here for the command-line syntax.

Matchmaker aims to achieve feature-parity with fzf (though not necessarily by the same means). If there's any specific feature that you'd like to see, open an issue!

Library

Matchmaker can also be used as a library.

cargo add matchmaker

Example

Here is how to use Matchmaker to select from a list of strings.

use matchmaker::nucleo::{Indexed, Worker};
use matchmaker::{MatchError, Matchmaker, Result, Selector};

#[tokio::main]
async fn main() -> Result<()> {
    let items = vec!["item1", "item2", "item3"];

    let worker = Worker::new_single_column();
    worker.append(items);
    let selector = Selector::new(Indexed::identifier);
    let mm = Matchmaker::new(worker, selector);

    match mm.pick_default().await {
        Ok(v) => {
            println!("{}", v[0]);
        }
        Err(err) => match err {
            MatchError::Abort(1) => {
                eprintln!("cancelled");
            }
            _ => {
                eprintln!("Error: {err}");
            }
        },
    }

    Ok(())
}

For more information, check out the examples and Architecture.md

See also