mysh 0.1.17 → 0.2.0
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/lib/mysh.rb +28 -25
- data/lib/mysh/expression.rb +1 -9
- data/lib/mysh/external_ruby.rb +1 -1
- data/lib/mysh/internal/action.rb +3 -11
- data/lib/mysh/internal/action_pool.rb +6 -20
- data/lib/mysh/internal/actions/actions_path.rb +2 -2
- data/lib/mysh/internal/actions/cd.rb +14 -23
- data/lib/mysh/internal/actions/exit.rb +10 -7
- data/lib/mysh/internal/actions/gls.rb +63 -8
- data/lib/mysh/internal/actions/help.rb +20 -33
- data/lib/mysh/internal/actions/help/help.txt +4 -4
- data/lib/mysh/internal/actions/help/help_env.txt +14 -0
- data/lib/mysh/internal/actions/help/help_expr.txt +3 -2
- data/lib/mysh/internal/actions/help/help_gls.txt +41 -0
- data/lib/mysh/internal/actions/help/help_help.txt +7 -4
- data/lib/mysh/internal/actions/help/help_math.txt +1 -1
- data/lib/mysh/internal/actions/help/help_ruby.txt +21 -0
- data/lib/mysh/internal/actions/help/help_show.txt +12 -0
- data/lib/mysh/internal/actions/help/history.txt +19 -0
- data/lib/mysh/internal/actions/help/quick.txt +25 -0
- data/lib/mysh/internal/actions/help/sub_help.rb +41 -0
- data/lib/mysh/internal/actions/history.rb +46 -10
- data/lib/mysh/internal/actions/pwd.rb +18 -0
- data/lib/mysh/internal/actions/show.rb +22 -13
- data/lib/mysh/internal/actions/show/env.rb +43 -0
- data/lib/mysh/internal/actions/show/ruby.rb +50 -0
- data/lib/mysh/internal/actions/type.rb +27 -0
- data/lib/mysh/internal/actions/vls.rb +12 -12
- data/lib/mysh/internal/decorate.rb +2 -2
- data/lib/mysh/internal/format.rb +2 -4
- data/lib/mysh/internal/format/array.rb +23 -13
- data/lib/mysh/internal/format/bullets.rb +2 -2
- data/lib/mysh/internal/format/columns.rb +6 -11
- data/lib/mysh/internal/format/nil.rb +13 -0
- data/lib/mysh/internal/format/string.rb +23 -9
- data/lib/mysh/internal/manage.rb +2 -2
- data/lib/mysh/quick.rb +32 -0
- data/lib/mysh/user_input.rb +11 -4
- data/lib/mysh/user_input/parse.rb +1 -1
- data/lib/mysh/user_input/smart_source.rb +1 -1
- data/lib/mysh/version.rb +1 -1
- data/mysh.gemspec +1 -1
- data/samples/show.txt +1 -1
- data/tests/my_shell_tests.rb +25 -18
- metadata +16 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
mysh version: {{ Mysh::VERSION }}
|
1
|
+
Help: mysh version: {{ Mysh::VERSION }}
|
2
2
|
|
3
3
|
The mysh is a shell program inspired by the Ruby programming language in the
|
4
4
|
same way the csh was inspired by the "C" programming language.
|
@@ -6,12 +6,12 @@ same way the csh was inspired by the "C" programming language.
|
|
6
6
|
In mysh, commands fall into one of three broad categories. There are:
|
7
7
|
|
8
8
|
1) "=" expressions: Any line beginning with an "=" will be evaluated as a Ruby
|
9
|
-
language expression. For more see the '
|
9
|
+
language expression. For more see the '?=' or '?math' commands.
|
10
10
|
|
11
11
|
2) Internal mysh commands are processed within mysh itself. The following set
|
12
12
|
of commands are supported:
|
13
13
|
|
14
|
-
{{ Mysh::COMMANDS.actions_info.mysh_bulletize
|
14
|
+
{{ Mysh::COMMANDS.actions_info.mysh_bulletize }}
|
15
15
|
|
16
16
|
3) All other commands are executed by the system using the standard shell or
|
17
17
|
the appropriate ruby interpreter. If the command has a '.rb' extension, it
|
@@ -23,5 +23,5 @@ In mysh, commands fall into one of three broad categories. There are:
|
|
23
23
|
Note: If an internal command has the same name as an external command, adding a
|
24
24
|
leading space will force the use of the external command.
|
25
25
|
|
26
|
-
Help on help: For a list of all help topics see the '
|
26
|
+
Help on help: For a list of all help topics see the '??' command.
|
27
27
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Help: mysh show env command summary:
|
2
|
+
|
3
|
+
The show env (or @env) command is used to display useful information about the
|
4
|
+
current execution environment. This includes:
|
5
|
+
|
6
|
+
user - The current user name.
|
7
|
+
home - The current home directory.
|
8
|
+
name - The path/name of the mysh program currently executing.
|
9
|
+
shell - The path/name of the system command shell.
|
10
|
+
host - The name of the host computer.
|
11
|
+
os - The current operating system.
|
12
|
+
|
13
|
+
path - An easy-to-read, formatted version of the current search path.
|
14
|
+
|
@@ -1,6 +1,7 @@
|
|
1
|
-
mysh Ruby expression support summary:
|
1
|
+
Help: mysh Ruby expression support summary:
|
2
2
|
|
3
|
-
All command lines that begin with = are evaluated as Ruby expressions.
|
3
|
+
All command lines that begin with = are evaluated as Ruby expressions. The
|
4
|
+
results of this evaluation are displayed.
|
4
5
|
|
5
6
|
Notes:
|
6
7
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Help: mysh gls command summary:
|
2
|
+
|
3
|
+
The gls command is used to display information about the loaded ruby gems. The
|
4
|
+
usage template for this command is:
|
5
|
+
|
6
|
+
mysh>gls <options> <mask>
|
7
|
+
|
8
|
+
Where:
|
9
|
+
|
10
|
+
<options> is one of:
|
11
|
+
"-l" -- display detailed information on the selected gems.
|
12
|
+
none -- display only the names of the selected gems.
|
13
|
+
|
14
|
+
<mask> is an optional, case-sensitive pattern for filtering out the gems
|
15
|
+
displayed. If omitted, all gems are displayed.
|
16
|
+
|
17
|
+
Examples:
|
18
|
+
|
19
|
+
mysh>gls
|
20
|
+
actionpack erubis mini_readline rails-deprecated_sanitizer tzinfo
|
21
|
+
actionview i18n minitest rails-dom-testing vls
|
22
|
+
activesupport in_array nokogiri rails-html-sanitizer
|
23
|
+
bigdecimal json psych railties
|
24
|
+
builder loofah rack thor
|
25
|
+
crass mini_portile2 rack-test thread_safe
|
26
|
+
|
27
|
+
mysh>gls -l vls
|
28
|
+
name vls
|
29
|
+
version 0.4.0
|
30
|
+
date 2016-10-08 00:00:00 UTC
|
31
|
+
summary A version listing utility.
|
32
|
+
description A CLI and Rails console utility that lists the versions of modules
|
33
|
+
used by the specified gems/ruby files or Rails project.
|
34
|
+
executables vls
|
35
|
+
authors Peter Camilleri
|
36
|
+
email peter.c.camilleri@gmail.com
|
37
|
+
homepage http://teuthida-technologies.com/
|
38
|
+
|
39
|
+
A complete guide to the gem specification's properties may be found at:
|
40
|
+
http://guides.rubygems.org/specification-reference/
|
41
|
+
|
@@ -1,9 +1,12 @@
|
|
1
|
-
mysh
|
1
|
+
Help: mysh help command summary:
|
2
2
|
|
3
|
-
The help (or ?) command is used to get either general help about mysh
|
4
|
-
|
3
|
+
The help (or ?) command is used to get either general help about mysh or an
|
4
|
+
optional specified topic.
|
5
|
+
|
6
|
+
If the longer form, help is used, a space is required before the topic. If the
|
7
|
+
quick form, ? is used, the space is optional.
|
5
8
|
|
6
9
|
The available help topics are:
|
7
10
|
|
8
|
-
{{ HELP.actions_info.mysh_bulletize
|
11
|
+
{{ HELP.actions_info.mysh_bulletize }}
|
9
12
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Help: mysh show ruby command summary:
|
2
|
+
|
3
|
+
The show ruby (or @ruby) command is used to display useful information about
|
4
|
+
the current ruby environment. This includes:
|
5
|
+
|
6
|
+
location - The path/name of the current ruby interpreter.
|
7
|
+
description - A comprehensive summary of the version and other such data.
|
8
|
+
version - The version of ruby.
|
9
|
+
patch - Its patch level.
|
10
|
+
revision - Its revision level.
|
11
|
+
date - The date of its release.
|
12
|
+
platform - The target platform.
|
13
|
+
copyright - The legal ownership of the software.
|
14
|
+
engine - The internal engine in the software.
|
15
|
+
host - A summary of the host operating environment.
|
16
|
+
host cpu - A (crude) approximation of the installed cpu.
|
17
|
+
host os - The current operating system.
|
18
|
+
host vendor - The current environment vendor/genre.
|
19
|
+
|
20
|
+
$: - An easy-to-read, formatted version of $: or the ruby search path.
|
21
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Help: mysh show command summary:
|
2
|
+
|
3
|
+
The show (or @) command is used to inspect various aspects of the mysh
|
4
|
+
environment specified by the item parameter.
|
5
|
+
|
6
|
+
If the longer form, show is used, a space is required before the topic. If the
|
7
|
+
quick form, @ is used, the space is optional.
|
8
|
+
|
9
|
+
The available show items are:
|
10
|
+
|
11
|
+
{{ SHOW.actions_info.mysh_bulletize }}
|
12
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Help: mysh history command summary:
|
2
|
+
|
3
|
+
The history (or !) command is used to allow the user greater control over the
|
4
|
+
history of commands that have been entered. The action taken by the history
|
5
|
+
command is controlled by an optional parameter.
|
6
|
+
|
7
|
+
If the longer form, show is used, a space is required before the parameter. If
|
8
|
+
the quick form, ! is used, the space is optional.
|
9
|
+
|
10
|
+
Quick Long Command
|
11
|
+
Form Form Description
|
12
|
+
===== ======= ===========
|
13
|
+
! history Display the history buffer.
|
14
|
+
|
15
|
+
!5 history 5 Retrieve history entry 5 and present this to the user
|
16
|
+
as the next command.
|
17
|
+
|
18
|
+
!clear history clear Clear the command history.
|
19
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Help: mysh quick commands summary:
|
2
|
+
|
3
|
+
In mysh, some commands are identified by a single character, making them easy
|
4
|
+
and quick to enter. Since these commands are always a single character long,
|
5
|
+
it is not necessary (but still acceptable) to place a space between the command
|
6
|
+
and any parameter.
|
7
|
+
|
8
|
+
To be processed as quick, the character must be first in the line.
|
9
|
+
|
10
|
+
The supported quick commands are:
|
11
|
+
|
12
|
+
Quick Long Command
|
13
|
+
Form Form Description
|
14
|
+
===== ======= ===========
|
15
|
+
! history Display the mysh command history, or if an index is specified,
|
16
|
+
retrieve the command with that index value.
|
17
|
+
|
18
|
+
= All command lines that begin with = are evaluated as Ruby
|
19
|
+
expressions. The results of this evaluation are displayed.
|
20
|
+
|
21
|
+
? help Display help information for mysh with an optional topic.
|
22
|
+
|
23
|
+
@ show The show (or @) command is used to inspect various aspects of
|
24
|
+
the mysh environment specified by the item parameter.
|
25
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#* mysh/internal/actions/help/sub_help.rb -- The mysh internal help sub commands.
|
4
|
+
module Mysh
|
5
|
+
|
6
|
+
#* mysh/internal/actions/help/sub_help.rb -- The mysh internal help sub commands.
|
7
|
+
class HelpSubCommand < Action
|
8
|
+
|
9
|
+
#Setup a help command.
|
10
|
+
def initialize(name, description, file_name)
|
11
|
+
super(name, description)
|
12
|
+
@file_name = file_name
|
13
|
+
end
|
14
|
+
|
15
|
+
#Execute a help command.
|
16
|
+
def call(_args)
|
17
|
+
show_handlebar_file(ACTIONS_PATH + 'help/' + @file_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
help = [['', 'General help on mysh.', 'help.txt' ],
|
23
|
+
['show', 'Help on the show command.', 'help_show.txt'],
|
24
|
+
['@', 'Help on the show command.', 'help_show.txt'],
|
25
|
+
['env', 'Help on the show env command.', 'help_env.txt' ],
|
26
|
+
['ruby', 'Help on the show ruby command.', 'help_ruby.txt'],
|
27
|
+
['math', 'Help on math functions.', 'help_math.txt'],
|
28
|
+
['=', 'Help on ruby expressions.', 'help_expr.txt'],
|
29
|
+
['quick', 'Help on quick commands.', 'quick.txt' ],
|
30
|
+
['gls', 'Help on gls internal mysh command.', 'help_gls.txt' ],
|
31
|
+
['!', 'This help on the history command.', 'history.txt' ],
|
32
|
+
['history', 'This help on the history command.', 'history.txt' ],
|
33
|
+
['help', 'This help on the help command.', 'help_help.txt'],
|
34
|
+
['?', 'This help on the help command.', 'help_help.txt']
|
35
|
+
]
|
36
|
+
|
37
|
+
help.each do |parms|
|
38
|
+
HELP.add_action(HelpSubCommand.new(*parms))
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -1,21 +1,57 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
#* internal/actions/history.rb -- The mysh internal history command.
|
3
|
+
#* mysh/internal/actions/history.rb -- The mysh internal history command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
#* history.rb -- The mysh internal history command.
|
7
|
-
class Action
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
#* mysh/internal/actions/history.rb -- The mysh internal history command.
|
7
|
+
class HistoryCommand < Action
|
8
|
+
|
9
|
+
#Execute the history command.
|
10
|
+
def call(args)
|
11
|
+
@args, @history = args, Mysh.input.history
|
11
12
|
|
12
13
|
#The history command should not be part of the history.
|
13
|
-
history.pop
|
14
|
+
@history.pop
|
15
|
+
|
16
|
+
pull_index || clear_history || show_history
|
17
|
+
end
|
14
18
|
|
15
|
-
|
19
|
+
private
|
20
|
+
|
21
|
+
#Deal with history index arguments
|
22
|
+
def pull_index
|
23
|
+
index = @args[0].to_i
|
24
|
+
|
25
|
+
if (1..@history.length) === index
|
26
|
+
Mysh.input.instance_options[:initial] = @history[index-1]
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#Clear the history buffer.
|
33
|
+
def clear_history
|
34
|
+
if @args[0] == 'clear'
|
35
|
+
@history.clear
|
36
|
+
else
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#Just show the history.
|
42
|
+
def show_history
|
43
|
+
@history.each_with_index do |item, index|
|
44
|
+
puts "#{index+1}: #{item}"
|
45
|
+
end
|
16
46
|
end
|
17
47
|
|
18
|
-
COMMANDS.add_alias('!', 'history')
|
19
48
|
end
|
20
|
-
end
|
21
49
|
|
50
|
+
#Add the history commands to the library.
|
51
|
+
desc = 'Display the mysh command history, or if an index is specified, ' +
|
52
|
+
'retrieve the command with that index value.'
|
53
|
+
COMMANDS.add_action(HistoryCommand.new('history <index>', desc))
|
54
|
+
#The history command action object.
|
55
|
+
HISTORY_COMMAND = HistoryCommand.new('!<index>', desc)
|
56
|
+
COMMANDS.add_action(HISTORY_COMMAND)
|
57
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#* mysh/internal/actions/pwd.rb -- The mysh internal pwd command.
|
4
|
+
module Mysh
|
5
|
+
|
6
|
+
#* mysh/internal/actions/pwd.rb -- The mysh internal pwd command.
|
7
|
+
class PwdCommand < Action
|
8
|
+
|
9
|
+
#Execute the cd command.
|
10
|
+
def call(_args)
|
11
|
+
puts decorate(Dir.pwd)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
desc = 'Display the current working directory.'
|
17
|
+
COMMANDS.add_action(PwdCommand.new('pwd', desc))
|
18
|
+
end
|
@@ -1,27 +1,36 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
#* internal/actions/show.rb -- The mysh show command.
|
3
|
+
#* mysh/internal/actions/show.rb -- The mysh internal show command.
|
4
4
|
module Mysh
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
desc = 'Display a text file with optional embedded handlebars.'
|
11
|
-
|
12
|
-
COMMANDS.add('show <file>', desc) do |args|
|
13
|
-
file_name = args.shift
|
6
|
+
#Show items.
|
7
|
+
SHOW = ActionPool.new("SHOW") do |args|
|
8
|
+
puts "No show data found for #{args[0].inspect}. See ?@ for more."
|
9
|
+
end
|
14
10
|
|
15
|
-
|
11
|
+
#* mysh/internal/actions/show.rb -- The mysh internal show command.
|
12
|
+
class ShowCommand < Action
|
16
13
|
|
17
|
-
|
18
|
-
|
14
|
+
#Execute a help command by routing it to a sub-command.
|
15
|
+
#<br>Endemic Code Smells
|
16
|
+
#* :reek:UtilityFunction
|
17
|
+
def call(args)
|
18
|
+
if args.empty?
|
19
|
+
puts "An item is needed for the show command."
|
19
20
|
else
|
20
|
-
|
21
|
+
SHOW[args[0]].call(args)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
end
|
25
26
|
|
27
|
+
# The base help command.
|
28
|
+
desc = 'Display information about a part of mysh. See ?@ for more.'
|
29
|
+
COMMANDS.add_action(ShowCommand.new('show <item>', desc))
|
30
|
+
#The show command action object.
|
31
|
+
SHOW_COMMAND = ShowCommand.new('@<item>', desc)
|
32
|
+
COMMANDS.add_action(SHOW_COMMAND)
|
26
33
|
end
|
27
34
|
|
35
|
+
#Load up the extra help actions!
|
36
|
+
Dir[Mysh::Action::ACTIONS_PATH + 'show/*.rb'].each {|file| require file }
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#* mysh/internal/actions/show/env.rb -- Get help on the mysh environment.
|
4
|
+
module Mysh
|
5
|
+
|
6
|
+
#* mysh/internal/actions/show/env.rb -- Get help on the mysh environment.
|
7
|
+
class EnvInfoCommand < Action
|
8
|
+
|
9
|
+
#Execute the ? shell command.
|
10
|
+
def call(_args)
|
11
|
+
puts "Key mysh environment information.", ""
|
12
|
+
puts info.mysh_bulletize, "",
|
13
|
+
path.mysh_bulletize, ""
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
#Get the info
|
19
|
+
def info
|
20
|
+
[["user", ENV['USER']],
|
21
|
+
["home", ENV['HOME']],
|
22
|
+
["name", decorate($PROGRAM_NAME)],
|
23
|
+
["shell", ENV['SHELL'] || ENV['ComSpec']],
|
24
|
+
["host", ENV['HOSTNAME'] || ENV['COMPUTERNAME']],
|
25
|
+
["os", ENV['OS']],
|
26
|
+
["term", ENV['TERM']],
|
27
|
+
["disp", ENV['DISPLAY']],
|
28
|
+
["edit", ENV['EDITOR']]]
|
29
|
+
end
|
30
|
+
|
31
|
+
#Get the path.
|
32
|
+
#<br>Endemic Code Smells
|
33
|
+
#* :reek:UtilityFunction
|
34
|
+
def path
|
35
|
+
[["path"].concat(ENV['PATH'].split(File::PATH_SEPARATOR))]
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
desc = 'Get information about the current shell environment. ' +
|
41
|
+
'See ?env for more.'
|
42
|
+
SHOW.add_action(EnvInfoCommand.new('env', desc))
|
43
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#* mysh/internal/actions/show/ruby.rb -- Get help on the ruby environment.
|
4
|
+
module Mysh
|
5
|
+
|
6
|
+
#* mysh/internal/actions/show/ruby.rb -- Get help on the ruby environment.
|
7
|
+
class RubyInfoCommand < Action
|
8
|
+
|
9
|
+
#Execute the ? shell command.
|
10
|
+
def call(_args)
|
11
|
+
puts "Key ruby environment information.", ""
|
12
|
+
puts info.mysh_bulletize, "",
|
13
|
+
path.mysh_bulletize, ""
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
#Get the info
|
19
|
+
#<br>Endemic Code Smells
|
20
|
+
#* :reek:UtilityFunction
|
21
|
+
def info
|
22
|
+
[["location", RbConfig.ruby],
|
23
|
+
["description", RUBY_DESCRIPTION],
|
24
|
+
["version", RUBY_VERSION],
|
25
|
+
["patch", RUBY_PATCHLEVEL],
|
26
|
+
["revision", RUBY_REVISION],
|
27
|
+
["date", RUBY_RELEASE_DATE],
|
28
|
+
["platform", RUBY_PLATFORM],
|
29
|
+
["copyright", RUBY_COPYRIGHT],
|
30
|
+
["engine", RUBY_ENGINE],
|
31
|
+
["host", RbConfig::CONFIG['host']],
|
32
|
+
["host cpu", RbConfig::CONFIG['host_cpu']],
|
33
|
+
["host os", RbConfig::CONFIG['host_os']],
|
34
|
+
["host vendor", RbConfig::CONFIG['host_vendor']]
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
38
|
+
#Get the path.
|
39
|
+
#<br>Endemic Code Smells
|
40
|
+
#* :reek:UtilityFunction
|
41
|
+
def path
|
42
|
+
[["$:"].concat($:)]
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
desc = 'Get information about the current ruby environment. ' +
|
48
|
+
'See ?ruby for more.'
|
49
|
+
SHOW.add_action(RubyInfoCommand.new('ruby', desc))
|
50
|
+
end
|