ripl-fresh 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +8 -1
- data/lib/bond/completions/ripl-fresh.rb +11 -5
- data/lib/ripl/fresh.rb +22 -24
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Fresh Ruby Enhanced SHell
|
2
2
|
|
3
|
-
We love Ruby.
|
3
|
+
We love Ruby. And we love the command line. So... the shell needs to be rubyfied ;).
|
4
4
|
|
5
5
|
== How does it work?
|
6
6
|
|
@@ -22,6 +22,8 @@ Start it with:
|
|
22
22
|
|
23
23
|
== Usage & configuration options
|
24
24
|
|
25
|
+
For an example session, see {this blog entry}[http://rbjl.net/43-use-fresh-ruby-as-your-shell].
|
26
|
+
|
25
27
|
The main regexp to determine if the command should be interpreted as system command is similar to this one: <tt>/^[a-z_-]+\s+.*/i</tt> (match a single word followed by at least one space). It can be adjusted in <tt>Ripl.config[:fresh_system_regexp]</tt>.
|
26
28
|
|
27
29
|
Of course, there are also exceptions that should still get interpreted as Ruby (e.g. <tt>def </tt>). These can be found and modified in the <tt>Ripl.config[:fresh_ruby_words]</tt> array.
|
@@ -69,6 +71,11 @@ There are lots of things which can get better:
|
|
69
71
|
|
70
72
|
Feel free to fork in your improvements ;)
|
71
73
|
|
74
|
+
== Other gems you might find interesting
|
75
|
+
|
76
|
+
* {rush}[https://github.com/adamwiggins/rush] - Another Ruby shell, different concept
|
77
|
+
* {ripl}[https://github.com/cldwalker/ripl] - An irb alternative, +fresh+ is based on it
|
78
|
+
|
72
79
|
== Copyright
|
73
80
|
|
74
81
|
Copyright (c) 2010 Jan Lelis <http://code-needs-smileys.com> released under the MIT license.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# no advanced auto completion, yet
|
2
|
-
#
|
2
|
+
# todo: not only default options
|
3
3
|
|
4
4
|
require 'readline'
|
5
5
|
|
@@ -7,11 +7,17 @@ file_completion = proc{ |input|
|
|
7
7
|
::Readline::FILENAME_COMPLETION_PROC.call(input) || []
|
8
8
|
}
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
system_command_completion = proc{ Ripl.config[:fresh_system_words] }
|
11
|
+
|
12
|
+
#everything_completion = proc{}
|
13
|
+
|
14
|
+
complete :on => Ripl.config[:fresh_match_regexp],
|
15
|
+
:search => false,
|
12
16
|
&file_completion
|
13
17
|
|
14
18
|
# TODO fires only when space after ^
|
15
19
|
complete :on => Ripl::Fresh.option_array_to_regexp( Ripl.config[:fresh_system_prefix] ),
|
16
|
-
:search=>false,
|
17
|
-
&
|
20
|
+
# :search => false,
|
21
|
+
&system_command_completion
|
22
|
+
|
23
|
+
# J-_-L
|
data/lib/ripl/fresh.rb
CHANGED
@@ -3,7 +3,7 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
module Ripl
|
5
5
|
module Fresh
|
6
|
-
VERSION = '0.1.
|
6
|
+
VERSION = '0.1.1'
|
7
7
|
|
8
8
|
class << self
|
9
9
|
# helper to parse options
|
@@ -31,8 +31,6 @@ module Ripl
|
|
31
31
|
# register bond completion
|
32
32
|
Ripl.config[:completion][:gems] ||= []
|
33
33
|
Ripl.config[:completion][:gems] << 'ripl-fresh'
|
34
|
-
# load :mixed commands
|
35
|
-
require File.dirname(__FILE__) + '/fresh/commands'
|
36
34
|
end
|
37
35
|
|
38
36
|
# determine @command_mode
|
@@ -50,30 +48,20 @@ module Ripl
|
|
50
48
|
when Ripl::Fresh.option_array_to_regexp( Ripl.config[:fresh_ruby_prefix] )
|
51
49
|
input = input[$1.size..-1]
|
52
50
|
:ruby
|
53
|
-
# single words
|
54
|
-
when
|
55
|
-
if Ripl.config[:fresh_ruby_words].include?(
|
51
|
+
# single words, and main regex to match shell commands
|
52
|
+
when /^(\w+)$/i, Ripl.config[:fresh_match_regexp]
|
53
|
+
if Ripl.config[:fresh_ruby_words].include?($1)
|
56
54
|
:ruby
|
57
|
-
elsif Ripl.config[:fresh_mixed_words].include?(
|
55
|
+
elsif Ripl.config[:fresh_mixed_words].include?($1)
|
58
56
|
:mixed
|
59
|
-
elsif Ripl.config[:fresh_system_words].include?(
|
57
|
+
elsif Ripl.config[:fresh_system_words].include?($1)
|
60
58
|
:system
|
61
59
|
else
|
62
|
-
:
|
63
|
-
end
|
64
|
-
# set of commands that call the ruby method but have command line style calling (args without "")
|
65
|
-
when Ripl::Fresh.option_array_to_regexp( Ripl.config[:fresh_mixed_words] )
|
66
|
-
:mixed
|
67
|
-
# here is the important magical regex for shell commands
|
68
|
-
when Ripl.config[:fresh_system_regexp]
|
69
|
-
if Ripl.config[:fresh_ruby_words].include? $1
|
70
|
-
:ruby
|
71
|
-
else
|
72
|
-
:system
|
60
|
+
Ripl.config[:fresh_match_default]
|
73
61
|
end
|
74
62
|
# default is still ruby ;)
|
75
63
|
else
|
76
|
-
:
|
64
|
+
Ripl.config[:fresh_default]
|
77
65
|
end
|
78
66
|
|
79
67
|
input
|
@@ -134,18 +122,28 @@ Ripl.config[:readline] = false
|
|
134
122
|
require 'ripl/readline'
|
135
123
|
Ripl::Shell.send :include, Ripl::Fresh::Shell
|
136
124
|
|
125
|
+
# load :mixed commands
|
126
|
+
require File.dirname(__FILE__) + '/fresh/commands'
|
127
|
+
|
137
128
|
## fresh config ###
|
138
129
|
|
139
130
|
# prefixes
|
140
131
|
Ripl.config[:fresh_system_prefix] = %w[^]
|
141
132
|
Ripl.config[:fresh_ruby_prefix] = [' ']
|
142
133
|
# single words
|
143
|
-
Ripl.config[:
|
144
|
-
Ripl.config[:
|
134
|
+
Ripl.config[:fresh_ruby_words] = %w[begin case class def for if module undef unless until while puts warn print p pp ap raise fail loop require load lambda proc system]
|
135
|
+
Ripl.config[:fresh_system_words] =
|
136
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).uniq.map {|e|
|
137
|
+
File.directory?(e) ? Dir.entries(e) : []
|
138
|
+
}.flatten.uniq - ['.', '..']
|
145
139
|
# catch mix words
|
146
|
-
Ripl.config[:fresh_mixed_words]
|
140
|
+
Ripl.config[:fresh_mixed_words] = %w[cd]
|
147
141
|
# main regexp
|
148
|
-
Ripl.config[:
|
142
|
+
Ripl.config[:fresh_match_regexp] = /^([a-z_-]+)\s+(?!(?:[=%*]|!=|\+=|-=|\/=))/i
|
143
|
+
# regex matched but word not in one of the three arrays, possible values: :ruby, :system, :mixed
|
144
|
+
Ripl.config[:fresh_match_default] = :ruby
|
145
|
+
# regex did not match
|
146
|
+
Ripl.config[:fresh_default] = :ruby
|
149
147
|
# configure directory prompt
|
150
148
|
Ripl.config[:prompt] = proc{
|
151
149
|
path = FileUtils.pwd
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jan Lelis
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-25 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|