nu_command/help/
help_escapes.rs1use nu_engine::command_prelude::*;
2
3#[derive(Clone)]
4pub struct HelpEscapes;
5
6impl Command for HelpEscapes {
7 fn name(&self) -> &str {
8 "help escapes"
9 }
10
11 fn description(&self) -> &str {
12 "Show help on nushell string escapes."
13 }
14
15 fn signature(&self) -> Signature {
16 Signature::build("help escapes")
17 .category(Category::Core)
18 .input_output_types(vec![(Type::Nothing, Type::table())])
19 .allow_variants_without_examples(true)
20 }
21
22 fn run(
23 &self,
24 _engine_state: &EngineState,
25 _stack: &mut Stack,
26 call: &Call,
27 _input: PipelineData,
28 ) -> Result<PipelineData, ShellError> {
29 let head = call.head;
30 let escape_info = generate_escape_info();
31 let mut recs = vec![];
32
33 for escape in escape_info {
34 recs.push(Value::record(
35 record! {
36 "sequence" => Value::string(escape.sequence, head),
37 "output" => Value::string(escape.output, head),
38 },
39 head,
40 ));
41 }
42
43 Ok(Value::list(recs, call.head).into_pipeline_data())
44 }
45}
46
47struct EscapeInfo {
48 sequence: String,
49 output: String,
50}
51
52fn generate_escape_info() -> Vec<EscapeInfo> {
53 vec![
54 EscapeInfo {
55 sequence: "\\\"".into(),
56 output: "\"".into(),
57 },
58 EscapeInfo {
59 sequence: "\\\'".into(),
60 output: "\'".into(),
61 },
62 EscapeInfo {
63 sequence: "\\\\".into(),
64 output: "\\".into(),
65 },
66 EscapeInfo {
67 sequence: "\\/".into(),
68 output: "/".into(),
69 },
70 EscapeInfo {
71 sequence: "\\(".into(),
72 output: "(".into(),
73 },
74 EscapeInfo {
75 sequence: "\\)".into(),
76 output: ")".into(),
77 },
78 EscapeInfo {
79 sequence: "\\{".into(),
80 output: "{".into(),
81 },
82 EscapeInfo {
83 sequence: "\\}".into(),
84 output: "}".into(),
85 },
86 EscapeInfo {
87 sequence: "\\$".into(),
88 output: "$".into(),
89 },
90 EscapeInfo {
91 sequence: "\\^".into(),
92 output: "^".into(),
93 },
94 EscapeInfo {
95 sequence: "\\#".into(),
96 output: "#".into(),
97 },
98 EscapeInfo {
99 sequence: "\\|".into(),
100 output: "|".into(),
101 },
102 EscapeInfo {
103 sequence: "\\~".into(),
104 output: "~".into(),
105 },
106 EscapeInfo {
107 sequence: "\\a".into(),
108 output: "alert bell".into(),
109 },
110 EscapeInfo {
111 sequence: "\\b".into(),
112 output: "backspace".into(),
113 },
114 EscapeInfo {
115 sequence: "\\e".into(),
116 output: "escape".into(),
117 },
118 EscapeInfo {
119 sequence: "\\f".into(),
120 output: "form feed".into(),
121 },
122 EscapeInfo {
123 sequence: "\\n".into(),
124 output: "newline (line feed)".into(),
125 },
126 EscapeInfo {
127 sequence: "\\r".into(),
128 output: "carriage return".into(),
129 },
130 EscapeInfo {
131 sequence: "\\t".into(),
132 output: "tab".into(),
133 },
134 EscapeInfo {
135 sequence: "\\u{X...}".into(),
136 output: "a single unicode character, where X... is 1-6 digits (0-9, A-F)".into(),
137 },
138 ]
139}
140
141#[cfg(test)]
142mod test {
143 #[test]
144 fn test_examples() {
145 use super::HelpEscapes;
146 use crate::test_examples;
147 test_examples(HelpEscapes {})
148 }
149}