mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/reline] check ENABLE_VIRTUAL_TERMINAL_PROCESSING flag and switch eof processing
https://github.com/ruby/reline/commit/3535676689
This commit is contained in:
parent
38cefac7ce
commit
38d30a6942
2 changed files with 26 additions and 2 deletions
|
@ -726,7 +726,7 @@ class Reline::LineEditor
|
|||
if line.nil?
|
||||
if calculate_width(visual_lines[index - 1], true) == Reline::IOGate.get_screen_size.last
|
||||
# reaches the end of line
|
||||
if Reline::IOGate.win?
|
||||
if Reline::IOGate.win? and Reline::IOGate.win_legacy_console?
|
||||
# A newline is automatically inserted if a character is rendered at
|
||||
# eol on command prompt.
|
||||
else
|
||||
|
@ -744,7 +744,7 @@ class Reline::LineEditor
|
|||
next
|
||||
end
|
||||
@output.write line
|
||||
if Reline::IOGate.win? and calculate_width(line, true) == Reline::IOGate.get_screen_size.last
|
||||
if Reline::IOGate.win? and Reline::IOGate.win_legacy_console? and calculate_width(line, true) == Reline::IOGate.get_screen_size.last
|
||||
# A newline is automatically inserted if a character is rendered at eol on command prompt.
|
||||
@rest_height -= 1 if @rest_height > 0
|
||||
end
|
||||
|
|
|
@ -9,6 +9,10 @@ class Reline::Windows
|
|||
true
|
||||
end
|
||||
|
||||
def self.win_legacy_console?
|
||||
@@legacy_console
|
||||
end
|
||||
|
||||
RAW_KEYSTROKE_CONFIG = {
|
||||
[224, 72] => :ed_prev_history, # ↑
|
||||
[224, 80] => :ed_next_history, # ↓
|
||||
|
@ -94,6 +98,26 @@ class Reline::Windows
|
|||
@@GetFileInformationByHandleEx = Win32API.new('kernel32', 'GetFileInformationByHandleEx', ['L', 'I', 'P', 'L'], 'I')
|
||||
@@FillConsoleOutputAttribute = Win32API.new('kernel32', 'FillConsoleOutputAttribute', ['L', 'L', 'L', 'L', 'P'], 'L')
|
||||
|
||||
@@GetConsoleMode = Win32API.new('kernel32', 'GetConsoleMode', ['L', 'P'], 'L')
|
||||
@@SetConsoleMode = Win32API.new('kernel32', 'SetConsoleMode', ['L', 'L'], 'L')
|
||||
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
|
||||
|
||||
private_class_method def self.getconsolemode
|
||||
mode = '\000\000\000\000'
|
||||
@@GetConsoleMode.call(@@hConsoleHandle, mode)
|
||||
mode.unpack1('L')
|
||||
end
|
||||
|
||||
private_class_method def self.setconsolemode(mode)
|
||||
@@SetConsoleMode.call(@@hConsoleHandle, mode)
|
||||
end
|
||||
|
||||
@@legacy_console = (getconsolemode() & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0)
|
||||
#if @@legacy_console
|
||||
# setconsolemode(getconsolemode() | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
|
||||
# @@legacy_console = (getconsolemode() & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0)
|
||||
#end
|
||||
|
||||
@@input_buf = []
|
||||
@@output_buf = []
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue