rubsh 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +1 -1
- data/README.rdoc +84 -0
- data/Rakefile +1 -1
- data/lib/rub_readline.rb +30 -5
- data/rubsh.gemspec +5 -5
- metadata +16 -6
data/Manifest
CHANGED
data/README.rdoc
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
= Rubsh
|
2
|
+
|
3
|
+
Rubsh was created to be a native shell for ruby users. A irb which can also be
|
4
|
+
used as a normal shell without the akwardness of some of the features of bash
|
5
|
+
and other shells, and with the power of ruby.
|
6
|
+
|
7
|
+
= Installation
|
8
|
+
|
9
|
+
sudo gem source -a http://gemcutter.org
|
10
|
+
sudo gem install rubsh
|
11
|
+
|
12
|
+
Run rubsh on the commandline. Type help for a quick overview of usage.
|
13
|
+
|
14
|
+
= Features
|
15
|
+
|
16
|
+
* readline support
|
17
|
+
* tab completion
|
18
|
+
* aliases
|
19
|
+
* commandline history
|
20
|
+
|
21
|
+
= Usage
|
22
|
+
|
23
|
+
== aliases
|
24
|
+
|
25
|
+
ralias aliases a command.
|
26
|
+
|
27
|
+
Example:
|
28
|
+
ralias 'ls ls -Gh'
|
29
|
+
|
30
|
+
Currently an alias will not be parsed to include other aliases. i.e.
|
31
|
+
doing <tt>ralias 'ls ls -Gh'</tt> followed by <tt>ralias 'll ls -l'</tt> will not get you 'ls -lGh'
|
32
|
+
|
33
|
+
== .rubsh/rc.rb
|
34
|
+
|
35
|
+
Define your own functions, aliases etc in the rc file. It's included to the environment.
|
36
|
+
|
37
|
+
== Shortcuts
|
38
|
+
|
39
|
+
While normal commands as 'ls' etc work transparantly, you can also do things like:
|
40
|
+
|
41
|
+
'*'.ls
|
42
|
+
|
43
|
+
shortcut for Dir.glob(...)
|
44
|
+
|
45
|
+
'*'.ls.du
|
46
|
+
|
47
|
+
Does du on all the results
|
48
|
+
|
49
|
+
It also takes arguments:
|
50
|
+
|
51
|
+
'*'.ls.du(:sh)
|
52
|
+
|
53
|
+
is equivalent to du -sh *
|
54
|
+
|
55
|
+
== Prompt
|
56
|
+
|
57
|
+
use ENV['PR1'] to set your prompt. see 'help prompt' for options from within the shell.
|
58
|
+
|
59
|
+
%h - hostname
|
60
|
+
%u - the username of the current user
|
61
|
+
%w - the current working directory, with $HOME abbreviated with a tilde
|
62
|
+
%W - the basename of the current working directory, with $HOME abbreviated
|
63
|
+
with a tilde
|
64
|
+
%Cb - blue color
|
65
|
+
%Cc - cyan color
|
66
|
+
%Cg - green color
|
67
|
+
%CC - color reset
|
68
|
+
%t - the current time in 24-hour HH:MM:SS format
|
69
|
+
%% - literal %
|
70
|
+
%$ - if the effective UID is 0, a #, otherwise a $
|
71
|
+
|
72
|
+
Example: ENV['PR1'] = "[%u@%h]--(%t)\n\r[%w]%$ "
|
73
|
+
|
74
|
+
== Commandline functions
|
75
|
+
|
76
|
+
Commandline functions must currently be defined as one-liners. They also take an argument, which
|
77
|
+
is what was typed to invoke the command.
|
78
|
+
|
79
|
+
def test(*a); p a;end
|
80
|
+
$ test foo #=> ["test foo"]
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
data/Rakefile
CHANGED
data/lib/rub_readline.rb
CHANGED
@@ -1,10 +1,35 @@
|
|
1
1
|
require 'readline'
|
2
|
+
def get_local_dirs(str)
|
3
|
+
Dir[str+'*'].
|
4
|
+
grep( /^#{Regexp.escape(str)}/ ). #only return dirs which start with str
|
5
|
+
map { |f| f =~ /\s/ ? "\"#{f}\"" : f } # if names have spaces, then quote
|
6
|
+
end
|
7
|
+
|
8
|
+
# tab completion here is bad because we don't know if the str has a 'cd' before it.
|
9
|
+
# That makes us go through the executables as well when we're doing cd str[TAB]
|
10
|
+
def get_executables(str)
|
11
|
+
commands = []
|
12
|
+
ENV["PATH"].split(':').each do |dir|
|
13
|
+
Dir.glob("#{dir}/*").grep( /#{File::SEPARATOR}?#{Regexp.escape(str)}/ ).each do |file|
|
14
|
+
begin
|
15
|
+
stat = File.stat(file)
|
16
|
+
commands << File::basename(file) if stat.executable? and not stat.directory?
|
17
|
+
rescue
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return commands
|
22
|
+
end
|
2
23
|
Readline.completion_proc = Proc.new do |str|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
24
|
+
completions = get_local_dirs(str)
|
25
|
+
|
26
|
+
# if it's the first thing we're typing in, assume this to be a command and not just a dir.
|
27
|
+
# iow, we don't do this for second arg allowing executables not to be completed when
|
28
|
+
# prefixed by example 'cd'.
|
29
|
+
if Readline.line_buffer =~ /^\s*#{Regexp.escape(str)}/
|
30
|
+
completions += get_executables(str)
|
31
|
+
end
|
32
|
+
completions
|
8
33
|
end
|
9
34
|
|
10
35
|
def commands_in_path
|
data/rubsh.gemspec
CHANGED
@@ -2,29 +2,29 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rubsh}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Daniel Bretoi"]
|
9
|
-
s.date = %q{
|
9
|
+
s.date = %q{2010-10-09}
|
10
10
|
s.default_executable = %q{rubsh}
|
11
11
|
s.description = %q{A ruby shell}
|
12
12
|
s.email = %q{daniel@netwalk.org}
|
13
13
|
s.executables = ["rubsh"]
|
14
14
|
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "bin/rubsh", "lib/alias.rb", "lib/commands.rb", "lib/prompt.rb", "lib/rub_readline.rb", "lib/rubsh.rb"]
|
15
|
-
s.files = ["CHANGELOG", "
|
15
|
+
s.files = ["CHANGELOG", "README.rdoc", "Rakefile", "bin/rubsh", "lib/alias.rb", "lib/commands.rb", "lib/prompt.rb", "lib/rub_readline.rb", "lib/rubsh.rb", "rubsh.gemspec", "Manifest"]
|
16
16
|
s.homepage = %q{http://github.com/danielb2/rubsh}
|
17
17
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rubsh", "--main", "README.rdoc"]
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
s.rubyforge_project = %q{rubsh}
|
20
|
-
s.rubygems_version = %q{1.3.
|
20
|
+
s.rubygems_version = %q{1.3.7}
|
21
21
|
s.summary = %q{A ruby shell}
|
22
22
|
|
23
23
|
if s.respond_to? :specification_version then
|
24
24
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
25
|
s.specification_version = 3
|
26
26
|
|
27
|
-
if Gem::Version.new(Gem::
|
27
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
28
|
else
|
29
29
|
end
|
30
30
|
else
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubsh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Daniel Bretoi
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-10-09 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -30,7 +35,6 @@ extra_rdoc_files:
|
|
30
35
|
- lib/rubsh.rb
|
31
36
|
files:
|
32
37
|
- CHANGELOG
|
33
|
-
- Manifest
|
34
38
|
- README.rdoc
|
35
39
|
- Rakefile
|
36
40
|
- bin/rubsh
|
@@ -40,6 +44,7 @@ files:
|
|
40
44
|
- lib/rub_readline.rb
|
41
45
|
- lib/rubsh.rb
|
42
46
|
- rubsh.gemspec
|
47
|
+
- Manifest
|
43
48
|
has_rdoc: true
|
44
49
|
homepage: http://github.com/danielb2/rubsh
|
45
50
|
licenses: []
|
@@ -55,21 +60,26 @@ rdoc_options:
|
|
55
60
|
require_paths:
|
56
61
|
- lib
|
57
62
|
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
58
64
|
requirements:
|
59
65
|
- - ">="
|
60
66
|
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
61
69
|
version: "0"
|
62
|
-
version:
|
63
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
64
72
|
requirements:
|
65
73
|
- - ">="
|
66
74
|
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 1
|
77
|
+
- 2
|
67
78
|
version: "1.2"
|
68
|
-
version:
|
69
79
|
requirements: []
|
70
80
|
|
71
81
|
rubyforge_project: rubsh
|
72
|
-
rubygems_version: 1.3.
|
82
|
+
rubygems_version: 1.3.7
|
73
83
|
signing_key:
|
74
84
|
specification_version: 3
|
75
85
|
summary: A ruby shell
|