fancy_irb 0.6.5 → 0.7.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.
- data/CHANGELOG.rdoc +4 -0
- data/README.rdoc +9 -10
- data/VERSION +1 -1
- data/fancy_irb.gemspec +12 -4
- data/lib/fancy_irb/irb_ext.rb +6 -15
- data/lib/fancy_irb.rb +13 -18
- metadata +45 -9
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -6,7 +6,7 @@ FancyIrb patches your IRB to create a smooth output experience.
|
|
6
6
|
* Enhance your output value using procs
|
7
7
|
|
8
8
|
== Motivation
|
9
|
-
I really like the {irb_rocket}[https://github.com/genki/irb_rocket] gem, which outputs
|
9
|
+
I really like the {irb_rocket}[https://github.com/genki/irb_rocket] gem, which outputs Ruby results as hash rocket and colorizes errors. Unfortunately, the implementation leads to bugs, because it tries to run the whole command before printing anything to +stdout+. For this reason, I've rewritten (and extended) it.
|
10
10
|
|
11
11
|
This plugin is compatible with other great gems like {hirb}[https://github.com/cldwalker/hirb], {interactive_editor}[https://github.com/jberkel/interactive_editor], etc.
|
12
12
|
|
@@ -22,12 +22,12 @@ You can pass an options hash. These are the default values:
|
|
22
22
|
:rocket_prompt => '#=> ', # prompt to use for the rocket
|
23
23
|
:result_prompt => '=> ', # prompt to use for normal output
|
24
24
|
:colorize => { # colors hash. Set to nil to deactivate colorizing
|
25
|
-
:rocket_prompt => :blue,
|
26
|
-
:result_prompt => :blue,
|
25
|
+
:rocket_prompt => [:blue],
|
26
|
+
:result_prompt => [:blue],
|
27
27
|
:input_prompt => nil,
|
28
|
-
:irb_errors => :red,
|
29
|
-
:stderr => :
|
30
|
-
:stdout => :
|
28
|
+
:irb_errors => [:red],
|
29
|
+
:stderr => [:red, :bright],
|
30
|
+
:stdout => [:black, :bright],
|
31
31
|
:input => nil,
|
32
32
|
:output => true, # wirb's output colorization
|
33
33
|
},
|
@@ -42,11 +42,10 @@ Rocket mode means: Output result as comment if there is enough space left on the
|
|
42
42
|
=== Wrong display widths?
|
43
43
|
When using double-width unicode chars, you should set <tt>:east_asian_width</tt> to <tt>true</tt>. It is deactivated because of performance issues.
|
44
44
|
|
45
|
-
===
|
46
|
-
See
|
47
|
-
|
48
|
-
=== Modify your output
|
45
|
+
=== Customize colors
|
46
|
+
See paint[https://github.com/janlelis/paint]
|
49
47
|
|
48
|
+
=== Modify your IRB output
|
50
49
|
You can modify how to get and display the input. The <tt>result_proc</tt> is a proc which takes the irb context object and should return the value. You can change it with <tt>FancyIrb.set_result_proc do (your code) end</tt>. After that, each proc in <tt>output_procs</tt> gets triggered. They take the value and can return a modified one. You can use the <tt>FancyIrb.add_output_proc</tt> method for adding new output filter procs.
|
51
50
|
|
52
51
|
===== default_result_proc
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/fancy_irb.gemspec
CHANGED
@@ -3,19 +3,18 @@ require 'rubygems' unless defined? Gem
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fancy_irb"
|
6
|
-
s.version = File.
|
6
|
+
s.version = File.read('VERSION').chomp
|
7
7
|
s.authors = ["Jan Lelis"]
|
8
8
|
s.email = "mail@janlelis.de"
|
9
9
|
s.homepage = "http://github.com/janlelis/fancy_irb"
|
10
10
|
s.summary = "FancyIrb patches your IRB to create a smooth output experience."
|
11
|
-
s.description = "FancyIrb patches your IRB to create a smooth output experience. You can colorize the prompts, irb errors, stderr and stdout
|
11
|
+
s.description = "FancyIrb patches your IRB to create a smooth output experience. You can colorize the prompts, irb errors, stderr and stdout, output your result as #=> (hash rockets) and some other improvements."
|
12
12
|
s.required_rubygems_version = '>= 1.3.6'
|
13
13
|
s.required_ruby_version = '>= 1.8.7'
|
14
|
-
#s.files = Dir.glob(%w[{lib,test}/**/*.rb bin/* [A-Z]*.{txt,rdoc} ext/**/*.{rb,c} **/deps.rip]) + %w{Rakefile .gemspec}
|
15
14
|
s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
|
16
15
|
s.license = 'MIT'
|
17
16
|
s.requirements = ['On Windows, you need ansicon: https://github.com/adoxa/ansicon']
|
18
|
-
s.add_dependency('
|
17
|
+
s.add_dependency('paint', '>= 0.8.1')
|
19
18
|
s.add_dependency('unicode-display_width', ">= 0.1.1")
|
20
19
|
s.files = [
|
21
20
|
"LICENSE",
|
@@ -27,5 +26,14 @@ Gem::Specification.new do |s|
|
|
27
26
|
"lib/fancy_irb.rb",
|
28
27
|
"lib/fancy_irb/irb_ext.rb"
|
29
28
|
]
|
29
|
+
|
30
|
+
len = s.homepage.size
|
31
|
+
s.post_install_message = \
|
32
|
+
(" ┌── " + "info ".ljust(len-2,'%') + "─┐\n" +
|
33
|
+
" J-_-L │ " + s.homepage + " │\n" +
|
34
|
+
" ├── " + "usage ".ljust(len-2,'%') + "─┤\n" +
|
35
|
+
" │ " + "require 'fancy_irb'".ljust(len,' ') + " │\n" +
|
36
|
+
" │ " + "FancyIrb.start".ljust(len,' ') + " │\n" +
|
37
|
+
" └─" + '─'*len + "─┘").gsub('%', '─') # 1.8 workaround
|
30
38
|
end
|
31
39
|
|
data/lib/fancy_irb/irb_ext.rb
CHANGED
@@ -25,15 +25,7 @@ module IRB
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def colorize(string, color)
|
28
|
-
|
29
|
-
::Wirb.colorize_string string.to_s, color.to_sym
|
30
|
-
else
|
31
|
-
# if defined? Wirble
|
32
|
-
# Wirble::Colorize::Color.escape( :nothing ) + string.to_s
|
33
|
-
# else
|
34
|
-
string.to_s
|
35
|
-
# end
|
36
|
-
end
|
28
|
+
Paint[string, *Array(color)]
|
37
29
|
end
|
38
30
|
|
39
31
|
def output_value
|
@@ -50,7 +42,7 @@ module IRB
|
|
50
42
|
}
|
51
43
|
|
52
44
|
# reset color
|
53
|
-
print ::
|
45
|
+
print Paint::NOTHING
|
54
46
|
|
55
47
|
# try to output in rocket mode (depending on rocket_mode setting)
|
56
48
|
if FancyIrb[:rocket_mode]
|
@@ -84,7 +76,7 @@ module IRB
|
|
84
76
|
# colorize prompt & input
|
85
77
|
alias prompt_non_fancy prompt
|
86
78
|
def prompt(*args, &block)
|
87
|
-
print ::
|
79
|
+
print Paint::NOTHING
|
88
80
|
prompt = prompt_non_fancy(*args, &block)
|
89
81
|
|
90
82
|
# this is kinda hacky... but that's irb °_°
|
@@ -92,11 +84,10 @@ module IRB
|
|
92
84
|
FancyIrb.continue = true if args[0] == IRB.conf[:PROMPT][IRB.conf[:PROMPT_MODE]][:PROMPT_C]
|
93
85
|
indents += 2 if FancyIrb.continue
|
94
86
|
FancyIrb.real_lengths[:input_prompt] = prompt.size + indents
|
95
|
-
|
87
|
+
|
96
88
|
colorized_prompt = colorize prompt, FancyIrb[:colorize, :input_prompt]
|
97
89
|
if input_color = FancyIrb[:colorize, :input]
|
98
|
-
colorized_prompt +
|
99
|
-
# TODO buggy
|
90
|
+
colorized_prompt + Paint.color(*Array(input_color)) # NOTE: No reset, relies on next one
|
100
91
|
else
|
101
92
|
colorized_prompt
|
102
93
|
end
|
@@ -190,6 +181,6 @@ class << $stdin
|
|
190
181
|
}
|
191
182
|
end
|
192
183
|
|
193
|
-
END{ print "\e[
|
184
|
+
END{ print "\e[0m" } # reset colors when exiting
|
194
185
|
|
195
186
|
# J-_-L
|
data/lib/fancy_irb.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'stringio'
|
2
|
-
require '
|
2
|
+
require 'paint'
|
3
3
|
|
4
4
|
module FancyIrb
|
5
|
-
VERSION = ( File.read File.expand_path( '../VERSION', File.dirname(__FILE__)) ).chomp
|
5
|
+
VERSION = ( File.read File.expand_path( '../VERSION', File.dirname(__FILE__)) ).chomp.freeze
|
6
6
|
end
|
7
7
|
|
8
8
|
class << FancyIrb
|
@@ -52,13 +52,13 @@ class << FancyIrb
|
|
52
52
|
:rocket_prompt => '#=> ', # prompt to use for the rocket
|
53
53
|
:result_prompt => '=> ', # prompt to use for normal output
|
54
54
|
:colorize => { # colors hash. Set to nil to deactivate colorizing
|
55
|
-
:rocket_prompt => :blue,
|
56
|
-
:result_prompt => :blue,
|
57
|
-
:input_prompt =>
|
58
|
-
:irb_errors => :red,
|
59
|
-
:stderr => :
|
60
|
-
:stdout => :
|
61
|
-
:input =>
|
55
|
+
:rocket_prompt => [:blue],
|
56
|
+
:result_prompt => [:blue],
|
57
|
+
:input_prompt => :nothing,
|
58
|
+
:irb_errors => [:red],
|
59
|
+
:stderr => [:red, :bright],
|
60
|
+
:stdout => [:black, :bright],
|
61
|
+
:input => :nothing,
|
62
62
|
:output => true, # wirb's output colorization
|
63
63
|
},
|
64
64
|
:result_proc => default_result_proc, # how to get the output result
|
@@ -105,8 +105,9 @@ class << FancyIrb
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def track_height(data)
|
108
|
-
|
109
|
-
|
108
|
+
data = Paint.unpaint(data.to_s)
|
109
|
+
lines = data.count("\n")
|
110
|
+
long_lines = data.split("\n").inject(0){ |sum, line|
|
110
111
|
sum + (line.display_size / current_length)
|
111
112
|
}
|
112
113
|
@height_counter << lines + long_lines
|
@@ -117,13 +118,7 @@ class << FancyIrb
|
|
117
118
|
end
|
118
119
|
|
119
120
|
def write_stream(stream, data, color = nil)
|
120
|
-
stream.write_non_fancy(
|
121
|
-
if defined?(Wirb) && FancyIrb.stdout_colorful && color
|
122
|
-
Wirb.colorize_string data.to_s, color
|
123
|
-
else
|
124
|
-
data.to_s
|
125
|
-
end
|
126
|
-
)
|
121
|
+
stream.write_non_fancy( FancyIrb.stdout_colorful ? Paint[data, *Array(color)] : data.to_s )
|
127
122
|
end
|
128
123
|
|
129
124
|
def win?
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fancy_irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Jan Lelis
|
@@ -10,18 +15,22 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
18
|
+
date: 2011-07-07 00:00:00 Z
|
15
19
|
dependencies:
|
16
20
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
21
|
+
name: paint
|
18
22
|
prerelease: false
|
19
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
none: false
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
24
|
-
|
28
|
+
hash: 61
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 8
|
32
|
+
- 1
|
33
|
+
version: 0.8.1
|
25
34
|
type: :runtime
|
26
35
|
version_requirements: *id001
|
27
36
|
- !ruby/object:Gem::Dependency
|
@@ -32,10 +41,15 @@ dependencies:
|
|
32
41
|
requirements:
|
33
42
|
- - ">="
|
34
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 25
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 1
|
48
|
+
- 1
|
35
49
|
version: 0.1.1
|
36
50
|
type: :runtime
|
37
51
|
version_requirements: *id002
|
38
|
-
description: "FancyIrb patches your IRB to create a smooth output experience. You can colorize the prompts, irb errors, stderr and stdout
|
52
|
+
description: "FancyIrb patches your IRB to create a smooth output experience. You can colorize the prompts, irb errors, stderr and stdout, output your result as #=> (hash rockets) and some other improvements."
|
39
53
|
email: mail@janlelis.de
|
40
54
|
executables: []
|
41
55
|
|
@@ -53,11 +67,23 @@ files:
|
|
53
67
|
- fancy_irb.gemspec
|
54
68
|
- lib/fancy_irb.rb
|
55
69
|
- lib/fancy_irb/irb_ext.rb
|
56
|
-
has_rdoc: true
|
57
70
|
homepage: http://github.com/janlelis/fancy_irb
|
58
71
|
licenses:
|
59
72
|
- MIT
|
60
|
-
post_install_message:
|
73
|
+
post_install_message: !binary |
|
74
|
+
ICAgICAgIOKUjOKUgOKUgCBpbmZvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
|
75
|
+
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
|
76
|
+
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAogSi1fLUwg4pSCIGh0dHA6Ly9n
|
77
|
+
aXRodWIuY29tL2phbmxlbGlzL2ZhbmN5X2lyYiDilIIKICAgICAgIOKUnOKU
|
78
|
+
gOKUgCB1c2FnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
|
79
|
+
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
|
80
|
+
lIDilIDilIDilKQKICAgICAgIOKUgiByZXF1aXJlICdmYW5jeV9pcmInICAg
|
81
|
+
ICAgICAgICAgICAgICAg4pSCCiAgICAgICDilIIgRmFuY3lJcmIuc3RhcnQg
|
82
|
+
ICAgICAgICAgICAgICAgICAgICAgIOKUggogICAgICAg4pSU4pSA4pSA4pSA
|
83
|
+
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
|
84
|
+
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
|
85
|
+
4pSA4pSA4pSA4pSA4pSA4pSY
|
86
|
+
|
61
87
|
rdoc_options: []
|
62
88
|
|
63
89
|
require_paths:
|
@@ -67,17 +93,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
93
|
requirements:
|
68
94
|
- - ">="
|
69
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 57
|
97
|
+
segments:
|
98
|
+
- 1
|
99
|
+
- 8
|
100
|
+
- 7
|
70
101
|
version: 1.8.7
|
71
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
103
|
none: false
|
73
104
|
requirements:
|
74
105
|
- - ">="
|
75
106
|
- !ruby/object:Gem::Version
|
107
|
+
hash: 23
|
108
|
+
segments:
|
109
|
+
- 1
|
110
|
+
- 3
|
111
|
+
- 6
|
76
112
|
version: 1.3.6
|
77
113
|
requirements:
|
78
114
|
- "On Windows, you need ansicon: https://github.com/adoxa/ansicon"
|
79
115
|
rubyforge_project:
|
80
|
-
rubygems_version: 1.5
|
116
|
+
rubygems_version: 1.8.5
|
81
117
|
signing_key:
|
82
118
|
specification_version: 3
|
83
119
|
summary: FancyIrb patches your IRB to create a smooth output experience.
|