Class: Reline::Windows::KeyEventRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/reline/io/windows.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(virtual_key_code, char_code, control_key_state) ⇒ KeyEventRecord

Returns a new instance of KeyEventRecord.



486
487
488
489
490
491
492
493
494
495
496
497
498
# File 'lib/reline/io/windows.rb', line 486

def initialize(virtual_key_code, char_code, control_key_state)
  @virtual_key_code = virtual_key_code
  @char_code = char_code
  @control_key_state = control_key_state
  @enhanced = control_key_state & ENHANCED_KEY != 0

  (@control_keys = []).tap do |control_keys|
    # symbols must be sorted to make comparison is easier later on
    control_keys << :ALT   if control_key_state & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED) != 0
    control_keys << :CTRL  if control_key_state & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) != 0
    control_keys << :SHIFT if control_key_state & SHIFT_PRESSED != 0
  end.freeze
end

Instance Attribute Details

#char_codeObject (readonly)

Returns the value of attribute char_code.



484
485
486
# File 'lib/reline/io/windows.rb', line 484

def char_code
  @char_code
end

#control_key_stateObject (readonly)

Returns the value of attribute control_key_state.



484
485
486
# File 'lib/reline/io/windows.rb', line 484

def control_key_state
  @control_key_state
end

#control_keysObject (readonly)

Returns the value of attribute control_keys.



484
485
486
# File 'lib/reline/io/windows.rb', line 484

def control_keys
  @control_keys
end

#virtual_key_codeObject (readonly)

Returns the value of attribute virtual_key_code.



484
485
486
# File 'lib/reline/io/windows.rb', line 484

def virtual_key_code
  @virtual_key_code
end

Instance Method Details

#charObject



500
501
502
# File 'lib/reline/io/windows.rb', line 500

def char
  @char_code.chr(Encoding::UTF_8)
end

#enhanced?Boolean

Returns:

  • (Boolean)


504
505
506
# File 'lib/reline/io/windows.rb', line 504

def enhanced?
  @enhanced
end

#match?(control_keys: nil, virtual_key_code: nil, char_code: nil) ⇒ Boolean

Verifies if the arguments match with this key event. Nil arguments are ignored, but at least one must be passed as non-nil. To verify that no control keys were pressed, pass an empty array: ‘control_keys: []`.

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


511
512
513
514
515
516
517
# File 'lib/reline/io/windows.rb', line 511

def match?(control_keys: nil, virtual_key_code: nil, char_code: nil)
  raise ArgumentError, 'No argument was passed to match key event' if control_keys.nil? && virtual_key_code.nil? && char_code.nil?

  (control_keys.nil? || [*control_keys].sort == @control_keys) &&
  (virtual_key_code.nil? || @virtual_key_code == virtual_key_code) &&
  (char_code.nil? || char_code == @char_code)
end