pry 0.9.3pre1-i386-mingw32 → 0.9.4-i386-mingw32
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 +53 -0
- data/CONTRIBUTORS +13 -0
- data/README.markdown +4 -2
- data/Rakefile +17 -3
- data/TODO +22 -0
- data/lib/pry.rb +102 -24
- data/lib/pry/command_context.rb +12 -0
- data/lib/pry/command_processor.rb +50 -19
- data/lib/pry/command_set.rb +17 -7
- data/lib/pry/completion.rb +6 -6
- data/lib/pry/config.rb +6 -2
- data/lib/pry/default_commands/basic.rb +8 -4
- data/lib/pry/default_commands/context.rb +84 -36
- data/lib/pry/default_commands/documentation.rb +50 -30
- data/lib/pry/default_commands/easter_eggs.rb +5 -0
- data/lib/pry/default_commands/input.rb +20 -16
- data/lib/pry/default_commands/introspection.rb +61 -77
- data/lib/pry/default_commands/ls.rb +22 -14
- data/lib/pry/default_commands/shell.rb +32 -17
- data/lib/pry/extended_commands/user_command_api.rb +32 -1
- data/lib/pry/helpers/base_helpers.rb +21 -9
- data/lib/pry/helpers/command_helpers.rb +99 -17
- data/lib/pry/helpers/text.rb +12 -11
- data/lib/pry/history.rb +61 -0
- data/lib/pry/plugins.rb +19 -8
- data/lib/pry/pry_class.rb +49 -60
- data/lib/pry/pry_instance.rb +122 -119
- data/lib/pry/version.rb +1 -1
- data/pry.gemspec +15 -14
- data/test/helper.rb +31 -0
- data/test/test_command_processor.rb +8 -87
- data/test/test_command_set.rb +40 -2
- data/test/test_completion.rb +26 -0
- data/test/test_default_commands/test_context.rb +185 -1
- data/test/test_default_commands/test_documentation.rb +10 -0
- data/test/test_default_commands/test_input.rb +39 -13
- data/test/test_default_commands/test_introspection.rb +11 -1
- data/test/test_default_commands/test_shell.rb +18 -0
- data/test/test_pry.rb +217 -47
- data/test/test_pry_history.rb +84 -0
- data/test/test_pry_output.rb +44 -0
- data/test/test_special_locals.rb +35 -0
- metadata +83 -77
@@ -9,7 +9,7 @@ class Pry
|
|
9
9
|
target = target()
|
10
10
|
|
11
11
|
opts = Slop.parse!(args) do |opt|
|
12
|
-
opt.banner "Usage: show-method [OPTIONS] [METH]\n" \
|
12
|
+
opt.banner "Usage: show-method [OPTIONS] [METH 1] [METH 2] [METH N]\n" \
|
13
13
|
"Show the source for method METH. Tries instance methods first and then methods by default.\n" \
|
14
14
|
"e.g: show-method hello_method"
|
15
15
|
|
@@ -29,30 +29,33 @@ class Pry
|
|
29
29
|
|
30
30
|
next if opts.help?
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
args = [nil] if args.empty?
|
33
|
+
args.each do |method_name|
|
34
|
+
meth_name = method_name
|
35
|
+
if (meth = get_method_object(meth_name, target, opts.to_hash(true))).nil?
|
36
|
+
output.puts "Invalid method name: #{meth_name}. Type `show-method --help` for help"
|
37
|
+
next
|
38
|
+
end
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
+
code, code_type = code_and_code_type_for(meth)
|
41
|
+
next if !code
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
output.puts make_header(meth, code_type, code)
|
44
|
+
if Pry.color
|
45
|
+
code = CodeRay.scan(code, code_type).term
|
46
|
+
end
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
start_line = false
|
49
|
+
if opts.l?
|
50
|
+
start_line = meth.source_location ? meth.source_location.last : 1
|
51
|
+
end
|
50
52
|
|
51
|
-
|
53
|
+
start_line = opts.b? ? 1 : start_line
|
52
54
|
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
+
render_output(opts.flood?, start_line, code)
|
57
|
+
code
|
58
|
+
end
|
56
59
|
end
|
57
60
|
|
58
61
|
alias_command "show-source", "show-method", ""
|
@@ -108,13 +111,14 @@ class Pry
|
|
108
111
|
command "edit", "Invoke the default editor on a file. Type `edit --help` for more info" do |*args|
|
109
112
|
opts = Slop.parse!(args) do |opt|
|
110
113
|
opt.banner "Usage: edit [OPTIONS] [FILE]\n" \
|
111
|
-
"Edit the method FILE in an editor.\
|
112
|
-
"
|
114
|
+
"Edit the method FILE in an editor.\nWhen no file given, opens editor with contents of input buffer and evals after closing." \
|
115
|
+
"\nEnsure #{text.bold("Pry.config.editor")} is set to your editor of choice.\n" \
|
113
116
|
"e.g: edit sample.rb"
|
114
117
|
|
115
118
|
opt.on :r, "reload", "Eval file content after editing (evals at top level)"
|
116
|
-
opt.on :
|
117
|
-
opt.on :
|
119
|
+
opt.on :n, "no-reload", "Do not automatically reload the file after editing (only applies to --ex and -t)."
|
120
|
+
opt.on :ex, "Open an editor at the line and file that generated the most recent Exception, reloads file after editing."
|
121
|
+
opt.on :t, "temp", "Open a temporary file in an editor with contents of input buffer and eval it in current context after closing (same as `edit` with no args)"
|
118
122
|
opt.on :p, "play", "Use the pry `play` command to eval the file content after editing."
|
119
123
|
opt.on :l, "line", "Specify line number to jump to in file", true, :as => Integer
|
120
124
|
opt.on :h, :help, "This message." do
|
@@ -123,26 +127,37 @@ class Pry
|
|
123
127
|
end
|
124
128
|
next if opts.h?
|
125
129
|
|
126
|
-
|
127
|
-
|
128
|
-
should_reload = opts[:r]
|
130
|
+
should_reload_at_top_level = opts[:r]
|
131
|
+
should_reload_locally = false
|
129
132
|
|
130
133
|
if opts.ex?
|
131
|
-
next output.puts "No Exception found." if
|
134
|
+
next output.puts "No Exception found." if _pry_.last_exception.nil?
|
135
|
+
|
136
|
+
if is_core_rbx_path?(_pry_.last_exception.file)
|
137
|
+
file_name = rbx_convert_path_to_full(_pry_.last_exception.file)
|
138
|
+
else
|
139
|
+
file_name = _pry_.last_exception.file
|
140
|
+
end
|
132
141
|
|
133
|
-
|
134
|
-
line = Pry.last_exception.line
|
142
|
+
line = _pry_.last_exception.line
|
135
143
|
next output.puts "Exception has no associated file." if file_name.nil?
|
136
144
|
next output.puts "Cannot edit exceptions raised in REPL." if Pry.eval_path == file_name
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
145
|
+
|
146
|
+
should_reload_at_top_level = opts[:n] ? false : true
|
147
|
+
|
148
|
+
elsif opts.t? || args.first.nil?
|
149
|
+
file_name = temp_file do |f|
|
150
|
+
f.puts eval_string if !eval_string.empty?
|
151
|
+
end
|
152
|
+
line = eval_string.lines.count + 1
|
153
|
+
should_reload_locally = opts[:n] ? false : true
|
142
154
|
else
|
143
|
-
|
144
|
-
|
145
|
-
|
155
|
+
# break up into file:line
|
156
|
+
/(:(\d+))?$/ =~ File.expand_path(args.first)
|
157
|
+
|
158
|
+
# $` is pre-match
|
159
|
+
file_name, line = [$`, $2]
|
160
|
+
line = line ? line.to_i : opts[:l].to_i
|
146
161
|
end
|
147
162
|
|
148
163
|
invoke_editor(file_name, line)
|
@@ -150,11 +165,15 @@ class Pry
|
|
150
165
|
|
151
166
|
if opts[:p]
|
152
167
|
silence_warnings do
|
153
|
-
|
168
|
+
_pry_.input = StringIO.new(File.readlines(file_name).join)
|
154
169
|
end
|
155
|
-
elsif
|
170
|
+
elsif should_reload_locally
|
156
171
|
silence_warnings do
|
157
|
-
|
172
|
+
eval_string.replace(File.read(file_name))
|
173
|
+
end
|
174
|
+
elsif should_reload_at_top_level
|
175
|
+
silence_warnings do
|
176
|
+
TOPLEVEL_BINDING.eval(File.read(file_name), file_name)
|
158
177
|
end
|
159
178
|
end
|
160
179
|
end
|
@@ -165,7 +184,7 @@ class Pry
|
|
165
184
|
opts = Slop.parse!(args) do |opt|
|
166
185
|
opt.banner "Usage: edit-method [OPTIONS] [METH]\n" \
|
167
186
|
"Edit the method METH in an editor.\n" \
|
168
|
-
"Ensure #{text.bold("Pry.editor")} is set to your editor of choice.\n" \
|
187
|
+
"Ensure #{text.bold("Pry.config.editor")} is set to your editor of choice.\n" \
|
169
188
|
"e.g: edit-method hello_method"
|
170
189
|
|
171
190
|
opt.on :M, "instance-methods", "Operate on instance methods."
|
@@ -188,7 +207,7 @@ class Pry
|
|
188
207
|
next
|
189
208
|
end
|
190
209
|
|
191
|
-
next output.puts "Error: No editor set!\nEnsure that #{text.bold("Pry.editor")} is set to your editor of choice." if !Pry.editor
|
210
|
+
next output.puts "Error: No editor set!\nEnsure that #{text.bold("Pry.config.editor")} is set to your editor of choice." if !Pry.config.editor
|
192
211
|
|
193
212
|
if is_a_c_method?(meth)
|
194
213
|
output.puts "Error: Can't edit a C method."
|
@@ -207,41 +226,6 @@ class Pry
|
|
207
226
|
end
|
208
227
|
end
|
209
228
|
|
210
|
-
helpers do
|
211
|
-
|
212
|
-
def invoke_editor(file, line)
|
213
|
-
if Pry.editor.respond_to?(:call)
|
214
|
-
editor_invocation = Pry.editor.call(file, line)
|
215
|
-
else
|
216
|
-
editor_invocation = "#{Pry.editor} #{start_line_syntax_for_editor(file, line)}"
|
217
|
-
end
|
218
|
-
|
219
|
-
run ".#{editor_invocation}"
|
220
|
-
end
|
221
|
-
|
222
|
-
def start_line_syntax_for_editor(file_name, line_number)
|
223
|
-
file_name = file_name.gsub(/\//, '\\') if RUBY_PLATFORM =~ /mswin|mingw/
|
224
|
-
|
225
|
-
case Pry.editor
|
226
|
-
when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
|
227
|
-
"+#{line_number} #{file_name}"
|
228
|
-
when /^mate/, /^geany/
|
229
|
-
"-l #{line_number} #{file_name}"
|
230
|
-
when /^uedit32/
|
231
|
-
"#{file_name}/#{line_number}"
|
232
|
-
when /^jedit/
|
233
|
-
"#{file_name} +line:#{line_number}"
|
234
|
-
else
|
235
|
-
if RUBY_PLATFORM =~ /mswin|mingw/
|
236
|
-
"#{file_name}"
|
237
|
-
else
|
238
|
-
"+#{line_number} #{file_name}"
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
end
|
244
|
-
|
245
229
|
end
|
246
230
|
end
|
247
231
|
end
|
@@ -19,6 +19,23 @@ class Pry
|
|
19
19
|
Object.send("#{visibility}_instance_methods")
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
def ls_color_map
|
24
|
+
{
|
25
|
+
"local variables" => Pry.config.ls.local_var_color,
|
26
|
+
"instance variables" => Pry.config.ls.instance_var_color,
|
27
|
+
"class variables" => Pry.config.ls.class_var_color,
|
28
|
+
"global variables" => Pry.config.ls.global_var_color,
|
29
|
+
"just singleton methods" => Pry.config.ls.method_color,
|
30
|
+
"public methods" => Pry.config.ls.method_color,
|
31
|
+
"private methods" => Pry.config.ls.method_color,
|
32
|
+
"protected methods" => Pry.config.ls.method_color,
|
33
|
+
"public instance methods" => Pry.config.ls.instance_method_color,
|
34
|
+
"private instance methods" => Pry.config.ls.instance_method_color,
|
35
|
+
"protected instance methods" => Pry.config.ls.instance_method_color,
|
36
|
+
"constants" => Pry.config.ls.constant_color
|
37
|
+
}
|
38
|
+
end
|
22
39
|
end
|
23
40
|
|
24
41
|
command "ls", "Show the list of vars and methods in the current scope. Type `ls --help` for more info." do |*args|
|
@@ -154,7 +171,7 @@ Shows local and instance variables by default.
|
|
154
171
|
|
155
172
|
info["private methods"] = [Array(target.eval("private_methods(#{options[:s]})")).sort - trim_methods(target, options, :private), i += 1] if (options[:m] && options[:p]) || options[:a]
|
156
173
|
|
157
|
-
info["just singleton methods"] = [Array(target.eval("methods(#{options[:s]})")).sort, i += 1] if (options[:m] && options[:j])
|
174
|
+
info["just singleton methods"] = [Array(target.eval("methods(#{options[:s]})")).sort, i += 1] if (options[:m] && options[:j]) && !options[:a]
|
158
175
|
|
159
176
|
info["public instance methods"] = [Array(target.eval("public_instance_methods(#{options[:s]})")).uniq.sort - trim_methods(target, options, :public), i += 1] if target_self.is_a?(Module) && ((options[:M] && options[:P]) || options[:a])
|
160
177
|
|
@@ -181,11 +198,7 @@ Shows local and instance variables by default.
|
|
181
198
|
if !v.first.empty?
|
182
199
|
text << "#{k}:\n--\n"
|
183
200
|
filtered_list = v.first.grep options[:grep]
|
184
|
-
|
185
|
-
text << CodeRay.scan(Pry.view(filtered_list), :ruby).term + "\n"
|
186
|
-
else
|
187
|
-
text << Pry.view(filtered_list) + "\n"
|
188
|
-
end
|
201
|
+
text << text().send(ls_color_map[k], (filtered_list.join(Pry.config.ls.separator)))
|
189
202
|
text << "\n\n"
|
190
203
|
end
|
191
204
|
end
|
@@ -198,14 +211,9 @@ Shows local and instance variables by default.
|
|
198
211
|
|
199
212
|
# plain
|
200
213
|
else
|
201
|
-
list = info.
|
202
|
-
list = list.
|
203
|
-
|
204
|
-
if Pry.color
|
205
|
-
text << CodeRay.scan(list.inspect, :ruby).term + "\n"
|
206
|
-
else
|
207
|
-
text << list.inspect + "\n"
|
208
|
-
end
|
214
|
+
list = info.sort_by { |k, v| v.last }.map { |k, v| [k, [v.first.grep(options[:grep])], v.last] }
|
215
|
+
list = list.each { |k, v| text << text().send(ls_color_map[k], v.first.join(Pry.config.ls.separator)); text << Pry.config.ls.separator }
|
216
|
+
|
209
217
|
if !options[:f]
|
210
218
|
stagger_output(text)
|
211
219
|
else
|
@@ -20,15 +20,15 @@ class Pry
|
|
20
20
|
end
|
21
21
|
|
22
22
|
command "shell-mode", "Toggle shell mode. Bring in pwd prompt and file completion." do
|
23
|
-
case
|
23
|
+
case _pry_.prompt
|
24
24
|
when Pry::SHELL_PROMPT
|
25
|
-
|
26
|
-
|
25
|
+
_pry_.pop_prompt
|
26
|
+
_pry_.custom_completions = Pry::DEFAULT_CUSTOM_COMPLETIONS
|
27
27
|
else
|
28
|
-
|
29
|
-
|
28
|
+
_pry_.push_prompt Pry::SHELL_PROMPT
|
29
|
+
_pry_.custom_completions = Pry::FILE_COMPLETIONS
|
30
30
|
Readline.completion_proc = Pry::InputCompleter.build_completion_proc target,
|
31
|
-
|
31
|
+
_pry_.instance_eval(&Pry::FILE_COMPLETIONS)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -48,14 +48,18 @@ class Pry
|
|
48
48
|
end_line = line - 1
|
49
49
|
end
|
50
50
|
|
51
|
-
opt.on :ex, "Show a window of N lines
|
51
|
+
opt.on :ex, "Show a window of N lines either side of the last exception (defaults to 5).", :optional => true, :as => Integer do |window_size|
|
52
52
|
window_size ||= 5
|
53
|
-
ex =
|
53
|
+
ex = _pry_.last_exception
|
54
54
|
next if !ex
|
55
55
|
start_line = (ex.line - 1) - window_size
|
56
56
|
start_line = start_line < 0 ? 0 : start_line
|
57
57
|
end_line = (ex.line - 1) + window_size
|
58
|
-
|
58
|
+
if is_core_rbx_path?(ex.file)
|
59
|
+
file_name = rbx_convert_path_to_full(ex.file)
|
60
|
+
else
|
61
|
+
file_name = ex.file
|
62
|
+
end
|
59
63
|
end
|
60
64
|
|
61
65
|
opt.on :l, "line-numbers", "Show line numbers."
|
@@ -80,27 +84,38 @@ class Pry
|
|
80
84
|
next
|
81
85
|
end
|
82
86
|
|
83
|
-
contents,
|
87
|
+
contents, _, _ = read_between_the_lines(file_name, start_line, end_line)
|
88
|
+
contents = syntax_highlight_by_file_type_or_specified(contents, file_name, opts[:type])
|
89
|
+
|
90
|
+
if opts.l?
|
91
|
+
contents = text.with_line_numbers contents, start_line + 1
|
92
|
+
end
|
84
93
|
|
85
94
|
# add the arrow pointing to line that caused the exception
|
86
95
|
if opts.ex?
|
96
|
+
contents = text.with_line_numbers contents, start_line + 1, :bright_red
|
97
|
+
|
87
98
|
contents = contents.lines.each_with_index.map do |line, idx|
|
88
99
|
l = idx + start_line
|
89
|
-
if l == (
|
90
|
-
"
|
100
|
+
if l == (_pry_.last_exception.line - 1)
|
101
|
+
" =>#{line}"
|
91
102
|
else
|
92
103
|
" #{line}"
|
93
104
|
end
|
94
105
|
end.join
|
95
|
-
end
|
96
106
|
|
97
|
-
|
98
|
-
|
107
|
+
# header for exceptions
|
108
|
+
output.puts "\n#{Pry::Helpers::Text.bold('Exception:')} #{_pry_.last_exception.class}: #{_pry_.last_exception.message}\n--"
|
109
|
+
output.puts "#{Pry::Helpers::Text.bold('From:')} #{file_name} @ line #{_pry_.last_exception.line}\n\n"
|
99
110
|
end
|
100
111
|
|
101
112
|
set_file_and_dir_locals(file_name)
|
102
|
-
|
103
|
-
|
113
|
+
|
114
|
+
if opts.f?
|
115
|
+
output.puts contents
|
116
|
+
else
|
117
|
+
stagger_output(contents)
|
118
|
+
end
|
104
119
|
end
|
105
120
|
end
|
106
121
|
|
@@ -7,7 +7,7 @@ class Pry
|
|
7
7
|
next output.puts("Provide an arg!") if arg.nil?
|
8
8
|
|
9
9
|
prime_string = "command #{arg_string}\n"
|
10
|
-
command_string =
|
10
|
+
command_string = _pry_.r(target, prime_string)
|
11
11
|
|
12
12
|
eval_string.replace <<-HERE
|
13
13
|
_pry_.commands.instance_eval do
|
@@ -17,6 +17,37 @@ class Pry
|
|
17
17
|
|
18
18
|
end
|
19
19
|
|
20
|
+
command "reload-command", "Reload a command. reload-command CMD_NAME CMD_SET" do |command_name, set_name|
|
21
|
+
next output.puts "Must provide command name" if command_name.nil?
|
22
|
+
next output.puts "Must provide command set name" if set_name.nil?
|
23
|
+
|
24
|
+
cmd = Pry.config.commands.commands[command_name]
|
25
|
+
file_name = cmd.block.source_location.first
|
26
|
+
|
27
|
+
silence_warnings do
|
28
|
+
load file_name
|
29
|
+
end
|
30
|
+
Pry.config.commands.import target.eval(set_name)
|
31
|
+
_pry_.commands.import target.eval(set_name)
|
32
|
+
set_file_and_dir_locals(file_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
command "edit-command", "Edit a command. edit-command CMD_NAME CMD_SET" do |command_name, set_name|
|
36
|
+
next output.puts "Must provide command name" if command_name.nil?
|
37
|
+
next output.puts "Must provide a command set name" if set_name.nil?
|
38
|
+
|
39
|
+
cmd = Pry.config.commands.commands[command_name]
|
40
|
+
file_name = cmd.block.source_location.first
|
41
|
+
|
42
|
+
invoke_editor(*cmd.block.source_location)
|
43
|
+
silence_warnings do
|
44
|
+
load file_name
|
45
|
+
end
|
46
|
+
Pry.config.commands.import target.eval(set_name)
|
47
|
+
_pry_.commands.import target.eval(set_name)
|
48
|
+
set_file_and_dir_locals(file_name)
|
49
|
+
end
|
50
|
+
|
20
51
|
end
|
21
52
|
end
|
22
53
|
end
|
@@ -2,6 +2,7 @@ class Pry
|
|
2
2
|
module Helpers
|
3
3
|
|
4
4
|
module BaseHelpers
|
5
|
+
|
5
6
|
module_function
|
6
7
|
|
7
8
|
def silence_warnings
|
@@ -35,10 +36,11 @@ class Pry
|
|
35
36
|
|
36
37
|
def set_file_and_dir_locals(file_name)
|
37
38
|
return if !target
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
_pry_.last_file = File.expand_path(file_name)
|
40
|
+
_pry_.inject_local("_file_", _pry_.last_file, target)
|
41
|
+
|
42
|
+
_pry_.last_dir = File.dirname(_pry_.last_file)
|
43
|
+
_pry_.inject_local("_dir_", _pry_.last_dir, target)
|
42
44
|
end
|
43
45
|
|
44
46
|
def stub_proc(name, options)
|
@@ -72,7 +74,7 @@ class Pry
|
|
72
74
|
end
|
73
75
|
|
74
76
|
def highlight(string, regexp, highlight_color=:bright_yellow)
|
75
|
-
|
77
|
+
string.gsub(regexp) { |match| "<#{highlight_color}>#{match}</#{highlight_color}>" }
|
76
78
|
end
|
77
79
|
|
78
80
|
# formatting
|
@@ -85,8 +87,18 @@ class Pry
|
|
85
87
|
27
|
86
88
|
end
|
87
89
|
|
90
|
+
# are we on Jruby platform?
|
91
|
+
def jruby?
|
92
|
+
defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
|
93
|
+
end
|
94
|
+
|
95
|
+
# are we on rbx platform?
|
96
|
+
def rbx?
|
97
|
+
defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /rbx/
|
98
|
+
end
|
99
|
+
|
88
100
|
# a simple pager for systems without `less`. A la windows.
|
89
|
-
def simple_pager(text)
|
101
|
+
def simple_pager(text, output=output())
|
90
102
|
text_array = text.lines.to_a
|
91
103
|
text_array.each_slice(page_size) do |chunk|
|
92
104
|
output.puts chunk.join
|
@@ -108,13 +120,13 @@ class Pry
|
|
108
120
|
end
|
109
121
|
|
110
122
|
# FIXME! Another JRuby hack
|
111
|
-
if
|
112
|
-
simple_pager(text)
|
123
|
+
if jruby?
|
124
|
+
simple_pager(text, output)
|
113
125
|
else
|
114
126
|
lesspipe { |less| less.puts text }
|
115
127
|
end
|
116
128
|
rescue Errno::ENOENT
|
117
|
-
simple_pager(text)
|
129
|
+
simple_pager(text, output)
|
118
130
|
rescue Errno::EPIPE
|
119
131
|
end
|
120
132
|
|