nushell/crates/nu-explore/src/commands/help.rs

112 lines
3.4 KiB
Rust

use super::ViewCommand;
use crate::views::{Preview, ViewConfig};
use anyhow::Result;
use nu_ansi_term::Color;
use nu_protocol::{
engine::{EngineState, Stack},
Value,
};
use once_cell::sync::Lazy;
#[derive(Debug, Default, Clone)]
pub struct HelpCmd {}
impl HelpCmd {
pub const NAME: &'static str = "help";
pub fn view() -> Preview {
Preview::new(&HELP_MESSAGE)
}
}
static HELP_MESSAGE: Lazy<String> = Lazy::new(|| {
let title = nu_ansi_term::Style::new().bold().underline();
let code = nu_ansi_term::Style::new().bold().fg(Color::Blue);
// There is probably a nicer way to do this formatting inline
format!(
r#"{}
Explore helps you dynamically navigate through your data!
{}
Launch Explore by piping data into it: {}
Move around: Use the cursor keys
Drill down into records+tables: Press <Enter> to select a cell, move around with cursor keys, press <Enter> again
Go back/up a level: Press <Esc>
Transpose (flip rows+columns): Press "t"
Expand (show all nested data): Press "e"
Open this help page : Type ":help" then <Enter>
Open an interactive REPL: Type ":try" then <Enter>
Scroll up/down: Use the "Page Up" and "Page Down" keys
Exit Explore: Type ":q" then <Enter>, or Ctrl+D. Alternately, press <Esc> until Explore exits
{}
Most commands support search via regular expressions.
You can type "/" and type a pattern you want to search on. Then hit <Enter> and you will see the search results.
To go to the next hit use "<n>" key. You also can do a reverse search by using "?" instead of "/".
"#,
title.paint("Explore"),
title.paint("Basics"),
code.paint("ls | explore"),
title.paint("Search")
)
});
// TODO: search help could use some updating... search results get shown immediately after typing, don't need to press Enter
// const HELP_MESSAGE: &str = r#"# Explore
// Explore helps you dynamically navigate through your data
// ## Basics
// Move around: Use the cursor keys
// Drill down into records+tables: Press <Enter> to select a cell, move around with cursor keys, then press <Enter> again
// Go back/up a level: Press <Esc>
// Transpose data (flip rows and columns): Press "t"
// Expand data (show all nested data): Press "e"
// Open this help page : Type ":help" then <Enter>
// Open an interactive REPL: Type ":try" then <Enter>
// Scroll up/down: Use the "Page Up" and "Page Down" keys
// Exit Explore: Type ":q" then <Enter>, or Ctrl+D. Alternately, press <Esc> until Explore exits
// ## Search
// Most commands support search via regular expressions.
// You can type "/" and type a pattern you want to search on.
// Then hit <Enter> and you will see the search results.
// To go to the next hit use "<n>" key.
// You also can do a reverse search by using "?" instead of "/".
// "#;
impl ViewCommand for HelpCmd {
type View = Preview;
fn name(&self) -> &'static str {
Self::NAME
}
fn usage(&self) -> &'static str {
""
}
fn parse(&mut self, _: &str) -> Result<()> {
Ok(())
}
fn spawn(
&mut self,
_: &EngineState,
_: &mut Stack,
_: Option<Value>,
_: &ViewConfig,
) -> Result<Self::View> {
Ok(HelpCmd::view())
}
}