Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/idanarye/nu_plugin_skim


https://github.com/idanarye/nu_plugin_skim

Last synced: 9 days ago
JSON representation

Lists

README

        

# nu_plugin_skim

This is a [Nushell](https://nushell.sh/) plugin that adds integrates the [skim](https://github.com/lotabout/skim) fuzzy finder.

The regular `sk` executable filters lines of text, but the `sk` command added by this plugin can filter Nushell's structured data.

## Installing

Install the crate using:

```nushell
> cargo install nu_plugin_skim
```

Then register the plugin using (this must be done inside Nushell):

```nushell
> plugin add ~/.cargo/bin/nu_plugin_skim
```

## Usage

Pipe the input of any Nushell command into `sk`:

```nushell
> ps | sk --format {get name} --preview {}
```

This will open the skim TUI, allowing you to select an item from the stream:

```
│╭─────────┬─────────────╮ 1/9
││ pid │ 4223 │
││ ppid │ 3944 │
> /usr/bin/nu ││ name │ /usr/bin/nu │
nu ││ status │ Running │
nu ││ cpu │ 28.78 │
nu ││ mem │ 37.4 MiB │
nu ││ virtual │ 1.4 GiB │
nu │╰─────────┴─────────────╯
6/258 5/0 │
> 'nu │
```

The item will be returned as the same structured Nushell type that was fed into `sk`:

```nushell
> ps | sk --format {get name} --preview {}
╭─────────┬─────────────╮
│ pid │ 4223 │
│ ppid │ 3944 │
│ name │ /usr/bin/nu │
│ status │ Running │
│ cpu │ 28.57 │
│ mem │ 37.8 MiB │
│ virtual │ 1.4 GiB │
╰─────────┴─────────────╯
```

Of course, the result of the command can be piped into another command:

```nushell
> ps | sk --format {get name} --preview {} | kill $in.pid
```

## Notable flags

nu_plugin_skim aims to repliacte skim's sytnax, but there are some differences to better integrate with Nushell:

* `--multi` / `-m` - this flag works exactly the same as in the regular skim, but unlike the regular skim that always returns text - here `sk` returns structured Nushell data, and this flag changes the type of that data. Without it, the chosen item is returned as is. With it, it gets returned as a list (even if the user only chooses a single item)

```nushell
> seq 1 10 | sk | describe
int
> seq 1 10 | sk -m | describe
list (stream)
```

* `--format` - this is a flag that the regular skim does not have. It receives a Nushell closure, and pipes the items through that closure before showing them as user selectable rows.

If the closure returns a complex Nushell data type, it'll be formatted in a notation similar to [Nushell's `debug` command](http://www.nushell.sh/commands/docs/debug.html)

Note that in skim one would use `--with-nth` for a similar purpose - but the syntax and usage are different enough to warren a different name.

* `--preview` - unlike the regular skim, where `--preview` accepts a string, here `--preview` accepts a Nushell closure. The item under the cursor will get piped into the closure and the result will be displayed inside the preview window.

If the closure returns a complex Nushell data type, it'll be formatted into a table.

To display the item as is, use the empty closure `--preview {}`.

* `--bind` - unlike regular `sk` that recieves bindings as a comma-separated list of colon-seperated key-values (e.g. `sk --bind alt-s:down,alt-w:up`), here the bindings are given as a record (e.g. `sk --bind {alt-s: down, alt-w: up}`)

* `--expect` - unlike regular `sk` that receives actions as comma-specified list of keys (e.g. `sk --expect ctrl-v,ctrl-t,alt-s`), here the actions are given as a list of strings (e.g. `sk --expect [ctrl-v, ctrl-t, alt-s]`)

When this flag is given (even with an empty list), the result will be a record with an `action` field that contains the action (or `null`, if regular `Return` was used) and a `selected` field that contains the selected item (or a list of them, if `-m` / `--multi` was used)

* `--tiebreak` - unlike regular `sk` that receives actions as comma-specified list of criteria, here the criteria are given as a list of strings.

* `--algo` and `--case` - in regular `sk` setting them to an unsupported value will fall back to the default. Here it'll raise an error.

* `--pre-select-items` - unlike regular `sk` where it receives a newline-seperated list, here it receives a Nushell list.