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: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/idanarye/nu_plugin_skim
- Owner: idanarye
- License: mit
- Created: 2024-06-05T13:30:58.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-10-20T20:47:43.000Z (3 months ago)
- Last Synced: 2024-10-21T01:18:31.216Z (3 months ago)
- Language: Rust
- Size: 188 KB
- Stars: 20
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nu - nu_plugin_skim
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.