Queries

June 24, 2026 · View on GitHub

Matchmaker uses a powerful fuzzy matcher (based on Nucleo) to filter and rank items. It implements fzf-style scoring with smart case, consecutive match boosting, and start-of-word preference.


How Matching Works

  1. Fuzzy Matching: Characters match in order but not necessarily consecutively. Shorter gaps and consecutive runs score higher.
  2. Multiple Tokens: Split by spaces. Each token must match independently (logical AND).
    • Example: foo bar matches items containing both foo and bar.
  3. Smart Case:
    • Lowercase query → case-insensitive.
    • Uppercase letters → case-sensitive.

Query Syntax and Operators

OperatorMeaningExample
abcFuzzy matchabc matches alphabetic
'abcLiteral substring'foo matches hello foo but not f_o_o
^abcMatch prefix^src matches items starting with src
abc$Match suffixbar$ matches items ending with bar
^abc$Exact match^foo$ matches exactly foo
!abcExcludefoo !test matches foo but not test
\Escape spacefoo\ bar matches literal space

Columns

Configuration

  • columns.split: Defines how input lines are parsed into columns.
    • None: No splitting (single column).
    • Delimiter(regex): Splits line by a regex (e.g., \s+ or ,).
      • Capture groups are supported:
        • If the regex contains named groups, each named match is assigned to the column with the corresponding name.
        • If there are unnamed groups, matches are assigned to columns in sequence (first group → first column, etc.).
        • Example:
          (?P<name>\w+),(?P<age>\d+),(\w+)
          
          • name → column "name"
          • age → column "age"
          • Third unnamed group → third column in order
    • Regexes([regex]): Uses a sequence of regexes to capture specific parts of the line.
  • columns.names: A list of column settings (name, filter, hidden).
    • If names are provided, you can filter by them.
    • If unspecified, columns are automatically named 1, 2, ... (or 0, 1, ... if names_from_zero is true).

Note: Beware that any columns after columns.max are inaccessible!

Column Filtering

Filter a specific column using %name or any abbreviation thereof:

  • %path .toml: Matches items where the path column ends with .toml.
  • helix %p .toml !lang: Match helix, path ends in .toml, exclude lang.

Miscellaneous

Exit codes

  • 125: EventLoopClosed
  • 404: No Match
  • 11: Start Error
  • 100: Signal to resume from BecomeOrConfirm (when emitted by spawned scripts)