rubysl-irb 1.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|