mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
* tool/redmine-backporter.rb: added history feature for platforms which
lack readline. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fd8cf62f37
commit
8516d7433f
2 changed files with 72 additions and 28 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Tue Jan 27 15:58:23 2015 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
|
* tool/redmine-backporter.rb: added history feature for platforms which
|
||||||
|
lack readline.
|
||||||
|
|
||||||
Mon Jan 26 22:09:35 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
|
Mon Jan 26 22:09:35 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
|
||||||
|
|
||||||
* .gitignore: ignored temporary file with git.
|
* .gitignore: ignored temporary file with git.
|
||||||
|
|
|
@ -200,35 +200,74 @@ def more(sio)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def Readline.readline(prompt = '')
|
class << Readline
|
||||||
console = IO.console
|
def readline(prompt = '')
|
||||||
console.binmode
|
console = IO.console
|
||||||
ly, lx = console.winsize
|
console.binmode
|
||||||
if /mswin|mingw/ =~ RUBY_PLATFORM or /^(?:vt\d\d\d|xterm)/i =~ ENV["TERM"]
|
ly, lx = console.winsize
|
||||||
cls = "\r\e[2K"
|
if /mswin|mingw/ =~ RUBY_PLATFORM or /^(?:vt\d\d\d|xterm)/i =~ ENV["TERM"]
|
||||||
else
|
cls = "\r\e[2K"
|
||||||
cls = "\r" << (" " * lx)
|
|
||||||
end
|
|
||||||
cls << "\r" << prompt
|
|
||||||
console.print prompt
|
|
||||||
console.flush
|
|
||||||
line = ''
|
|
||||||
while 1
|
|
||||||
case c = console.getch
|
|
||||||
when "\r", "\n"
|
|
||||||
puts
|
|
||||||
return line
|
|
||||||
when "\C-?", "\b" # DEL/BS
|
|
||||||
print "\b \b" if line.chop!
|
|
||||||
when "\C-u"
|
|
||||||
print cls
|
|
||||||
line.clear
|
|
||||||
when "\C-d"
|
|
||||||
return nil if line.empty?
|
|
||||||
line << c
|
|
||||||
else
|
else
|
||||||
print c
|
cls = "\r" << (" " * lx)
|
||||||
line << c
|
end
|
||||||
|
cls << "\r" << prompt
|
||||||
|
console.print prompt
|
||||||
|
console.flush
|
||||||
|
line = ''
|
||||||
|
while 1
|
||||||
|
case c = console.getch
|
||||||
|
when "\r", "\n"
|
||||||
|
puts
|
||||||
|
HISTORY << line
|
||||||
|
return line
|
||||||
|
when "\C-?", "\b" # DEL/BS
|
||||||
|
print "\b \b" if line.chop!
|
||||||
|
when "\C-u"
|
||||||
|
print cls
|
||||||
|
line.clear
|
||||||
|
when "\C-d"
|
||||||
|
return nil if line.empty?
|
||||||
|
line << c
|
||||||
|
when "\C-p"
|
||||||
|
HISTORY.pos -= 1
|
||||||
|
line = HISTORY.current
|
||||||
|
print cls
|
||||||
|
print line
|
||||||
|
when "\C-n"
|
||||||
|
HISTORY.pos += 1
|
||||||
|
line = HISTORY.current
|
||||||
|
print cls
|
||||||
|
print line
|
||||||
|
else
|
||||||
|
print c
|
||||||
|
line << c
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HISTORY = []
|
||||||
|
def HISTORY.<<(val)
|
||||||
|
HISTORY.push(val)
|
||||||
|
@pos = self.size
|
||||||
|
self
|
||||||
|
end
|
||||||
|
def HISTORY.pos
|
||||||
|
@pos ||= 0
|
||||||
|
end
|
||||||
|
def HISTORY.pos=(val)
|
||||||
|
@pos = val
|
||||||
|
if @pos < 0
|
||||||
|
@pos = -1
|
||||||
|
elsif @pos >= self.size
|
||||||
|
@pos = self.size
|
||||||
|
end
|
||||||
|
end
|
||||||
|
def HISTORY.current
|
||||||
|
@pos ||= 0
|
||||||
|
if @pos < 0 || @pos >= self.size
|
||||||
|
''
|
||||||
|
else
|
||||||
|
self[@pos]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end unless defined?(Readline.readline)
|
end unless defined?(Readline.readline)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue