[ruby/reline] Support longer than screen height on Windows

https://github.com/ruby/reline/commit/2a97ca9362
This commit is contained in:
aycabta 2020-12-17 19:57:44 +09:00
Родитель 0158ba7e51
Коммит cdf2790aa0
2 изменённых файлов: 9 добавлений и 1 удалений

Просмотреть файл

@ -233,7 +233,9 @@ class Reline::Windows
def self.move_cursor_up(val)
if val > 0
@@SetConsoleCursorPosition.call(@@hConsoleHandle, (cursor_pos.y - val) * 65536 + cursor_pos.x)
y = cursor_pos.y - val
y = 0 if y < 0
@@SetConsoleCursorPosition.call(@@hConsoleHandle, y * 65536 + cursor_pos.x)
elsif val < 0
move_cursor_down(-val)
end
@ -241,6 +243,9 @@ class Reline::Windows
def self.move_cursor_down(val)
if val > 0
screen_height = get_screen_size.first
y = cursor_pos.y + val
y = screen_height - 1 if y > (screen_height - 1)
@@SetConsoleCursorPosition.call(@@hConsoleHandle, (cursor_pos.y + val) * 65536 + cursor_pos.x)
elsif val < 0
move_cursor_up(-val)
@ -257,6 +262,8 @@ class Reline::Windows
def self.scroll_down(val)
return if val.zero?
screen_height = get_screen_size.first
val = screen_height - 1 if val > (screen_height - 1)
scroll_rectangle = [0, val, get_screen_size.last, get_screen_size.first].pack('s4')
destination_origin = 0 # y * 65536 + x
fill = [' '.ord, 0].pack('SS')

Просмотреть файл

@ -426,6 +426,7 @@ begin
end
def test_enable_bracketed_paste
omit if Reline::IOGate.win?
write_inputrc <<~LINES
set enable-bracketed-paste on
LINES