mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/reline] Use String#unpack1
https://github.com/ruby/reline/commit/179c52bca8
This commit is contained in:
parent
a2d2f00e4a
commit
4401bbe8a7
1 changed files with 13 additions and 13 deletions
|
@ -235,21 +235,21 @@ class Reline::Windows
|
||||||
num_of_events = 0.chr * 8
|
num_of_events = 0.chr * 8
|
||||||
while @@output_buf.empty? #or true
|
while @@output_buf.empty? #or true
|
||||||
next if @@WaitForSingleObject.(@@hConsoleInputHandle, 100) != 0 # max 0.1 sec
|
next if @@WaitForSingleObject.(@@hConsoleInputHandle, 100) != 0 # max 0.1 sec
|
||||||
next if @@GetNumberOfConsoleInputEvents.(@@hConsoleInputHandle, num_of_events) == 0 or num_of_events.unpack('L').first == 0
|
next if @@GetNumberOfConsoleInputEvents.(@@hConsoleInputHandle, num_of_events) == 0 or num_of_events.unpack1('L') == 0
|
||||||
input_record = 0.chr * 18
|
input_record = 0.chr * 18
|
||||||
read_event = 0.chr * 4
|
read_event = 0.chr * 4
|
||||||
if @@ReadConsoleInputW.(@@hConsoleInputHandle, input_record, 1, read_event) != 0
|
if @@ReadConsoleInputW.(@@hConsoleInputHandle, input_record, 1, read_event) != 0
|
||||||
event = input_record[0, 2].unpack('s*').first
|
event = input_record[0, 2].unpack1('s*')
|
||||||
case event
|
case event
|
||||||
when WINDOW_BUFFER_SIZE_EVENT
|
when WINDOW_BUFFER_SIZE_EVENT
|
||||||
@@winch_handler.()
|
@@winch_handler.()
|
||||||
when KEY_EVENT
|
when KEY_EVENT
|
||||||
key_down = input_record[4, 4].unpack('l*').first
|
key_down = input_record[4, 4].unpack1('l*')
|
||||||
repeat_count = input_record[8, 2].unpack('s*').first
|
repeat_count = input_record[8, 2].unpack1('s*')
|
||||||
virtual_key_code = input_record[10, 2].unpack('s*').first
|
virtual_key_code = input_record[10, 2].unpack1('s*')
|
||||||
virtual_scan_code = input_record[12, 2].unpack('s*').first
|
virtual_scan_code = input_record[12, 2].unpack1('s*')
|
||||||
char_code = input_record[14, 2].unpack('S*').first
|
char_code = input_record[14, 2].unpack1('S*')
|
||||||
control_key_state = input_record[16, 2].unpack('S*').first
|
control_key_state = input_record[16, 2].unpack1('S*')
|
||||||
is_key_down = key_down.zero? ? false : true
|
is_key_down = key_down.zero? ? false : true
|
||||||
if is_key_down
|
if is_key_down
|
||||||
process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_code, control_key_state)
|
process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_code, control_key_state)
|
||||||
|
@ -291,8 +291,8 @@ class Reline::Windows
|
||||||
def self.cursor_pos
|
def self.cursor_pos
|
||||||
csbi = 0.chr * 22
|
csbi = 0.chr * 22
|
||||||
@@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi)
|
@@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi)
|
||||||
x = csbi[4, 2].unpack('s*').first
|
x = csbi[4, 2].unpack1('s*')
|
||||||
y = csbi[6, 2].unpack('s*').first
|
y = csbi[6, 2].unpack1('s*')
|
||||||
Reline::CursorPos.new(x, y)
|
Reline::CursorPos.new(x, y)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ class Reline::Windows
|
||||||
def self.erase_after_cursor
|
def self.erase_after_cursor
|
||||||
csbi = 0.chr * 24
|
csbi = 0.chr * 24
|
||||||
@@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi)
|
@@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi)
|
||||||
cursor = csbi[4, 4].unpack('L').first
|
cursor = csbi[4, 4].unpack1('L')
|
||||||
written = 0.chr * 4
|
written = 0.chr * 4
|
||||||
@@FillConsoleOutputCharacter.call(@@hConsoleHandle, 0x20, get_screen_size.last - cursor_pos.x, cursor, written)
|
@@FillConsoleOutputCharacter.call(@@hConsoleHandle, 0x20, get_screen_size.last - cursor_pos.x, cursor, written)
|
||||||
@@FillConsoleOutputAttribute.call(@@hConsoleHandle, 0, get_screen_size.last - cursor_pos.x, cursor, written)
|
@@FillConsoleOutputAttribute.call(@@hConsoleHandle, 0, get_screen_size.last - cursor_pos.x, cursor, written)
|
||||||
|
@ -343,8 +343,8 @@ class Reline::Windows
|
||||||
def self.clear_screen
|
def self.clear_screen
|
||||||
csbi = 0.chr * 22
|
csbi = 0.chr * 22
|
||||||
return if @@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi) == 0
|
return if @@GetConsoleScreenBufferInfo.call(@@hConsoleHandle, csbi) == 0
|
||||||
buffer_width = csbi[0, 2].unpack('S').first
|
buffer_width = csbi[0, 2].unpack1('S')
|
||||||
attributes = csbi[8, 2].unpack('S').first
|
attributes = csbi[8, 2].unpack1('S')
|
||||||
_window_left, window_top, _window_right, window_bottom = *csbi[10,8].unpack('S*')
|
_window_left, window_top, _window_right, window_bottom = *csbi[10,8].unpack('S*')
|
||||||
fill_length = buffer_width * (window_bottom - window_top + 1)
|
fill_length = buffer_width * (window_bottom - window_top + 1)
|
||||||
screen_topleft = window_top * 65536
|
screen_topleft = window_top * 65536
|
||||||
|
|
Loading…
Reference in a new issue