mysh 0.6.9 → 0.6.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +25 -5
- data/lib/mysh.rb +19 -9
- data/lib/mysh/{internal/action.rb → action.rb} +8 -8
- data/lib/mysh/{internal/action_pool.rb → action_pool.rb} +8 -8
- data/lib/mysh/{internal/actions/command_line.rb → command_line.rb} +10 -10
- data/lib/mysh/{internal/actions/command_line → command_line}/debug.rb +9 -11
- data/lib/mysh/command_line/history.rb +61 -0
- data/lib/mysh/{internal/actions/command_line → command_line}/init.rb +8 -8
- data/lib/mysh/{internal/actions/command_line → command_line}/load.rb +5 -5
- data/lib/mysh/{internal/actions/command_line → command_line}/pause.rb +6 -8
- data/lib/mysh/{internal/actions/command_line → command_line}/post_prompt.rb +10 -12
- data/lib/mysh/{internal/actions/command_line → command_line}/pre_prompt.rb +10 -12
- data/lib/mysh/{internal/actions/command_line → command_line}/prompt.rb +9 -10
- data/lib/mysh/command_line/quit.rb +19 -0
- data/lib/mysh/{internal/actions/command_line → command_line}/usage.rb +4 -4
- data/lib/mysh/expression.rb +11 -31
- data/lib/mysh/external.rb +4 -5
- data/lib/mysh/globalize.rb +14 -10
- data/lib/mysh/handlebars.rb +10 -13
- data/lib/mysh/handlebars/eval_handlebars.rb +38 -0
- data/lib/mysh/{internal/actions/help → help}/env.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/expr.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/gem.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/gls.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/h_o_h.txt +1 -1
- data/lib/mysh/{internal/actions/help → help}/hbar.txt +11 -0
- data/lib/mysh/{internal/actions/help → help}/help.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/history.txt +7 -0
- data/lib/mysh/{internal/actions/help → help}/init.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/kbd.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/math.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/mls.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/quick.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/ruby.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/show.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/term.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/timed.txt +0 -0
- data/lib/mysh/help/type.txt +28 -0
- data/lib/mysh/{internal/actions/help → help}/types.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/usage.txt +0 -0
- data/lib/mysh/{internal/actions/help → help}/vars.txt +4 -4
- data/lib/mysh/input_wrapper.rb +13 -13
- data/lib/mysh/internal.rb +20 -8
- data/lib/mysh/internal/{actions/cancel.rb → cancel.rb} +0 -0
- data/lib/mysh/internal/{actions/cd.rb → cd.rb} +2 -2
- data/lib/mysh/internal/{actions/comment.rb → comment.rb} +2 -2
- data/lib/mysh/internal/{actions/elapsed.rb → elapsed.rb} +2 -2
- data/lib/mysh/internal/{actions/exit.rb → exit.rb} +0 -0
- data/lib/mysh/internal/{actions/gls.rb → gls.rb} +6 -7
- data/lib/mysh/internal/{actions/help.rb → help.rb} +7 -9
- data/lib/mysh/internal/{actions/history.rb → history.rb} +10 -9
- data/lib/mysh/internal/load.rb +45 -0
- data/lib/mysh/internal/{actions/mls.rb → mls.rb} +2 -2
- data/lib/mysh/internal/{actions/pwd.rb → pwd.rb} +1 -1
- data/lib/mysh/internal/{actions/say.rb → say.rb} +1 -1
- data/lib/mysh/internal/{actions/show.rb → show.rb} +7 -6
- data/lib/mysh/internal/{actions/help → support}/sub_help.rb +9 -7
- data/lib/mysh/internal/type.rb +38 -0
- data/lib/mysh/internal/{actions/vars.rb → vars.rb} +8 -8
- data/lib/mysh/{init.rb → load_init_file.rb} +3 -3
- data/lib/mysh/process.rb +7 -7
- data/lib/mysh/quick.rb +10 -4
- data/lib/mysh/shell_variables.rb +9 -4
- data/lib/mysh/shell_variables/evaluate.rb +2 -11
- data/lib/mysh/shell_variables/shell_variable_keeper.rb +6 -7
- data/lib/mysh/shell_variables/shell_variable_store.rb +13 -14
- data/lib/mysh/{internal/actions/show → show}/env.rb +3 -5
- data/lib/mysh/{internal/actions/show → show}/gem.rb +3 -16
- data/lib/mysh/{internal/actions/show → show}/ruby.rb +0 -0
- data/lib/mysh/{internal/actions/show → show}/term.rb +5 -7
- data/lib/mysh/sources/console.rb +11 -7
- data/lib/mysh/sources/parse.rb +7 -10
- data/lib/mysh/sources/smart_auto_complete.rb +5 -5
- data/lib/mysh/sources/string.rb +6 -6
- data/lib/mysh/string_helpers.rb +37 -0
- data/lib/mysh/system.rb +2 -2
- data/lib/mysh/user_input.rb +5 -9
- data/lib/mysh/version.rb +4 -4
- data/mysh.gemspec +4 -3
- data/samples/show.txt +2 -0
- data/tests/my_shell_tests.rb +18 -6
- metadata +77 -65
- data/lib/mysh/binding_wrapper.rb +0 -21
- data/lib/mysh/handlebars/string.rb +0 -22
- data/lib/mysh/internal/actions/actions_path.rb +0 -15
- data/lib/mysh/internal/actions/command_line/quit.rb +0 -19
- data/lib/mysh/internal/actions/load.rb +0 -36
- data/lib/mysh/internal/actions/type.rb +0 -22
- data/lib/mysh/internal/manage.rb +0 -20
- data/lib/mysh/internal/to_file_spec.rb +0 -26
- data/lib/mysh/pre_processor.rb +0 -11
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# Monkey patches for Mysh handlebars
|
4
|
+
class String
|
5
|
+
|
6
|
+
# Evaluate any variable substitutions in the input.
|
7
|
+
def eval_handlebars(evaluator=$mysh_exec_binding)
|
8
|
+
string, text, buffer = self, "", []
|
9
|
+
|
10
|
+
# Translate the string with embedded code into Ruby code.
|
11
|
+
until string.empty?
|
12
|
+
text, code, string = string.partition(/{{.*?}}/m)
|
13
|
+
|
14
|
+
unless text.empty?
|
15
|
+
text = text.gsub(/\\[{}]/) {|found| found[1]}
|
16
|
+
buffer << "_m_<<#{text.inspect};"
|
17
|
+
else
|
18
|
+
buffer << "" if buffer.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
unless code.empty?
|
22
|
+
if code[-3] == "#"
|
23
|
+
buffer << "#{code[2...-3]};"
|
24
|
+
else
|
25
|
+
buffer << "_m_<<(#{code[2...-2]}).to_s;"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Evaluate the result of the translation.
|
31
|
+
if buffer.length > 1
|
32
|
+
evaluator.eval("_m_ = '';" + buffer.join + "_m_")
|
33
|
+
else
|
34
|
+
text
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -30,6 +30,17 @@ those cases, simply end the expression with a '#' character. For example:
|
|
30
30
|
mysh>echo \{\{ "not embedded" #\}\} \{\{ "embedded" \}\}
|
31
31
|
embedded
|
32
32
|
|
33
|
+
A common use for not embedded code snippets is to act as the control
|
34
|
+
structures. For example:
|
35
|
+
|
36
|
+
\{\{ 3.times do |i| #\}\} The count is: \{\{ i+1 \}\}
|
37
|
+
\{\{ end #\}\}
|
38
|
+
|
39
|
+
Yields the following output:
|
40
|
+
|
41
|
+
{{ 3.times do |i| #}} The count is: {{ i+1 }}
|
42
|
+
{{ end #}}
|
43
|
+
|
33
44
|
Finally, it may be that it is desired to embed braces into a text file or
|
34
45
|
the command line. In that case precede the brace with a backslash character
|
35
46
|
like: \\{ or \\}
|
File without changes
|
@@ -21,3 +21,10 @@ Form Form Description
|
|
21
21
|
regex pattern. Note: This pattern cannot be 'clear'
|
22
22
|
so use 'clea[r]' instead.
|
23
23
|
|
24
|
+
The history buffer is controlled by two variables:
|
25
|
+
|
26
|
+
$$history Is the history buffer enabled?
|
27
|
+
$$no_move Are history entries kept in place or shifted up the buffer?
|
28
|
+
|
29
|
+
These are also controlled by command line options. See ?usage for more info.
|
30
|
+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Help: mysh type command summary:
|
2
|
+
|
3
|
+
The type command is used to display one or more text files. The names of these
|
4
|
+
files are the arguments to this command as are options that control how those
|
5
|
+
files are processed before being displayed.
|
6
|
+
|
7
|
+
Files can be handled in one of two modes:
|
8
|
+
|
9
|
+
raw Files are displayed with no pre-processing
|
10
|
+
cooked Files are displayed after handlebars and shell variables have been
|
11
|
+
processed and the results inserted into the text.
|
12
|
+
|
13
|
+
The default behavior of the type command is set by the \$type variable. This
|
14
|
+
may take the values:
|
15
|
+
|
16
|
+
raw, off, false, no = raw mode (the default value)
|
17
|
+
cooked, on, true, yes = cooked mode
|
18
|
+
|
19
|
+
Within the type command, options can be used to override the defaults:
|
20
|
+
|
21
|
+
+c Force cooked mode.
|
22
|
+
-c Force raw mode.
|
23
|
+
|
24
|
+
Note: This command contrasts with the load command which can also be used to
|
25
|
+
display text files. The difference is the the load command always expands
|
26
|
+
handlebars and shell variables.
|
27
|
+
|
28
|
+
|
File without changes
|
File without changes
|
@@ -4,7 +4,7 @@ In mysh, variables are kept that control the behavior of the shell. This simple
|
|
4
4
|
command is used to set, delete, and display these variables. The basic method
|
5
5
|
for setting a variable is:
|
6
6
|
|
7
|
-
set
|
7
|
+
set \$name=value
|
8
8
|
|
9
9
|
Where:
|
10
10
|
* name is a word matching the regex: /[a-z][a-z0-9_]*/. Lower case only.
|
@@ -14,7 +14,7 @@ To erase the value of a variable, use: set $$name=
|
|
14
14
|
To display the name/value of a variable, use: set $$name
|
15
15
|
To display all variable names/values use: set
|
16
16
|
|
17
|
-
As an escapement, the
|
17
|
+
As an escapement, the strings $$$$ or \\$ map to a single $$.
|
18
18
|
|
19
19
|
Some variables that are used in mysh are:
|
20
20
|
|
@@ -23,8 +23,8 @@ $$date_fmt The format for the date: "%Y-%m-%d". ie: 2017-01-09
|
|
23
23
|
$$debug Does the shell display additional debugging info (true/false)
|
24
24
|
$$h The home folder's path
|
25
25
|
$$name The name given to this mysh session.
|
26
|
-
$$post_prompt The prompt used when a line is continued with a trailing
|
27
|
-
character.
|
26
|
+
$$post_prompt The prompt used when a line is continued with a trailing \
|
27
|
+
character. By default this just a single \
|
28
28
|
$$pre_prompt A prompt string displayed before the actual command prompt.
|
29
29
|
Delete the pre_prompt variable to disable pre-prompting.
|
30
30
|
$$prompt The user prompt.
|
data/lib/mysh/input_wrapper.rb
CHANGED
@@ -1,62 +1,62 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# An action compatible wrapper for a input.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
|
6
|
+
# An action compatible wrapper for a input.
|
7
7
|
class InputWrapper
|
8
8
|
|
9
|
-
#Build an input wrapper.
|
9
|
+
# Build an input wrapper.
|
10
10
|
def initialize(raw)
|
11
11
|
@raw = raw.chomp
|
12
12
|
@raw_command = @raw_body = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
#Access the raw text.
|
15
|
+
# Access the raw text.
|
16
16
|
attr_reader :raw
|
17
17
|
|
18
|
-
#Get the first raw character.
|
18
|
+
# Get the first raw character.
|
19
19
|
def quick_command
|
20
20
|
@raw[0] || ""
|
21
21
|
end
|
22
22
|
|
23
|
-
#Get the balance of the raw string.
|
23
|
+
# Get the balance of the raw string.
|
24
24
|
def quick_body
|
25
25
|
@raw[1..-1] || ""
|
26
26
|
end
|
27
27
|
|
28
|
-
#Get the command word if it exists.
|
28
|
+
# Get the command word if it exists.
|
29
29
|
def raw_command
|
30
30
|
@raw_command ||= @raw.split[0] || ""
|
31
31
|
end
|
32
32
|
|
33
|
-
#Get the parameter text.
|
33
|
+
# Get the parameter text.
|
34
34
|
def raw_body
|
35
35
|
@raw_body ||= @raw[(raw_command.length + 1)..-1] || ""
|
36
36
|
end
|
37
37
|
|
38
|
-
#Get the preprocessed argument text.
|
38
|
+
# Get the preprocessed argument text.
|
39
39
|
def cooked_body
|
40
40
|
raw_body.preprocess
|
41
41
|
end
|
42
42
|
|
43
|
-
#Access the massaged text.
|
43
|
+
# Access the massaged text.
|
44
44
|
def cooked
|
45
45
|
body = cooked_body
|
46
46
|
raw_command + (body.empty? ? "" : " " + body)
|
47
47
|
end
|
48
48
|
|
49
|
-
#Get the parsed arguments
|
49
|
+
# Get the parsed arguments
|
50
50
|
def args
|
51
51
|
Mysh.parse_args(cooked_body)
|
52
52
|
end
|
53
53
|
|
54
|
-
#Get the parsed command line.
|
54
|
+
# Get the parsed command line.
|
55
55
|
def parsed
|
56
56
|
[raw_command] + args
|
57
57
|
end
|
58
58
|
|
59
|
-
#Set up input for a quick style command.
|
59
|
+
# Set up input for a quick style command.
|
60
60
|
def quick
|
61
61
|
@raw_command = quick_command
|
62
62
|
@raw_body = quick_body
|
data/lib/mysh/internal.rb
CHANGED
@@ -1,10 +1,22 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
module Mysh
|
4
|
+
|
5
|
+
# Set up the command action pool.
|
6
|
+
COMMANDS = ActionPool.new("COMMANDS")
|
7
|
+
|
8
|
+
# Try to execute the string as an internal action.
|
9
|
+
def self.try_execute_internal(input)
|
10
|
+
unless input.quick_command == ' '
|
11
|
+
if (action = COMMANDS[input.raw_command])
|
12
|
+
action.process_command(input)
|
13
|
+
:internal
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
# Load up the internal actions!
|
21
|
+
load_spec = MYSH_LIB + "mysh/internal/*.rb"
|
22
|
+
Dir[load_spec].each {|file| require file }
|
File without changes
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# The mysh internal cd command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
#Add the cd command to the library.
|
6
|
+
# Add the cd command to the library.
|
7
7
|
desc = 'Change directory to the optional <dir> parameter ' +
|
8
8
|
'or display the current working directory.'
|
9
9
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# A mysh internal comment.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
#Add comments to the library.
|
6
|
+
# Add comments to the library.
|
7
7
|
desc = 'A mysh comment. No action taken'
|
8
8
|
action = lambda {|_input| :internal}
|
9
9
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# The mysh internal elapsed command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
#Add the elapsed commands to the library.
|
6
|
+
# Add the elapsed commands to the library.
|
7
7
|
desc = 'Execute a command and then display the elapsed time. See ?% for more.'
|
8
8
|
|
9
9
|
action = lambda do |input|
|
File without changes
|
@@ -1,18 +1,18 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# The mysh gls (gem ls) command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
|
6
|
+
# The mysh gls (gem ls) command.
|
7
7
|
class GlsCommand < Action
|
8
8
|
|
9
|
-
#Set up this command.
|
9
|
+
# Set up this command.
|
10
10
|
def initialize(*args)
|
11
11
|
super
|
12
12
|
@report = @mask = @specs = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
#Execute the gls command.
|
15
|
+
# Execute the gls command.
|
16
16
|
def process_command(input)
|
17
17
|
process_args(input.args)
|
18
18
|
gather_gems
|
@@ -57,9 +57,8 @@ module Mysh
|
|
57
57
|
report.puts_format_output_bullets
|
58
58
|
end
|
59
59
|
|
60
|
-
#Get detailed information on a gem specification.
|
61
|
-
|
62
|
-
#* :reek:UtilityFunction
|
60
|
+
# Get detailed information on a gem specification.
|
61
|
+
# Endemic Code Smells :reek:UtilityFunction
|
63
62
|
def info(spec)
|
64
63
|
[["name", spec.name],
|
65
64
|
["version", spec.version],
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# The mysh internal help command.
|
4
4
|
module Mysh
|
5
5
|
|
6
6
|
# Help action pool of topics.
|
@@ -21,12 +21,11 @@ module Mysh
|
|
21
21
|
|
22
22
|
HELP = ActionPool.new("HELP", default)
|
23
23
|
|
24
|
-
|
24
|
+
# The mysh internal help command.
|
25
25
|
class HelpCommand < Action
|
26
26
|
|
27
|
-
#Execute a help command by routing it to a sub-command.
|
28
|
-
|
29
|
-
#* :reek:UtilityFunction
|
27
|
+
# Execute a help command by routing it to a sub-command.
|
28
|
+
# Endemic Code Smells :reek:UtilityFunction
|
30
29
|
def process_command(input)
|
31
30
|
args = input.args
|
32
31
|
HELP[args[0] || ""].process_command(args)
|
@@ -37,12 +36,11 @@ module Mysh
|
|
37
36
|
# The base help command.
|
38
37
|
desc = 'Display help information for mysh with an optional topic. See ?? for more.'
|
39
38
|
COMMANDS.add_action(HelpCommand.new('help <topic>', desc))
|
39
|
+
|
40
40
|
#The help command action object.
|
41
41
|
HELP_COMMAND = HelpCommand.new('?<topic>', desc)
|
42
42
|
COMMANDS.add_action(HELP_COMMAND)
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
#Load up the extra help actions!
|
48
|
-
Dir[Mysh::Action::ACTIONS_PATH + 'help/*.rb'].each {|file| require file }
|
45
|
+
# Load in support for help sub-topics
|
46
|
+
require_relative 'support/sub_help'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
|
3
|
+
# The mysh internal history command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
|
6
|
+
# The mysh internal history command.
|
7
7
|
class HistoryCommand < Action
|
8
8
|
|
9
9
|
#Set up this command.
|
@@ -12,11 +12,11 @@ module Mysh
|
|
12
12
|
@args = @history = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
#Execute the history command.
|
15
|
+
# Execute the history command.
|
16
16
|
def process_command(input)
|
17
17
|
@args, @history = input.args, Mysh.input.history
|
18
18
|
|
19
|
-
#The history command should not be part of the history.
|
19
|
+
# The history command should not be part of the history.
|
20
20
|
@history.pop
|
21
21
|
|
22
22
|
pull_index || clear_history || show_history
|
@@ -24,7 +24,7 @@ module Mysh
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
#Deal with history index arguments
|
27
|
+
# Deal with history index arguments
|
28
28
|
def pull_index
|
29
29
|
index = @args[0].to_i
|
30
30
|
|
@@ -35,7 +35,7 @@ module Mysh
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
#Clear the history buffer.
|
38
|
+
# Clear the history buffer.
|
39
39
|
def clear_history
|
40
40
|
if @args[0] == 'clear'
|
41
41
|
@history.clear
|
@@ -44,7 +44,7 @@ module Mysh
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
#Just show the history.
|
47
|
+
# Just show the history.
|
48
48
|
def show_history
|
49
49
|
pattern = Regexp.new(@args[0] || /./)
|
50
50
|
|
@@ -55,10 +55,11 @@ module Mysh
|
|
55
55
|
|
56
56
|
end
|
57
57
|
|
58
|
-
#Add the history commands to the library.
|
58
|
+
# Add the history commands to the library.
|
59
59
|
desc = 'Display the mysh command history. See ?! for more.'
|
60
60
|
COMMANDS.add_action(HistoryCommand.new('history <arg>', desc))
|
61
|
-
|
61
|
+
|
62
|
+
# The history command action object.
|
62
63
|
HISTORY_COMMAND = HistoryCommand.new('!<arg>', desc)
|
63
64
|
COMMANDS.add_action(HISTORY_COMMAND)
|
64
65
|
end
|