Skip to content

Repository files navigation

sig

ci

Interactive grep

sig.gifsig.static.gif

Features

  • Interactive grep (for streaming)
    • sig allows users to interactively search through (streaming) data, updating results in real-time.
  • Re-execute command
    • If --cmd is specified instread of piping data to sig, the command will be executed on initial and retries.
    • This feature is designed to address the issue where data streams past while the user is fine-tuning the search criteria. In other words, even if the data has already passed, executing the command again allows the retrieval of the data for re-evaluation.
  • Archived mode
    • In archived mode, since there is no seeking capability for streaming data received through a pipe, it is not possible to search backwards without exiting the process. Therefore, in sig, the latest N entries of streaming data are saved, and it is possible to switch to a mode where you can grep through these N entries based on key inputs at any given moment.
    • For static data such as files, sig automatically switches to archived mode when the input reaches EOF.
      • like ugrep with -Q option.

Installation

Homebrew

brew install ynqa/tap/sigrs

Cargo

cargo install sigrs

X-CMD

If you're an x-cmd user, you can install it with the following command:

x install sig

Arch Linux

pacman -S sig

Nix (flakes)

Add it as an input to your flake:

inputs={sig.url= 'github:ynqa/sig/<optional-ref>'
}

Create a shell with it:

nixshellgithub:ynqa/sig

Or run it directly:

catREADME.md | nixrungithub:ynqa/sig

Nix (classic)

Fetch the source and use it, e.g. in your shell:

let# At the time of writing this, pkgs need to be unstable for the package to build properly# (requires Rust 1.74, stable has 1.73)pkgs=import<nixpkgs-unstable>{};sig=pkgs.callPackage(pkgs.fetchFromGitHub{owner="ynqa";repo="sig";rev="<revision, e.g. master/v0.1.0/etc.>";hash="";# Build first, put proper hash in place}){};inpkgs.mkShell{packages=[sig];}

Examples

stern --context kind-kind etcd |& sig
# or
sig --cmd "stern --context kind-kind etcd"# this is able to retry command by ctrl+r.# or static input (switches to archived view after EOF)
cat README.md |& sig

Keymap

KeyAction
Ctrl + CExit sig
Ctrl + RRetry command if --cmd is specified
Ctrl + SPause/Resume stream ingestion
Ctrl + FEnter Archived mode
Move the cursor one character to the left
Move the cursor one character to the right
Ctrl + AMove the cursor to the start of the filter
Ctrl + EMove the cursor to the end of the filter
BackspaceDelete a character of filter at the cursor position
Ctrl + UDelete all characters of filter

(Archived mode)

KeyAction
Ctrl + CExit Archived mode
Move the cursor one character to the left
Move the cursor one character to the right
Ctrl + AMove the cursor to the start of the filter
Ctrl + EMove the cursor to the end of the filter
BackspaceDelete a character of filter at the cursor position
Ctrl + UDelete all characters of filter

Usage

Interactive grep (for streaming)
Usage: sig [OPTIONS]
Examples:
$ stern --context kind-kind etcd |& sig
Or the method to retry command by pressing ctrl+r:
$ sig --cmd "stern --context kind-kind etcd"
Static input (switches to archived view after EOF):
$ cat README.md |& sig
Options:
--retrieval-timeout <RETRIEVAL_TIMEOUT_MILLIS>
Timeout to read a next line from the stream in milliseconds. [default: 10]
--render-interval <RENDER_INTERVAL_MILLIS>
Interval to render a line in milliseconds.
-q, --queue-capacity <QUEUE_CAPACITY>
Queue capacity to store lines. [default: 1000]
-i, --ignore-case
Case insensitive search.
--cmd <CMD>
Command to execute on initial and retries.
-Q, --query <QUERY>
Initial query.
-c, --config <CONFIG_FILE>
Path to the configuration file.
-h, --help
Print help (see more with '--help')
-V, --version
Print version

Configuration

The following settings are available in config.toml
# Style for matched substringshighlight_style = "fg=red"
[streaming.editor]
# Query prompt while streamingprefix = "❯❯ "prefix_style = "fg=darkgreen"active_char_style = "bg=darkcyan"inactive_char_style = ""# lines =
[streaming.keybinds]
exit = ["Ctrl+C"]
goto_archived = ["Ctrl+F"]
retry = ["Ctrl+R"]
toggle_pause = ["Ctrl+S"]
[streaming.keybinds.editor]
backward = ["Left"]
forward = ["Right"]
move_to_head = ["Ctrl+A"]
move_to_tail = ["Ctrl+E"]
erase = ["Backspace"]
erase_all = ["Ctrl+U"]
[archived.editor]
# Query prompt in archived modeprefix = "❯❯❯ "prefix_style = "fg=darkblue"active_char_style = "bg=darkcyan"inactive_char_style = ""# lines =
[archived.listbox]
cursor = ""# active_item_style =# inactive_item_style =# lines =
[archived.keybinds]
exit = ["Ctrl+C"]
retry = ["Ctrl+R"]
up = ["Up", "ScrollUp"]
down = ["Down", "ScrollDown"]
[archived.keybinds.editor]
backward = ["Left"]
forward = ["Right"]
move_to_head = ["Ctrl+A"]
move_to_tail = ["Ctrl+E"]
erase = ["Backspace"]
erase_all = ["Ctrl+U"]

About

Interactive grep (for streaming)

Topics

Resources

Code of conduct

Contributing

Stars

763 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages