2022-10-03 18:40:16 +02:00
|
|
|
mod nu_protocol_table;
|
2020-06-20 05:41:53 +02:00
|
|
|
mod table;
|
2022-05-16 17:35:57 +02:00
|
|
|
mod table_theme;
|
|
|
|
mod textstyle;
|
2020-06-20 05:41:53 +02:00
|
|
|
|
2022-10-03 18:40:16 +02:00
|
|
|
pub use nu_protocol_table::NuTable;
|
2022-07-14 22:24:32 +02:00
|
|
|
pub use table::{Alignments, Table};
|
2022-05-16 17:35:57 +02:00
|
|
|
pub use table_theme::TableTheme;
|
2022-10-03 18:40:16 +02:00
|
|
|
pub use textstyle::{Alignment, TextStyle};
|
|
|
|
|
2022-11-16 15:03:56 +01:00
|
|
|
use tabled::{Padding, Style, Width};
|
|
|
|
|
2022-10-03 18:40:16 +02:00
|
|
|
pub fn string_width(text: &str) -> usize {
|
|
|
|
tabled::papergrid::util::string_width_multiline_tab(text, 4)
|
|
|
|
}
|
2022-11-16 15:03:56 +01:00
|
|
|
|
|
|
|
pub fn wrap_string(text: &str, width: usize) -> String {
|
|
|
|
// well... it's not effitient to build a table to wrap a string,
|
|
|
|
// but ... it's better than a copy paste
|
|
|
|
tabled::builder::Builder::from_iter([[text]])
|
|
|
|
.build()
|
|
|
|
.with(Padding::zero())
|
|
|
|
.with(Style::empty())
|
|
|
|
.with(Width::wrap(width))
|
|
|
|
.to_string()
|
|
|
|
}
|
[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.
![image](https://user-images.githubusercontent.com/343840/205088971-a8c0262f-f222-4641-b13a-027fbd4f5e1a.png)
If you type `:help` you an see the help screen with some information on
what tui keybindings are available.
![image](https://user-images.githubusercontent.com/343840/205089461-c4c54217-7ec4-4fa0-96c0-643d68dc0062.png)
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.
![image](https://user-images.githubusercontent.com/343840/205090155-3558a14b-87b7-4072-8dfb-dc8cc2ef4943.png)
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.
![image](https://user-images.githubusercontent.com/343840/205089185-3c065551-0792-43d6-a13c-a52762856209.png)
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".
![image](https://user-images.githubusercontent.com/343840/205090809-e686ff0f-6d0b-4347-8ed0-8c59adfbd741.png)
If you hit the `t` key it will now transpose the view to look like this.
![image](https://user-images.githubusercontent.com/343840/205090948-a834d7f2-1713-4dfe-92fe-5432f287df3d.png)
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.
![image](https://user-images.githubusercontent.com/343840/205091822-cac79130-3a52-4ca8-9210-eba5be30ed58.png)
If you type `open --raw Cargo.toml | explore` you get this where you can
scroll left, right, up, down. This is called preview mode.
![image](https://user-images.githubusercontent.com/343840/205091990-69455191-ab78-4fea-a961-feafafc16d70.png)
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.
![image](https://user-images.githubusercontent.com/343840/205092569-436aa55a-0474-48d5-ab71-baddb1f43027.png)
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
|
|
|
|
|
|
|
pub fn string_truncate(text: &str, width: usize) -> String {
|
|
|
|
// todo: change me...
|
|
|
|
|
|
|
|
match text.lines().next() {
|
|
|
|
Some(first_line) => tabled::builder::Builder::from_iter([[first_line]])
|
|
|
|
.build()
|
|
|
|
.with(tabled::Style::empty())
|
|
|
|
.with(tabled::Padding::zero())
|
|
|
|
.with(tabled::Width::truncate(width))
|
|
|
|
.to_string(),
|
|
|
|
None => String::new(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn string_wrap(text: &str, width: usize) -> String {
|
|
|
|
// todo: change me...
|
|
|
|
|
|
|
|
if text.is_empty() {
|
|
|
|
return String::new();
|
|
|
|
}
|
|
|
|
|
|
|
|
tabled::builder::Builder::from_iter([[text]])
|
|
|
|
.build()
|
|
|
|
.with(tabled::Style::empty())
|
|
|
|
.with(tabled::Padding::zero())
|
|
|
|
.with(tabled::Width::wrap(width))
|
|
|
|
.to_string()
|
|
|
|
}
|