rubysl-irb 1.0.2 → 2.0.3
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/.travis.yml +3 -2
- data/lib/irb/cmd/chws.rb +6 -6
- data/lib/irb/cmd/fork.rb +10 -10
- data/lib/irb/cmd/help.rb +24 -14
- data/lib/irb/cmd/load.rb +8 -7
- data/lib/irb/cmd/nop.rb +8 -8
- data/lib/irb/cmd/pushws.rb +6 -5
- data/lib/irb/cmd/subirb.rb +6 -7
- data/lib/irb/completion.rb +90 -58
- data/lib/irb/context.rb +197 -30
- data/lib/irb/ext/change-ws.rb +17 -10
- data/lib/irb/ext/history.rb +20 -10
- data/lib/irb/ext/loader.rb +22 -12
- data/lib/irb/ext/math-mode.rb +16 -6
- data/lib/irb/ext/multi-irb.rb +69 -24
- data/lib/irb/ext/save-history.rb +87 -37
- data/lib/irb/ext/tracer.rb +17 -7
- data/lib/irb/ext/use-loader.rb +14 -6
- data/lib/irb/ext/workspaces.rb +16 -6
- data/lib/irb/extend-command.rb +92 -34
- data/lib/irb/frame.rb +18 -5
- data/lib/irb/help.rb +20 -19
- data/lib/irb/init.rb +156 -104
- data/lib/irb/input-method.rb +96 -23
- data/lib/irb/inspector.rb +145 -0
- data/lib/irb/lc/.document +4 -0
- data/lib/irb/lc/error.rb +8 -7
- data/lib/irb/lc/{help-message.rb → help-message} +14 -11
- data/lib/irb/lc/ja/encoding_aliases.rb +10 -0
- data/lib/irb/lc/ja/error.rb +19 -16
- data/lib/irb/lc/ja/help-message +33 -28
- data/lib/irb/locale.rb +83 -85
- data/lib/irb/magic-file.rb +37 -0
- data/lib/irb/notifier.rb +101 -15
- data/lib/irb/output-method.rb +38 -32
- data/lib/irb/ruby-lex.rb +143 -81
- data/lib/irb/ruby-token.rb +13 -19
- data/lib/irb/slex.rb +26 -27
- data/lib/irb/src_encoding.rb +4 -0
- data/lib/irb/version.rb +6 -7
- data/lib/irb/workspace.rb +22 -15
- data/lib/irb/ws-for-case-2.rb +5 -6
- data/lib/irb/xmp.rb +91 -4
- data/lib/rubysl/irb/irb.rb +523 -175
- data/lib/rubysl/irb/version.rb +1 -1
- data/rubysl-irb.gemspec +7 -6
- metadata +35 -15
data/lib/irb/help.rb
CHANGED
@@ -1,35 +1,36 @@
|
|
1
1
|
#
|
2
2
|
# irb/help.rb - print usage module
|
3
|
-
# $Release Version: 0.9.
|
4
|
-
# $Revision
|
5
|
-
# $Date: 2008-06-06 01:05:24 -0700 (Fri, 06 Jun 2008) $
|
3
|
+
# $Release Version: 0.9.6$
|
4
|
+
# $Revision$
|
6
5
|
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
7
6
|
#
|
8
7
|
# --
|
9
8
|
#
|
10
|
-
#
|
11
9
|
#
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'irb/magic-file'
|
12
13
|
|
13
14
|
module IRB
|
15
|
+
# Outputs the irb help message, see IRB@Command+line+options.
|
14
16
|
def IRB.print_usage
|
15
17
|
lc = IRB.conf[:LC_MESSAGES]
|
16
|
-
path = lc.find("irb/help-message
|
18
|
+
path = lc.find("irb/help-message")
|
17
19
|
space_line = false
|
18
|
-
|
19
|
-
|l|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
IRB::MagicFile.open(path){|f|
|
21
|
+
f.each_line do |l|
|
22
|
+
if /^\s*$/ =~ l
|
23
|
+
lc.puts l unless space_line
|
24
|
+
space_line = true
|
25
|
+
next
|
26
|
+
end
|
27
|
+
space_line = false
|
28
|
+
|
29
|
+
l.sub!(/#.*$/, "")
|
30
|
+
next if /^\s*$/ =~ l
|
31
|
+
lc.puts l
|
24
32
|
end
|
25
|
-
|
26
|
-
|
27
|
-
l.sub!(/#.*$/, "")
|
28
|
-
l.sub!(/<<HELP/, "")
|
29
|
-
l.sub!(/HELP/, "")
|
30
|
-
next if /^\s*$/ =~ l
|
31
|
-
lc.puts l
|
32
|
-
end
|
33
|
+
}
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
data/lib/irb/init.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
#
|
2
2
|
# irb/init.rb - irb initialize module
|
3
|
-
# $Release Version: 0.9.
|
4
|
-
# $Revision
|
5
|
-
# $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
|
3
|
+
# $Release Version: 0.9.6$
|
4
|
+
# $Revision$
|
6
5
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
6
|
#
|
8
7
|
# --
|
9
8
|
#
|
10
|
-
#
|
9
|
+
#
|
11
10
|
#
|
12
11
|
|
13
|
-
module IRB
|
12
|
+
module IRB # :nodoc:
|
14
13
|
|
15
14
|
# initialize config
|
16
15
|
def IRB.setup(ap_path)
|
@@ -21,7 +20,7 @@ module IRB
|
|
21
20
|
IRB.load_modules
|
22
21
|
|
23
22
|
unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
|
24
|
-
IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
|
23
|
+
IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
@@ -34,7 +33,6 @@ module IRB
|
|
34
33
|
unless ap_path and @CONF[:AP_NAME]
|
35
34
|
ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
|
36
35
|
end
|
37
|
-
|
38
36
|
@CONF[:AP_NAME] = File::basename(ap_path, ".rb")
|
39
37
|
|
40
38
|
@CONF[:IRB_NAME] = "irb"
|
@@ -46,7 +44,7 @@ module IRB
|
|
46
44
|
|
47
45
|
@CONF[:MATH_MODE] = false
|
48
46
|
@CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
|
49
|
-
@CONF[:INSPECT_MODE] =
|
47
|
+
@CONF[:INSPECT_MODE] = true
|
50
48
|
@CONF[:USE_TRACER] = false
|
51
49
|
@CONF[:USE_LOADER] = false
|
52
50
|
@CONF[:IGNORE_SIGINT] = true
|
@@ -61,49 +59,49 @@ module IRB
|
|
61
59
|
|
62
60
|
@CONF[:PROMPT] = {
|
63
61
|
:NULL => {
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
62
|
+
:PROMPT_I => nil,
|
63
|
+
:PROMPT_N => nil,
|
64
|
+
:PROMPT_S => nil,
|
65
|
+
:PROMPT_C => nil,
|
66
|
+
:RETURN => "%s\n"
|
67
|
+
},
|
70
68
|
:DEFAULT => {
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
69
|
+
:PROMPT_I => "%N(%m):%03n:%i> ",
|
70
|
+
:PROMPT_N => "%N(%m):%03n:%i> ",
|
71
|
+
:PROMPT_S => "%N(%m):%03n:%i%l ",
|
72
|
+
:PROMPT_C => "%N(%m):%03n:%i* ",
|
73
|
+
:RETURN => "=> %s\n"
|
74
|
+
},
|
77
75
|
:CLASSIC => {
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
:PROMPT_I => "%N(%m):%03n:%i> ",
|
77
|
+
:PROMPT_N => "%N(%m):%03n:%i> ",
|
78
|
+
:PROMPT_S => "%N(%m):%03n:%i%l ",
|
79
|
+
:PROMPT_C => "%N(%m):%03n:%i* ",
|
80
|
+
:RETURN => "%s\n"
|
81
|
+
},
|
84
82
|
:SIMPLE => {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
:PROMPT_I => ">> ",
|
84
|
+
:PROMPT_N => ">> ",
|
85
|
+
:PROMPT_S => nil,
|
86
|
+
:PROMPT_C => "?> ",
|
87
|
+
:RETURN => "=> %s\n"
|
88
|
+
},
|
91
89
|
:INF_RUBY => {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
90
|
+
:PROMPT_I => "%N(%m):%03n:%i> ",
|
91
|
+
# :PROMPT_N => "%N(%m):%03n:%i> ",
|
92
|
+
:PROMPT_N => nil,
|
93
|
+
:PROMPT_S => nil,
|
94
|
+
:PROMPT_C => nil,
|
95
|
+
:RETURN => "%s\n",
|
96
|
+
:AUTO_INDENT => true
|
97
|
+
},
|
100
98
|
:XMP => {
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
99
|
+
:PROMPT_I => nil,
|
100
|
+
:PROMPT_N => nil,
|
101
|
+
:PROMPT_S => nil,
|
102
|
+
:PROMPT_C => nil,
|
103
|
+
:RETURN => " ==>%s\n"
|
104
|
+
}
|
107
105
|
}
|
108
106
|
|
109
107
|
@CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
|
@@ -112,10 +110,12 @@ module IRB
|
|
112
110
|
@CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
|
113
111
|
@CONF[:SINGLE_IRB] = false
|
114
112
|
|
115
|
-
|
113
|
+
# @CONF[:LC_MESSAGES] = "en"
|
116
114
|
@CONF[:LC_MESSAGES] = Locale.new
|
117
115
|
|
118
|
-
@CONF[:
|
116
|
+
@CONF[:AT_EXIT] = []
|
117
|
+
|
118
|
+
@CONF[:DEBUG_LEVEL] = 0
|
119
119
|
end
|
120
120
|
|
121
121
|
def IRB.init_error
|
@@ -130,87 +130,117 @@ module IRB
|
|
130
130
|
while opt = ARGV.shift
|
131
131
|
case opt
|
132
132
|
when "-f"
|
133
|
-
|
133
|
+
@CONF[:RC] = false
|
134
134
|
when "-m"
|
135
|
-
|
135
|
+
@CONF[:MATH_MODE] = true
|
136
136
|
when "-d"
|
137
|
-
|
137
|
+
$DEBUG = true
|
138
|
+
$VERBOSE = true
|
139
|
+
when "-w"
|
140
|
+
$VERBOSE = true
|
141
|
+
when /^-W(.+)?/
|
142
|
+
opt = $1 || ARGV.shift
|
143
|
+
case opt
|
144
|
+
when "0"
|
145
|
+
$VERBOSE = nil
|
146
|
+
when "1"
|
147
|
+
$VERBOSE = false
|
148
|
+
else
|
149
|
+
$VERBOSE = true
|
150
|
+
end
|
138
151
|
when /^-r(.+)?/
|
139
|
-
|
140
|
-
|
152
|
+
opt = $1 || ARGV.shift
|
153
|
+
@CONF[:LOAD_MODULES].push opt if opt
|
141
154
|
when /^-I(.+)?/
|
142
155
|
opt = $1 || ARGV.shift
|
143
|
-
|
144
|
-
when
|
145
|
-
|
156
|
+
load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
|
157
|
+
when '-U'
|
158
|
+
set_encoding("UTF-8", "UTF-8")
|
159
|
+
when /^-E(.+)?/, /^--encoding(?:=(.+))?/
|
160
|
+
opt = $1 || ARGV.shift
|
161
|
+
set_encoding(*opt.split(':', 2))
|
146
162
|
when "--inspect"
|
147
|
-
|
163
|
+
if /^-/ !~ ARGV.first
|
164
|
+
@CONF[:INSPECT_MODE] = ARGV.shift
|
165
|
+
else
|
166
|
+
@CONF[:INSPECT_MODE] = true
|
167
|
+
end
|
148
168
|
when "--noinspect"
|
149
|
-
|
169
|
+
@CONF[:INSPECT_MODE] = false
|
150
170
|
when "--readline"
|
151
|
-
|
171
|
+
@CONF[:USE_READLINE] = true
|
152
172
|
when "--noreadline"
|
153
|
-
|
173
|
+
@CONF[:USE_READLINE] = false
|
154
174
|
when "--echo"
|
155
|
-
|
175
|
+
@CONF[:ECHO] = true
|
156
176
|
when "--noecho"
|
157
|
-
|
177
|
+
@CONF[:ECHO] = false
|
158
178
|
when "--verbose"
|
159
|
-
|
179
|
+
@CONF[:VERBOSE] = true
|
160
180
|
when "--noverbose"
|
161
|
-
|
162
|
-
when
|
163
|
-
|
164
|
-
|
181
|
+
@CONF[:VERBOSE] = false
|
182
|
+
when /^--prompt-mode(?:=(.+))?/, /^--prompt(?:=(.+))?/
|
183
|
+
opt = $1 || ARGV.shift
|
184
|
+
prompt_mode = opt.upcase.tr("-", "_").intern
|
185
|
+
@CONF[:PROMPT_MODE] = prompt_mode
|
165
186
|
when "--noprompt"
|
166
|
-
|
187
|
+
@CONF[:PROMPT_MODE] = :NULL
|
167
188
|
when "--inf-ruby-mode"
|
168
|
-
|
189
|
+
@CONF[:PROMPT_MODE] = :INF_RUBY
|
169
190
|
when "--sample-book-mode", "--simple-prompt"
|
170
|
-
|
191
|
+
@CONF[:PROMPT_MODE] = :SIMPLE
|
171
192
|
when "--tracer"
|
172
|
-
|
173
|
-
when
|
174
|
-
|
175
|
-
when
|
176
|
-
|
193
|
+
@CONF[:USE_TRACER] = true
|
194
|
+
when /^--back-trace-limit(?:=(.+))?/
|
195
|
+
@CONF[:BACK_TRACE_LIMIT] = ($1 || ARGV.shift).to_i
|
196
|
+
when /^--context-mode(?:=(.+))?/
|
197
|
+
@CONF[:CONTEXT_MODE] = ($1 || ARGV.shift).to_i
|
177
198
|
when "--single-irb"
|
178
|
-
|
179
|
-
when
|
180
|
-
|
199
|
+
@CONF[:SINGLE_IRB] = true
|
200
|
+
when /^--irb_debug(?:=(.+))?/
|
201
|
+
@CONF[:DEBUG_LEVEL] = ($1 || ARGV.shift).to_i
|
181
202
|
when "-v", "--version"
|
182
|
-
|
183
|
-
|
203
|
+
print IRB.version, "\n"
|
204
|
+
exit 0
|
184
205
|
when "-h", "--help"
|
185
|
-
|
186
|
-
|
187
|
-
|
206
|
+
require "irb/help"
|
207
|
+
IRB.print_usage
|
208
|
+
exit 0
|
209
|
+
when "--"
|
210
|
+
if opt = ARGV.shift
|
211
|
+
@CONF[:SCRIPT] = opt
|
212
|
+
$0 = opt
|
213
|
+
end
|
214
|
+
break
|
188
215
|
when /^-/
|
189
|
-
|
216
|
+
IRB.fail UnrecognizedSwitch, opt
|
190
217
|
else
|
191
|
-
|
192
|
-
|
193
|
-
|
218
|
+
@CONF[:SCRIPT] = opt
|
219
|
+
$0 = opt
|
220
|
+
break
|
194
221
|
end
|
195
222
|
end
|
196
|
-
|
197
223
|
if RUBY_VERSION >= FEATURE_IOPT_CHANGE_VERSION
|
198
224
|
load_path.collect! do |path|
|
199
|
-
|
225
|
+
/\A\.\// =~ path ? path : File.expand_path(path)
|
200
226
|
end
|
201
227
|
end
|
202
228
|
$LOAD_PATH.unshift(*load_path)
|
229
|
+
|
203
230
|
end
|
204
231
|
|
205
232
|
# running config
|
206
233
|
def IRB.run_config
|
207
234
|
if @CONF[:RC]
|
208
235
|
begin
|
209
|
-
|
236
|
+
load rc_file
|
210
237
|
rescue LoadError, Errno::ENOENT
|
211
|
-
rescue
|
212
|
-
|
213
|
-
|
238
|
+
rescue # StandardError, ScriptError
|
239
|
+
print "load error: #{rc_file}\n"
|
240
|
+
print $!.class, ": ", $!, "\n"
|
241
|
+
for err in $@[0, $@.size - 2]
|
242
|
+
print "\t", err, "\n"
|
243
|
+
end
|
214
244
|
end
|
215
245
|
end
|
216
246
|
end
|
@@ -219,23 +249,28 @@ module IRB
|
|
219
249
|
def IRB.rc_file(ext = IRBRC_EXT)
|
220
250
|
if !@CONF[:RC_NAME_GENERATOR]
|
221
251
|
rc_file_generators do |rcgen|
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
252
|
+
@CONF[:RC_NAME_GENERATOR] ||= rcgen
|
253
|
+
if File.exist?(rcgen.call(IRBRC_EXT))
|
254
|
+
@CONF[:RC_NAME_GENERATOR] = rcgen
|
255
|
+
break
|
256
|
+
end
|
227
257
|
end
|
228
258
|
end
|
229
|
-
@CONF[:RC_NAME_GENERATOR].call
|
259
|
+
case rc_file = @CONF[:RC_NAME_GENERATOR].call(ext)
|
260
|
+
when String
|
261
|
+
return rc_file
|
262
|
+
else
|
263
|
+
IRB.fail IllegalRCNameGenerator
|
264
|
+
end
|
230
265
|
end
|
231
266
|
|
232
267
|
# enumerate possible rc-file base name generators
|
233
268
|
def IRB.rc_file_generators
|
234
269
|
if irbrc = ENV["IRBRC"]
|
235
|
-
yield proc{|rc|
|
270
|
+
yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
|
236
271
|
end
|
237
272
|
if home = ENV["HOME"]
|
238
|
-
yield proc{|rc| home+"/.irb#{rc}"}
|
273
|
+
yield proc{|rc| home+"/.irb#{rc}"}
|
239
274
|
end
|
240
275
|
home = Dir.pwd
|
241
276
|
yield proc{|rc| home+"/.irb#{rc}"}
|
@@ -248,11 +283,28 @@ module IRB
|
|
248
283
|
def IRB.load_modules
|
249
284
|
for m in @CONF[:LOAD_MODULES]
|
250
285
|
begin
|
251
|
-
|
252
|
-
rescue
|
253
|
-
|
286
|
+
require m
|
287
|
+
rescue LoadError => err
|
288
|
+
warn err.backtrace[0] << ":#{err.class}: #{err}"
|
254
289
|
end
|
255
290
|
end
|
256
291
|
end
|
257
292
|
|
293
|
+
|
294
|
+
DefaultEncodings = Struct.new(:external, :internal)
|
295
|
+
class << IRB
|
296
|
+
private
|
297
|
+
def set_encoding(extern, intern = nil)
|
298
|
+
verbose, $VERBOSE = $VERBOSE, nil
|
299
|
+
Encoding.default_external = extern unless extern.nil? || extern.empty?
|
300
|
+
Encoding.default_internal = intern unless intern.nil? || intern.empty?
|
301
|
+
@CONF[:ENCODINGS] = IRB::DefaultEncodings.new(extern, intern)
|
302
|
+
[$stdin, $stdout, $stderr].each do |io|
|
303
|
+
io.set_encoding(extern, intern)
|
304
|
+
end
|
305
|
+
@CONF[:LC_MESSAGES].instance_variable_set(:@encoding, extern)
|
306
|
+
ensure
|
307
|
+
$VERBOSE = verbose
|
308
|
+
end
|
309
|
+
end
|
258
310
|
end
|
data/lib/irb/input-method.rb
CHANGED
@@ -1,101 +1,156 @@
|
|
1
1
|
#
|
2
2
|
# irb/input-method.rb - input methods used irb
|
3
|
-
# $Release Version: 0.9.
|
4
|
-
# $Revision
|
5
|
-
# $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
|
3
|
+
# $Release Version: 0.9.6$
|
4
|
+
# $Revision$
|
6
5
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
6
|
#
|
8
7
|
# --
|
9
8
|
#
|
10
|
-
#
|
11
9
|
#
|
10
|
+
#
|
11
|
+
require 'irb/src_encoding'
|
12
|
+
require 'irb/magic-file'
|
13
|
+
|
12
14
|
module IRB
|
13
|
-
#
|
14
|
-
# InputMethod
|
15
|
-
# StdioInputMethod
|
16
|
-
# FileInputMethod
|
17
|
-
# (ReadlineInputMethod)
|
18
|
-
#
|
19
|
-
STDIN_FILE_NAME = "(line)"
|
15
|
+
STDIN_FILE_NAME = "(line)" # :nodoc:
|
20
16
|
class InputMethod
|
21
|
-
@RCS_ID='-$Id
|
17
|
+
@RCS_ID='-$Id$-'
|
22
18
|
|
19
|
+
# Creates a new input method object
|
23
20
|
def initialize(file = STDIN_FILE_NAME)
|
24
21
|
@file_name = file
|
25
22
|
end
|
23
|
+
# The file name of this input method, usually given during initialization.
|
26
24
|
attr_reader :file_name
|
27
25
|
|
26
|
+
# The irb prompt associated with this input method
|
28
27
|
attr_accessor :prompt
|
29
|
-
|
28
|
+
|
29
|
+
# Reads the next line from this input method.
|
30
|
+
#
|
31
|
+
# See IO#gets for more information.
|
30
32
|
def gets
|
31
33
|
IRB.fail NotImplementedError, "gets"
|
32
34
|
end
|
33
35
|
public :gets
|
34
36
|
|
35
|
-
|
37
|
+
# Whether this input method is still readable when there is no more data to
|
38
|
+
# read.
|
39
|
+
#
|
40
|
+
# See IO#eof for more information.
|
41
|
+
def readable_after_eof?
|
36
42
|
false
|
37
43
|
end
|
38
44
|
end
|
39
|
-
|
45
|
+
|
40
46
|
class StdioInputMethod < InputMethod
|
47
|
+
# Creates a new input method object
|
41
48
|
def initialize
|
42
49
|
super
|
43
50
|
@line_no = 0
|
44
51
|
@line = []
|
52
|
+
@stdin = IO.open(STDIN.to_i, :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
|
53
|
+
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
|
45
54
|
end
|
46
55
|
|
56
|
+
# Reads the next line from this input method.
|
57
|
+
#
|
58
|
+
# See IO#gets for more information.
|
47
59
|
def gets
|
48
60
|
print @prompt
|
49
|
-
|
61
|
+
line = @stdin.gets
|
62
|
+
@line[@line_no += 1] = line
|
50
63
|
end
|
51
64
|
|
65
|
+
# Whether the end of this input method has been reached, returns +true+ if
|
66
|
+
# there is no more data to read.
|
67
|
+
#
|
68
|
+
# See IO#eof? for more information.
|
52
69
|
def eof?
|
53
|
-
|
70
|
+
@stdin.eof?
|
54
71
|
end
|
55
72
|
|
56
|
-
|
73
|
+
# Whether this input method is still readable when there is no more data to
|
74
|
+
# read.
|
75
|
+
#
|
76
|
+
# See IO#eof for more information.
|
77
|
+
def readable_after_eof?
|
57
78
|
true
|
58
79
|
end
|
59
80
|
|
81
|
+
# Returns the current line number for #io.
|
82
|
+
#
|
83
|
+
# #line counts the number of times #gets is called.
|
84
|
+
#
|
85
|
+
# See IO#lineno for more information.
|
60
86
|
def line(line_no)
|
61
87
|
@line[line_no]
|
62
88
|
end
|
89
|
+
|
90
|
+
# The external encoding for standard input.
|
91
|
+
def encoding
|
92
|
+
@stdin.external_encoding
|
93
|
+
end
|
63
94
|
end
|
64
|
-
|
95
|
+
|
96
|
+
# Use a File for IO with irb, see InputMethod
|
65
97
|
class FileInputMethod < InputMethod
|
98
|
+
# Creates a new input method object
|
66
99
|
def initialize(file)
|
67
100
|
super
|
68
|
-
@io = open(file)
|
101
|
+
@io = IRB::MagicFile.open(file)
|
69
102
|
end
|
103
|
+
# The file name of this input method, usually given during initialization.
|
70
104
|
attr_reader :file_name
|
71
105
|
|
106
|
+
# Whether the end of this input method has been reached, returns +true+ if
|
107
|
+
# there is no more data to read.
|
108
|
+
#
|
109
|
+
# See IO#eof? for more information.
|
72
110
|
def eof?
|
73
111
|
@io.eof?
|
74
112
|
end
|
75
113
|
|
114
|
+
# Reads the next line from this input method.
|
115
|
+
#
|
116
|
+
# See IO#gets for more information.
|
76
117
|
def gets
|
77
118
|
print @prompt
|
78
119
|
l = @io.gets
|
79
120
|
# print @prompt, l
|
80
121
|
l
|
81
122
|
end
|
123
|
+
|
124
|
+
# The external encoding for standard input.
|
125
|
+
def encoding
|
126
|
+
@io.external_encoding
|
127
|
+
end
|
82
128
|
end
|
83
129
|
|
84
130
|
begin
|
85
131
|
require "readline"
|
86
132
|
class ReadlineInputMethod < InputMethod
|
87
|
-
include Readline
|
133
|
+
include Readline
|
134
|
+
# Creates a new input method object using Readline
|
88
135
|
def initialize
|
89
136
|
super
|
90
137
|
|
91
138
|
@line_no = 0
|
92
139
|
@line = []
|
93
140
|
@eof = false
|
141
|
+
|
142
|
+
@stdin = IO.open(STDIN.to_i, :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
|
143
|
+
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
|
94
144
|
end
|
95
145
|
|
146
|
+
# Reads the next line from this input method.
|
147
|
+
#
|
148
|
+
# See IO#gets for more information.
|
96
149
|
def gets
|
150
|
+
Readline.input = @stdin
|
151
|
+
Readline.output = @stdout
|
97
152
|
if l = readline(@prompt, false)
|
98
|
-
|
153
|
+
HISTORY.push(l) if !l.empty?
|
99
154
|
@line[@line_no += 1] = l + "\n"
|
100
155
|
else
|
101
156
|
@eof = true
|
@@ -103,17 +158,35 @@ module IRB
|
|
103
158
|
end
|
104
159
|
end
|
105
160
|
|
161
|
+
# Whether the end of this input method has been reached, returns +true+
|
162
|
+
# if there is no more data to read.
|
163
|
+
#
|
164
|
+
# See IO#eof? for more information.
|
106
165
|
def eof?
|
107
166
|
@eof
|
108
167
|
end
|
109
168
|
|
110
|
-
|
169
|
+
# Whether this input method is still readable when there is no more data to
|
170
|
+
# read.
|
171
|
+
#
|
172
|
+
# See IO#eof for more information.
|
173
|
+
def readable_after_eof?
|
111
174
|
true
|
112
175
|
end
|
113
176
|
|
177
|
+
# Returns the current line number for #io.
|
178
|
+
#
|
179
|
+
# #line counts the number of times #gets is called.
|
180
|
+
#
|
181
|
+
# See IO#lineno for more information.
|
114
182
|
def line(line_no)
|
115
183
|
@line[line_no]
|
116
184
|
end
|
185
|
+
|
186
|
+
# The external encoding for standard input.
|
187
|
+
def encoding
|
188
|
+
@stdin.external_encoding
|
189
|
+
end
|
117
190
|
end
|
118
191
|
rescue LoadError
|
119
192
|
end
|