Skip to content

Commit

Permalink
Shell-Session: Improvements (#2208)
Browse files Browse the repository at this point in the history
- Added support for elevated shells starting commands with `#` instead of `$`.
- The user and cwd info `bash` and `sh` print before the interactive shell will now be highlighted.
- Changed the line ends of test files to CRLF.
  • Loading branch information
RunDevelopment authored Feb 24, 2020
1 parent 15983d5 commit bd16bd5
Show file tree
Hide file tree
Showing 6 changed files with 207 additions and 106 deletions.
28 changes: 20 additions & 8 deletions components/prism-shell-session.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,37 @@
].join('|');

Prism.languages['shell-session'] = {
'info': {
// foo@bar:~/files$ exit
// foo@bar$ exit
pattern: /^(?:[^\r\n$#*!]+)(?=[$#])/m,
alias: 'punctuation',
inside: {
'path': {
pattern: /(:)[\s\S]+/,
lookbehind: true
},
'user': /^[^\s@:$#*!/\\]+@[^\s@:$#*!/\\]+(?=:|$)/,
'punctuation': /:/
}
},
'command': {
pattern: RegExp(/\$(?:[^\r\n'"<]|<<str>>)+/.source.replace(/<<str>>/g, strings)),
pattern: RegExp(/[$#](?:[^\r\n'"<]|<<str>>)+/.source.replace(/<<str>>/g, strings)),
greedy: true,
inside: {
'bash': {
pattern: /(\$\s*)[\s\S]+/,
pattern: /(^[$#]\s*)[\s\S]+/,
lookbehind: true,
alias: 'language-bash',
inside: Prism.languages.bash
},
'sh': {
pattern: /^\$/,
'shell-symbol': {
pattern: /^[$#]/,
alias: 'important'
}
}
},
'output': {
pattern: /.(?:.*(?:\r\n?|\n|.$))*/
// output highlighting?
}
'output': /.(?:.*(?:\r\n?|\n|.$))*/
};

}(Prism));
2 changes: 1 addition & 1 deletion components/prism-shell-session.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions examples/prism-shell-session.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,11 @@ <h2>Full example</h2>
> Bar"
Foo
Bar</code></pre>

<p><code class="language-none">bash</code> and <code class="language-none">sh</code> console sessions are fully supported.</p>

<pre><code>foo@bar:/$ cd ~
foo@bar:~$ sudo -i
[sudo] password for foo:
root@bar:~# echo "hello!"
hello!</code></pre>
75 changes: 44 additions & 31 deletions tests/languages/shell-session/command_feature.test
Original file line number Diff line number Diff line change
@@ -1,31 +1,44 @@
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git push
Everything up-to-date

----------------------------------------------------

[
["command", [
["sh", "$"],
["bash", [
["function", "git"],
" checkout master"
]]
]],
["output", "Switched to branch 'master'\nYour branch is up-to-date with 'origin/master'.\n"],

["command", [
["sh", "$"],
["bash", [
["function", "git"],
" push"
]]
]],
["output", "Everything up-to-date"]
]

----------------------------------------------------

Checks for commands.
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git push
Everything up-to-date
# echo "root"
root

----------------------------------------------------

[
["command", [
["shell-symbol", "$"],
["bash", [
["function", "git"],
" checkout master"
]]
]],
["output", "Switched to branch 'master'\r\nYour branch is up-to-date with 'origin/master'.\r\n"],

["command", [
["shell-symbol", "$"],
["bash", [
["function", "git"],
" push"
]]
]],
["output", "Everything up-to-date\r\n"],

["command", [
["shell-symbol", "#"],
["bash", [
["builtin", "echo"],
["string", [
"\"root\""
]]
]]
]],
["output", "root"]
]

----------------------------------------------------

Checks for commands.
132 changes: 66 additions & 66 deletions tests/languages/shell-session/command_string_feature.test
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
$ echo 'Foo
> Bar'
$ echo "Foo
> Bar"

$ echo <<- STRING_END
foo
bar
STRING_END

$ echo <<- "STRING_END"
foo
bar
STRING_END

----------------------------------------------------

[
["command", [
["sh", "$"],
["bash", [
["builtin", "echo"],
["string", [
"'Foo\n> Bar'"
]]
]]
]],

["command", [
["sh", "$"],
["bash", [
["builtin", "echo"],
["string", [
"\"Foo\n> Bar\""
]]
]]
]],

["command", [
["sh", "$"],
["bash", [
["builtin", "echo"],
["operator", [
"<<-"
]],
["string", [
"STRING_END\nfoo\nbar\nSTRING_END"
]]
]]
]],

["command", [
["sh", "$"],
["bash", [
["builtin", "echo"],
["operator", [
"<<-"
]],
["string", "\"STRING_END\"\nfoo\nbar\nSTRING_END"]
]]
]]
]

----------------------------------------------------

Checks for multi-line strings inside commands.
$ echo 'Foo
> Bar'
$ echo "Foo
> Bar"
$ echo <<- STRING_END
foo
bar
STRING_END
$ echo <<- "STRING_END"
foo
bar
STRING_END
----------------------------------------------------
[
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "echo"],
["string", [
"'Foo\r\n> Bar'"
]]
]]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "echo"],
["string", [
"\"Foo\r\n> Bar\""
]]
]]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "echo"],
["operator", [
"<<-"
]],
["string", [
"STRING_END\r\nfoo\r\nbar\r\nSTRING_END"
]]
]]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "echo"],
["operator", [
"<<-"
]],
["string", "\"STRING_END\"\r\nfoo\r\nbar\r\nSTRING_END"]
]]
]]
]
----------------------------------------------------
Checks for multi-line strings inside commands.
68 changes: 68 additions & 0 deletions tests/languages/shell-session/info_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
foo@bar:/var/local$ cd ~
foo@bar:~$ sudo -i
[sudo] password for foo:
root@bar:~# echo "hello!"
hello!

foo@bar$ exit

----------------------------------------------------

[
["info", [
["user", "foo@bar"],
["punctuation", ":"],
["path", "/var/local"]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "cd"],
" ~"
]]
]],

["info", [
["user", "foo@bar"],
["punctuation", ":"],
["path", "~"]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["function", "sudo"],
" -i"
]]
]],
["output", "[sudo] password for foo:\r\n"],

["info", [
["user", "root@bar"],
["punctuation", ":"],
["path", "~"]
]],
["command", [
["shell-symbol", "#"],
["bash", [
["builtin", "echo"],
["string", [
"\"hello!\""
]]
]]
]],
["output", "hello!\r\n\r\n"],

["info", [
["user", "foo@bar"]
]],
["command", [
["shell-symbol", "$"],
["bash", [
["builtin", "exit"]
]]
]]
]

----------------------------------------------------

Checks for the info bash outputs.

0 comments on commit bd16bd5

Please sign in to comment.