mysh 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +93 -58
- data/lib/mysh.rb +3 -3
- data/lib/mysh/internal/action.rb +6 -0
- data/lib/mysh/internal/actions/help/{help_env.txt → env.txt} +0 -0
- data/lib/mysh/internal/actions/help/{help_expr.txt → expr.txt} +0 -0
- data/lib/mysh/internal/actions/help/{help_gls.txt → gls.txt} +0 -0
- data/lib/mysh/internal/actions/help/{help_help.txt → h_o_h.txt} +0 -0
- data/lib/mysh/internal/actions/help/hbar.txt +35 -0
- data/lib/mysh/internal/actions/help/kbd.txt +31 -0
- data/lib/mysh/internal/actions/help/{help_math.txt → math.txt} +0 -0
- data/lib/mysh/internal/actions/help/{help_ruby.txt → ruby.txt} +0 -0
- data/lib/mysh/internal/actions/help/{help_show.txt → show.txt} +0 -0
- data/lib/mysh/internal/actions/help/sub_help.rb +17 -13
- data/lib/mysh/internal/actions/show.rb +1 -1
- data/lib/mysh/internal/actions/show/ruby.rb +1 -1
- data/lib/mysh/quick.rb +9 -21
- data/lib/mysh/user_input.rb +9 -5
- data/lib/mysh/version.rb +1 -1
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e474248b127024d5dc807794564924ba04f5f21c
|
4
|
+
data.tar.gz: 712489e71e81a7202a2a54c7d1b18fc67fc58628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d9b6f82a8a2bc3430f209753b7a07753aa74dfcda8a6233bc010ef7eb15a45490b214ffe63ff1edae3e1c18ebc24a1c6a11909711664f14be6c913139c9e8c0
|
7
|
+
data.tar.gz: 24073b1333985dae86d44167841b7ca41d91401606cf1a4ca702a1b205702f9da474d9b98e531ac213a8ddda79dddc0b3283417a46a1b9ff3f913d0b52f39bd3
|
data/README.md
CHANGED
@@ -45,11 +45,16 @@ Or install it yourself as:
|
|
45
45
|
|
46
46
|
## Usage
|
47
47
|
|
48
|
-
The mysh gem includes a simple executable called mysh.
|
49
|
-
|
48
|
+
The mysh gem includes a simple executable called mysh. Command entry is a
|
49
|
+
typical cli. For more information, see the mini_readline gem at
|
50
|
+
( https://github.com/PeterCamilleri/mini_readline )
|
50
51
|
|
51
|
-
|
52
|
-
|
52
|
+
When running mysh, the user is presented with a command prompt:
|
53
|
+
|
54
|
+
```
|
55
|
+
$ mysh
|
56
|
+
mysh>
|
57
|
+
```
|
53
58
|
|
54
59
|
Then start entering some commands! This prompt can be used to execute four
|
55
60
|
sorts of commands:
|
@@ -76,6 +81,26 @@ reset Reset the execution environment to the default state.
|
|
76
81
|
result Returns the result of the previous expression.
|
77
82
|
x.lineage Get the class lineage of the object x.
|
78
83
|
```
|
84
|
+
For example:
|
85
|
+
```
|
86
|
+
mysh>=a=42
|
87
|
+
42
|
88
|
+
mysh>=a
|
89
|
+
42
|
90
|
+
mysh>=result
|
91
|
+
42
|
92
|
+
mysh>=a.lineage
|
93
|
+
"Fixnum instance < Fixnum < Integer < Numeric < Object < BasicObject"
|
94
|
+
mysh>=reset
|
95
|
+
|
96
|
+
mysh>=a
|
97
|
+
NameError: undefined local variable or method `a' for #<Mysh::ExecHost:0x1d71e18 @owner=Mysh>
|
98
|
+
mysh>=result
|
99
|
+
|
100
|
+
mysh>
|
101
|
+
```
|
102
|
+
|
103
|
+
|
79
104
|
|
80
105
|
The Ruby expression execution environment has direct access to many advanced
|
81
106
|
Math functions. For example, to compute the cosine of 3.141592653589793 use:
|
@@ -125,31 +150,54 @@ Internal commands are recognized by name and are executed by mysh directly.
|
|
125
150
|
The following set of commands are supported:
|
126
151
|
|
127
152
|
```
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
153
|
+
!<index> Display the mysh command history, or if an index is specified,
|
154
|
+
retrieve the command with that index value.
|
155
|
+
?<topic> Display help information for mysh with an optional topic.
|
156
|
+
@<item> Display information about a part of mysh. See ?@ for more.
|
157
|
+
cd <dir> Change directory to the optional <dir> parameter and then
|
158
|
+
display the current working directory.
|
159
|
+
exit Exit mysh.
|
160
|
+
gls <-l> <mask> Display the loaded ruby gems. See ?gls for more.
|
161
|
+
help <topic> Display help information for mysh with an optional topic.
|
162
|
+
history <index> Display the mysh command history, or if an index is specified,
|
163
|
+
retrieve the command with that index value.
|
164
|
+
pwd Display the current working directory.
|
165
|
+
quit Exit mysh.
|
166
|
+
show <item> Display information about a part of mysh. See ?@ for more.
|
167
|
+
type Display a text file with optional embedded handlebars.
|
168
|
+
vls <mask> Display the loaded modules, matching the optional mask, that
|
169
|
+
have version info.
|
140
170
|
```
|
141
|
-
Of note is the command "help help" which provides a list of
|
171
|
+
Of note is the command "help help" or "??" which provides a list of all
|
172
|
+
available help topics.
|
142
173
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
174
|
+
```
|
175
|
+
Help: mysh help command summary:
|
176
|
+
|
177
|
+
The help (or ?) command is used to get either general help about mysh or an
|
178
|
+
optional specified topic.
|
179
|
+
|
180
|
+
If the longer form, help is used, a space is required before the topic. If the
|
181
|
+
quick form, ? is used, the space is optional.
|
182
|
+
|
183
|
+
The available help topics are:
|
184
|
+
|
185
|
+
General help on mysh.
|
186
|
+
! This help on the history command.
|
187
|
+
= Help on ruby expressions.
|
188
|
+
? This help on the help command.
|
189
|
+
@ Help on the show command.
|
190
|
+
env Help on the show env command.
|
191
|
+
gls Help on gls internal mysh command.
|
192
|
+
help This help on the help command.
|
193
|
+
history This help on the history command.
|
194
|
+
kbd Help on mysh keyboard mapping.
|
195
|
+
math Help on math functions.
|
196
|
+
quick Help on quick commands.
|
197
|
+
ruby Help on the show ruby command.
|
198
|
+
show Help on the show command.
|
199
|
+
{{ Help on mysh handlebars.
|
200
|
+
```
|
153
201
|
|
154
202
|
#### External commands:
|
155
203
|
|
@@ -184,19 +232,25 @@ located at:
|
|
184
232
|
|
185
233
|
A survey of the contents of that folder will reveal the nature of these files.
|
186
234
|
|
187
|
-
New internal commands may also be added in code via the the
|
188
|
-
InternalCommand class of the Mysh module. The code to do this would look
|
235
|
+
New internal commands may also be added in code via the the add_action method
|
236
|
+
of the InternalCommand class of the Mysh module. The code to do this would look
|
189
237
|
something like this:
|
190
238
|
|
191
239
|
```ruby
|
192
240
|
module Mysh
|
193
|
-
class Action
|
241
|
+
class NewCommand < Action
|
194
242
|
|
195
|
-
|
196
|
-
|
243
|
+
#This method is called when the command is executed.
|
244
|
+
def call(args)
|
197
245
|
end
|
198
246
|
|
247
|
+
|
199
248
|
end
|
249
|
+
|
250
|
+
desc = "A succinct description of what this command does."
|
251
|
+
command_name = 'new <item>'
|
252
|
+
COMMANDS.add_action(NewCommand.new(command_name, desc))
|
253
|
+
|
200
254
|
end
|
201
255
|
```
|
202
256
|
|
@@ -206,16 +260,19 @@ separated with spaces. The command is the first word of this string. For
|
|
206
260
|
example a command_name of:
|
207
261
|
|
208
262
|
```
|
209
|
-
"
|
263
|
+
"new <item>"
|
210
264
|
```
|
211
265
|
|
212
|
-
will create a command called "
|
266
|
+
will create a command called "new" with a title of "new <item>"
|
213
267
|
|
214
268
|
* command_description is a string or an array of strings that describe the
|
215
269
|
command. This serves as the descriptive help for the command. The help display
|
216
270
|
code handles matters like word wrap automatically.
|
217
|
-
|
218
|
-
|
271
|
+
|
272
|
+
#### About command args
|
273
|
+
|
274
|
+
The call method take one parameter called args. The args parameter is an array
|
275
|
+
of zero or more arguments that were entered with the command.
|
219
276
|
|
220
277
|
So if a command is given
|
221
278
|
|
@@ -225,28 +282,6 @@ the args array will contain:
|
|
225
282
|
|
226
283
|
["abc", "this is a string", "23", "--launch", "--all"]
|
227
284
|
|
228
|
-
#### Adding Command Aliases
|
229
|
-
|
230
|
-
Commands sometimes have more than one possible name. This is supported with
|
231
|
-
the add_alias method:
|
232
|
-
|
233
|
-
```ruby
|
234
|
-
module Mysh
|
235
|
-
class Action
|
236
|
-
|
237
|
-
add_alias(new_name, old_name)
|
238
|
-
|
239
|
-
end
|
240
|
-
end
|
241
|
-
```
|
242
|
-
#### Add Method Return Values
|
243
|
-
Both the add and add_alias methods return the newly created action instance.
|
244
|
-
This may be useful, for example, if it is desired to add singleton methods to
|
245
|
-
the action in order to extend functionality.
|
246
|
-
|
247
|
-
Note that when an action is aliased, none of the singleton methods are copied
|
248
|
-
across and these will have to be regenerated in the new action object.
|
249
|
-
|
250
285
|
## Contributing
|
251
286
|
|
252
287
|
#### Plan A
|
data/lib/mysh.rb
CHANGED
@@ -20,7 +20,7 @@ module Mysh
|
|
20
20
|
setup
|
21
21
|
|
22
22
|
while @mysh_running do
|
23
|
-
execute_a_command
|
23
|
+
execute_a_command(@exec_host.eval_handlebars(get_command("mysh")))
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -32,8 +32,8 @@ module Mysh
|
|
32
32
|
end
|
33
33
|
|
34
34
|
#Execute a single line of input.
|
35
|
-
def self.execute_a_command
|
36
|
-
try_execute_command(
|
35
|
+
def self.execute_a_command(str)
|
36
|
+
try_execute_command(str)
|
37
37
|
|
38
38
|
rescue MiniReadlineEOI
|
39
39
|
@mysh_running = false
|
data/lib/mysh/internal/action.rb
CHANGED
@@ -17,6 +17,12 @@ module Mysh
|
|
17
17
|
@exec_binding = mysh_binding
|
18
18
|
end
|
19
19
|
|
20
|
+
#Parse the string and call the action.
|
21
|
+
def quick_parse_and_call(str)
|
22
|
+
call(Mysh.parse_args(str[1...-1]))
|
23
|
+
:action
|
24
|
+
end
|
25
|
+
|
20
26
|
#Get information about the action.
|
21
27
|
def action_info
|
22
28
|
[@name].concat(@description)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Help: About mysh handlebars:
|
2
|
+
|
3
|
+
In mysh, it is possible to embed snippets of ruby into text files or on the
|
4
|
+
command line through the use of handlebars. Handlebars look like this:
|
5
|
+
|
6
|
+
\{\{ code goes here \}\}
|
7
|
+
|
8
|
+
Lets see a simple example of putting the result of a calculation into the
|
9
|
+
command line:
|
10
|
+
|
11
|
+
mysh>echo \{\{ (1..10).map {|i| i.to_s}.join(" ") \}\} > foo.txt
|
12
|
+
mysh>type foo.txt
|
13
|
+
1 2 3 4 5 6 7 8 9 10
|
14
|
+
|
15
|
+
Handlebars work by evaluating the ruby code within the \{\{ \}\} sequence in
|
16
|
+
the appropriate execution environment. For the command line, this is the same
|
17
|
+
environment used for the '=' quick execution command. For example:
|
18
|
+
|
19
|
+
mysh>=a="A very long string indeed!"
|
20
|
+
"A very long string indeed!"
|
21
|
+
mysh>echo \{\{ a \}\}
|
22
|
+
A very long string indeed!
|
23
|
+
|
24
|
+
The value returned by expression is coverted to a string (if needed) and then
|
25
|
+
inserted in place of the handlebar expression. There are, however, times when
|
26
|
+
it is not desired to insert anything in the place of the code snippet. For
|
27
|
+
those cases, simply end the expression with a '#' character. For example:
|
28
|
+
|
29
|
+
mysh>echo \{\{ "not embedded" #\}\} \{\{ "embedded" \}\}
|
30
|
+
embedded
|
31
|
+
|
32
|
+
Finally, it may be that it is desired to embed braces into a text file or
|
33
|
+
the command line. In that case precede the brace with a baclslash character
|
34
|
+
like: \\{ or \\}
|
35
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Help: mysh keyboard mappings:
|
2
|
+
|
3
|
+
The mysh shell uses the mini_readline gem to supports an interactive command
|
4
|
+
line experience. The user interface is mapped through the keyboard, based on
|
5
|
+
the current operating platform.
|
6
|
+
|
7
|
+
The keyboard (and alias) mappings are listed below:
|
8
|
+
|
9
|
+
Editor Action | Windows Key Alias | Mac/Linux Key Alias
|
10
|
+
-----------------+--------------------------+---------------------------
|
11
|
+
Enter | Enter | Enter
|
12
|
+
Left | Left Arrow | Left Arrow, Ctrl-b
|
13
|
+
Word Left | Ctrl Left Arrow | Ctrl Left Arrow Alt-b
|
14
|
+
Right | Right Arrow | Right Arrow Ctrl-f
|
15
|
+
Word Right | Ctrl Right Arrow | Ctrl Right Arrow Alt-f
|
16
|
+
Go to start | Home | Home Ctrl-a
|
17
|
+
Go to end | End | End Ctrl-E
|
18
|
+
Previous History | Up Arrow | Up Arrow Ctrl-r
|
19
|
+
Next History | Down Arrow | Down Arrow
|
20
|
+
Erase Left | Backspace Ctrl-h | Backspace Ctrl-h
|
21
|
+
Erase All Left | | Ctrl-u
|
22
|
+
Erase Right | Delete Ctrl-Backspace | Delete Ctrl-Backspace
|
23
|
+
Erase All Right | | Ctrl-k
|
24
|
+
Erase All | Escape | Ctrl-l
|
25
|
+
Auto-complete | Tab Ctrl-i | Tab Ctrl-i
|
26
|
+
Quick exit mysh | Ctrl-z | Alt-z
|
27
|
+
|
28
|
+
Notes:
|
29
|
+
Windows keys are aliased through the numeric key pad unless NumLock is on.
|
30
|
+
Mac/Linux mappings may use Escape letter if Alt-letter is unavailable.
|
31
|
+
|
File without changes
|
File without changes
|
File without changes
|
@@ -19,19 +19,23 @@ module Mysh
|
|
19
19
|
|
20
20
|
end
|
21
21
|
|
22
|
-
help
|
23
|
-
|
24
|
-
|
25
|
-
['
|
26
|
-
['
|
27
|
-
['
|
28
|
-
['
|
29
|
-
['
|
30
|
-
['
|
31
|
-
['
|
32
|
-
['
|
33
|
-
['
|
34
|
-
['
|
22
|
+
#Add help topics here. Don't sweat the order; they get sorted by name.
|
23
|
+
# Name Description Help File
|
24
|
+
help = [['', 'General help on mysh.', 'help.txt' ],
|
25
|
+
['show', 'Help on the show command.', 'show.txt' ],
|
26
|
+
['@', 'Help on the show command.', 'show.txt' ],
|
27
|
+
['env', 'Help on the show env command.', 'env.txt' ],
|
28
|
+
['ruby', 'Help on the show ruby command.', 'ruby.txt' ],
|
29
|
+
['math', 'Help on math functions.', 'math.txt' ],
|
30
|
+
['=', 'Help on ruby expressions.', 'expr.txt' ],
|
31
|
+
['quick', 'Help on quick commands.', 'quick.txt' ],
|
32
|
+
['gls', 'Help on gls internal mysh command.', 'gls.txt' ],
|
33
|
+
['!', 'This help on the history command.', 'history.txt'],
|
34
|
+
['history', 'This help on the history command.', 'history.txt'],
|
35
|
+
['kbd', 'Help on mysh keyboard mapping.', 'kbd.txt' ],
|
36
|
+
['{{', 'Help on mysh handlebars.', 'hbar.txt' ],
|
37
|
+
['help', 'This help on the help command.', 'h_o_h.txt' ],
|
38
|
+
['?', 'This help on the help command.', 'h_o_h.txt' ]
|
35
39
|
]
|
36
40
|
|
37
41
|
help.each do |parms|
|
@@ -13,7 +13,7 @@ module Mysh
|
|
13
13
|
|
14
14
|
#Execute a help command by routing it to a sub-command.
|
15
15
|
#<br>Endemic Code Smells
|
16
|
-
#* :reek:UtilityFunction
|
16
|
+
#* :reek:UtilityFunction :reek:FeatureEnvy
|
17
17
|
def call(args)
|
18
18
|
if args.empty?
|
19
19
|
puts "An item is needed for the show command."
|
data/lib/mysh/quick.rb
CHANGED
@@ -3,30 +3,18 @@
|
|
3
3
|
#* mysh/internal/quick.rb -- The mysh internal quick commands.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
#
|
7
|
-
|
8
|
-
case str[0]
|
9
|
-
when '!'
|
10
|
-
HISTORY_COMMAND.call(parse_args(str[1...-1]))
|
11
|
-
:history
|
12
|
-
|
13
|
-
when '='
|
14
|
-
@exec_host.execute(str)
|
15
|
-
:expression
|
16
|
-
|
17
|
-
when '?'
|
18
|
-
HELP_COMMAND.call(parse_args(str[1...-1]))
|
19
|
-
:help
|
6
|
+
#A hash of quick command short cuts and their actions.
|
7
|
+
QUICK = Hash.new(lambda {|_str| false})
|
20
8
|
|
21
|
-
|
22
|
-
|
23
|
-
|
9
|
+
QUICK['!'] = lambda {|str| HISTORY_COMMAND.quick_parse_and_call(str) }
|
10
|
+
QUICK['='] = lambda {|str| @exec_host.execute(str); :expression }
|
11
|
+
QUICK['?'] = lambda {|str| HELP_COMMAND.quick_parse_and_call(str) }
|
12
|
+
QUICK['@'] = lambda {|str| SHOW_COMMAND.quick_parse_and_call(str) }
|
24
13
|
|
25
|
-
|
26
|
-
|
27
|
-
|
14
|
+
#Try to execute the string as a quick command.
|
15
|
+
def self.try_execute_quick_command(str)
|
16
|
+
QUICK[str[0]].call(str)
|
28
17
|
end
|
29
18
|
|
30
|
-
|
31
19
|
end
|
32
20
|
|
data/lib/mysh/user_input.rb
CHANGED
@@ -15,18 +15,22 @@ module Mysh
|
|
15
15
|
end
|
16
16
|
|
17
17
|
#Get one command from the user.
|
18
|
-
def self.get_command
|
19
|
-
initial_input = @input.readline(prompt: '
|
18
|
+
def self.get_command(root="")
|
19
|
+
initial_input = @input.readline(prompt: root + '>')
|
20
20
|
@input.instance_options[:initial] = ""
|
21
|
-
get_command_extra(initial_input)
|
21
|
+
get_command_extra(initial_input, root)
|
22
|
+
|
23
|
+
rescue MiniReadlineEOI
|
24
|
+
@mysh_running = false
|
25
|
+
"\n"
|
22
26
|
end
|
23
27
|
|
24
28
|
private
|
25
29
|
|
26
30
|
#Get any continuations of the inputs
|
27
|
-
def self.get_command_extra(str)
|
31
|
+
def self.get_command_extra(str, root)
|
28
32
|
if /\\\s*$/ =~ str
|
29
|
-
parms = {prompt: '
|
33
|
+
parms = {prompt: root + '\\', prefix: str[0] }
|
30
34
|
get_command_extra($PREMATCH + "\n" + @input.readline(parms))
|
31
35
|
else
|
32
36
|
str
|
data/lib/mysh/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mysh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -162,16 +162,18 @@ files:
|
|
162
162
|
- lib/mysh/internal/actions/exit.rb
|
163
163
|
- lib/mysh/internal/actions/gls.rb
|
164
164
|
- lib/mysh/internal/actions/help.rb
|
165
|
+
- lib/mysh/internal/actions/help/env.txt
|
166
|
+
- lib/mysh/internal/actions/help/expr.txt
|
167
|
+
- lib/mysh/internal/actions/help/gls.txt
|
168
|
+
- lib/mysh/internal/actions/help/h_o_h.txt
|
169
|
+
- lib/mysh/internal/actions/help/hbar.txt
|
165
170
|
- lib/mysh/internal/actions/help/help.txt
|
166
|
-
- lib/mysh/internal/actions/help/help_env.txt
|
167
|
-
- lib/mysh/internal/actions/help/help_expr.txt
|
168
|
-
- lib/mysh/internal/actions/help/help_gls.txt
|
169
|
-
- lib/mysh/internal/actions/help/help_help.txt
|
170
|
-
- lib/mysh/internal/actions/help/help_math.txt
|
171
|
-
- lib/mysh/internal/actions/help/help_ruby.txt
|
172
|
-
- lib/mysh/internal/actions/help/help_show.txt
|
173
171
|
- lib/mysh/internal/actions/help/history.txt
|
172
|
+
- lib/mysh/internal/actions/help/kbd.txt
|
173
|
+
- lib/mysh/internal/actions/help/math.txt
|
174
174
|
- lib/mysh/internal/actions/help/quick.txt
|
175
|
+
- lib/mysh/internal/actions/help/ruby.txt
|
176
|
+
- lib/mysh/internal/actions/help/show.txt
|
175
177
|
- lib/mysh/internal/actions/help/sub_help.rb
|
176
178
|
- lib/mysh/internal/actions/history.rb
|
177
179
|
- lib/mysh/internal/actions/pwd.rb
|