Skip to content

Commit ac2891f

Browse files
authored
Add support for more complex command prompts (#583)
The bashsession lexer did only recognized command prompts starting with one of the characters '#$%>'. This commit adds support for a prefixed block of the form `[.*@.*]`, which is a common layout for command prompts.
1 parent d38fcfc commit ac2891f

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

Diff for: lexers/b/bashsession.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var BashSession = internal.Register(MustNewLazyLexer(
2020
func bashsessionRules() Rules {
2121
return Rules{
2222
"root": {
23-
{`(^[#$%>]\s*)(.*\n?)`, ByGroups(GenericPrompt, Using(Bash)), nil},
23+
{`^((?:\[[^]]+@[^]]+\]\s?)?[#$%>])(\s*)(.*\n?)`, ByGroups(GenericPrompt, Text, Using(Bash)), nil},
2424
{`^.+\n?`, GenericOutput, nil},
2525
},
2626
}

Diff for: lexers/testdata/bashsession.actual

+8
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,11 @@ Hello, world!
55
> make -j build
66
%ls | wc -l
77
5
8+
[user@host]$ whoami
9+
user
10+
[user@host] # id
11+
uid=1000(user) gid=1000(user) groups=1000(user)
12+
[super user :D@super host :D] %if [ 1 -eq 1 ]; then uname; fi
13+
Linux
14+
[user@host]%echo $((1+1))
15+
2

Diff for: lexers/testdata/bashsession.expected

+42-5
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,56 @@
11
[
2-
{"type":"GenericPrompt","value":"$ "},
2+
{"type":"GenericPrompt","value":"$"},
3+
{"type":"Text","value":" "},
34
{"type":"NameBuiltin","value":"echo"},
45
{"type":"Text","value":" "},
56
{"type":"LiteralStringDouble","value":"\"Hello, world!\""},
67
{"type":"Text","value":"\n"},
78
{"type":"GenericOutput","value":"Hello, world!\n"},
8-
{"type":"GenericPrompt","value":"%\t"},
9+
{"type":"GenericPrompt","value":"%"},
10+
{"type":"Text","value":"\t"},
911
{"type":"NameBuiltin","value":"pwd"},
1012
{"type":"Text","value":"\n"},
1113
{"type":"GenericOutput","value":"/User/foo\n"},
12-
{"type":"GenericPrompt","value":"> "},
13-
{"type":"Text","value":"make -j build\n"},
14+
{"type":"GenericPrompt","value":"\u003e"},
15+
{"type":"Text","value":" make -j build\n"},
1416
{"type":"GenericPrompt","value":"%"},
1517
{"type":"Text","value":"ls "},
1618
{"type":"Punctuation","value":"|"},
1719
{"type":"Text","value":" wc -l\n"},
18-
{"type":"GenericOutput","value":"5\n"}
20+
{"type":"GenericOutput","value":"5\n"},
21+
{"type":"GenericPrompt","value":"[user@host]$"},
22+
{"type":"Text","value":" whoami\n"},
23+
{"type":"GenericOutput","value":"user\n"},
24+
{"type":"GenericPrompt","value":"[user@host] #"},
25+
{"type":"Text","value":" id\n"},
26+
{"type":"GenericOutput","value":"uid=1000(user) gid=1000(user) groups=1000(user)\n"},
27+
{"type":"GenericPrompt","value":"[super user :D@super host :D] %"},
28+
{"type":"Keyword","value":"if"},
29+
{"type":"Text","value":" "},
30+
{"type":"Operator","value":"["},
31+
{"type":"Text","value":" "},
32+
{"type":"LiteralNumber","value":"1"},
33+
{"type":"Text","value":" -eq "},
34+
{"type":"LiteralNumber","value":"1"},
35+
{"type":"Text","value":" "},
36+
{"type":"Operator","value":"]"},
37+
{"type":"Punctuation","value":";"},
38+
{"type":"Text","value":" "},
39+
{"type":"Keyword","value":"then"},
40+
{"type":"Text","value":" uname"},
41+
{"type":"Punctuation","value":";"},
42+
{"type":"Text","value":" "},
43+
{"type":"Keyword","value":"fi"},
44+
{"type":"Text","value":"\n"},
45+
{"type":"GenericOutput","value":"Linux\n"},
46+
{"type":"GenericPrompt","value":"[user@host]%"},
47+
{"type":"NameBuiltin","value":"echo"},
48+
{"type":"Text","value":" "},
49+
{"type":"Keyword","value":"$(("},
50+
{"type":"LiteralNumber","value":"1"},
51+
{"type":"Operator","value":"+"},
52+
{"type":"LiteralNumber","value":"1"},
53+
{"type":"Keyword","value":"))"},
54+
{"type":"Text","value":"\n"},
55+
{"type":"GenericOutput","value":"2\n"}
1956
]

0 commit comments

Comments
 (0)