[MVP][WIP] `less` like pager (#6984)
Run it as `explore`.
#### example
```nu
ls | explore
```
Configuration points in `config.nu` file.
```
# A 'explore' utility config
explore_config: {
highlight: { bg: 'yellow', fg: 'black' }
status_bar: { bg: '#C4C9C6', fg: '#1D1F21' }
command_bar: { fg: '#C4C9C6' }
split_line: '#404040'
cursor: true
# selected_column: 'blue'
# selected_row: { fg: 'yellow', bg: '#C1C2A3' }
# selected_cell: { fg: 'white', bg: '#777777' }
# line_shift: false,
# line_index: false,
# line_head_top: false,
# line_head_bottom: false,
}
```
You can start without a pipeline and type `explore` and it'll give you a
few tips.

If you type `:help` you an see the help screen with some information on
what tui keybindings are available.

From the `:help` screen you can now hit `i` and that puts you in
`cursor` aka `inspection` mode and you can move the cursor left right up
down and it you put it on an area such as `[table 5 rows]` and hit the
enter key, you'll see something like this, which shows all the `:`
commands. If you hit `esc` it will take you to the previous screen.

If you then type `:try` you'll get this type of window where you can
type in the top portion and see results in the bottom.

The `:nu` command is interesting because you can type pipelines like
`:nu ls | sort-by type size` or another pipeline of your choosing such
as `:nu sys` and that will show the table that looks like this, which
we're calling "table mode".

If you hit the `t` key it will now transpose the view to look like this.

In table mode or transposed table mode you can use the `i` key to
inspect any collapsed field like `{record 8 fields}`, `[table 16 rows]`,
`[list x]`, etc.
One of the original benefits was that when you're in a view that has a
lot of columns, `explore` gives you the ability to scroll left, right,
up, and down.
`explore` is also smart enough to know when you're in table mode versus
preview mode. If you do `open Cargo.toml | explore` you get this.

If you type `open --raw Cargo.toml | explore` you get this where you can
scroll left, right, up, down. This is called preview mode.

When you're in table mode, you can also type `:preview`. So, with `open
--raw Cargo.toml | explore`, if you type `:preview`, it will look like
this.

Signed-off-by: Maxim Zhiburt <zhiburt@gmail.com>
Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
2022-12-01 16:32:10 +01:00
|
|
|
use std::{
|
|
|
|
io::Result,
|
|
|
|
time::{Duration, Instant},
|
|
|
|
};
|
|
|
|
|
|
|
|
use crossterm::event::{poll, read, Event, KeyEvent};
|
|
|
|
|
|
|
|
pub struct UIEvents {
|
|
|
|
tick_rate: Duration,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Cfg {
|
|
|
|
pub tick_rate: Duration,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Cfg {
|
|
|
|
fn default() -> Cfg {
|
|
|
|
Cfg {
|
|
|
|
tick_rate: Duration::from_millis(250),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl UIEvents {
|
|
|
|
pub fn new() -> UIEvents {
|
|
|
|
UIEvents::with_config(Cfg::default())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_config(config: Cfg) -> UIEvents {
|
|
|
|
UIEvents {
|
|
|
|
tick_rate: config.tick_rate,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn next(&self) -> Result<Option<KeyEvent>> {
|
|
|
|
let now = Instant::now();
|
|
|
|
match poll(self.tick_rate) {
|
|
|
|
Ok(true) => match read()? {
|
|
|
|
Event::Key(event) => Ok(Some(event)),
|
|
|
|
_ => {
|
|
|
|
let time_spent = now.elapsed();
|
|
|
|
let rest = self.tick_rate - time_spent;
|
|
|
|
|
|
|
|
Self { tick_rate: rest }.next()
|
|
|
|
}
|
|
|
|
},
|
|
|
|
Ok(false) => Ok(None),
|
|
|
|
Err(err) => Err(err),
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 23:12:33 +01:00
|
|
|
|
|
|
|
pub fn try_next(&self) -> Result<Option<KeyEvent>> {
|
|
|
|
match poll(Duration::default()) {
|
|
|
|
Ok(true) => match read()? {
|
|
|
|
Event::Key(event) => Ok(Some(event)),
|
|
|
|
_ => Ok(None),
|
|
|
|
},
|
|
|
|
Ok(false) => Ok(None),
|
|
|
|
Err(err) => Err(err),
|
|
|
|
}
|
|
|
|
}
|
[MVP][WIP] `less` like pager (#6984)
Run it as `explore`.
#### example
```nu
ls | explore
```
Configuration points in `config.nu` file.
```
# A 'explore' utility config
explore_config: {
highlight: { bg: 'yellow', fg: 'black' }
status_bar: { bg: '#C4C9C6', fg: '#1D1F21' }
command_bar: { fg: '#C4C9C6' }
split_line: '#404040'
cursor: true
# selected_column: 'blue'
# selected_row: { fg: 'yellow', bg: '#C1C2A3' }
# selected_cell: { fg: 'white', bg: '#777777' }
# line_shift: false,
# line_index: false,
# line_head_top: false,
# line_head_bottom: false,
}
```
You can start without a pipeline and type `explore` and it'll give you a
few tips.

If you type `:help` you an see the help screen with some information on
what tui keybindings are available.

From the `:help` screen you can now hit `i` and that puts you in
`cursor` aka `inspection` mode and you can move the cursor left right up
down and it you put it on an area such as `[table 5 rows]` and hit the
enter key, you'll see something like this, which shows all the `:`
commands. If you hit `esc` it will take you to the previous screen.

If you then type `:try` you'll get this type of window where you can
type in the top portion and see results in the bottom.

The `:nu` command is interesting because you can type pipelines like
`:nu ls | sort-by type size` or another pipeline of your choosing such
as `:nu sys` and that will show the table that looks like this, which
we're calling "table mode".

If you hit the `t` key it will now transpose the view to look like this.

In table mode or transposed table mode you can use the `i` key to
inspect any collapsed field like `{record 8 fields}`, `[table 16 rows]`,
`[list x]`, etc.
One of the original benefits was that when you're in a view that has a
lot of columns, `explore` gives you the ability to scroll left, right,
up, and down.
`explore` is also smart enough to know when you're in table mode versus
preview mode. If you do `open Cargo.toml | explore` you get this.

If you type `open --raw Cargo.toml | explore` you get this where you can
scroll left, right, up, down. This is called preview mode.

When you're in table mode, you can also type `:preview`. So, with `open
--raw Cargo.toml | explore`, if you type `:preview`, it will look like
this.

Signed-off-by: Maxim Zhiburt <zhiburt@gmail.com>
Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
2022-12-01 16:32:10 +01:00
|
|
|
}
|