class Uinput::Keyboard
Constants
- VERSION
Attributes
keymap[RW]
Public Class Methods
keymap(names)
click to toggle source
# File lib/uinput/keyboard.rb, line 10 def keymap(names) Xkbcommon::Context.new.keymap_from_names(names) end
new(keymap, &block)
click to toggle source
Calls superclass method
# File lib/uinput/keyboard.rb, line 15 def initialize(keymap, &block) @keymap = keymap super(&block) end
Public Instance Methods
press(*symbols)
click to toggle source
# File lib/uinput/keyboard.rb, line 22 def press(*symbols) symbols.flat_map do |symbol| symbol(symbol).keys.map do |key| send_event(:EV_KEY, key.scan_code, 1) key.code end.tap do send_event(:EV_SYN, :SYN_REPORT) end end end
release(*symbols)
click to toggle source
# File lib/uinput/keyboard.rb, line 33 def release(*symbols) symbols.flat_map do |symbol| symbol(symbol).keys.map do |key| send_event(:EV_KEY, key.scan_code, 0) key.code end.tap do send_event(:EV_SYN, :SYN_REPORT) end end end
string_to_symbols(string)
click to toggle source
# File lib/uinput/keyboard.rb, line 64 def string_to_symbols(string) string.chars.map{ |char| char_to_symbol(char).name } end
symbols_to_keycodes(*names)
click to toggle source
# File lib/uinput/keyboard.rb, line 60 def symbols_to_keycodes(*names) names.map{ |name| symbol(name).keys.map(&:code) } end
tap(*symbols)
click to toggle source
# File lib/uinput/keyboard.rb, line 44 def tap(*symbols) press(*symbols) release(*symbols) end
type(string)
click to toggle source
# File lib/uinput/keyboard.rb, line 49 def type(string) # prevent dropped key events (b/c of evdev buffer overflow?) by sending # out the event chain in chunks rather than in one piece keycodes = [] string_to_symbols(string).each_slice(8) do |symbols| keycodes += symbols.map{ |symbol| tap(symbol) } sleep 0.01 # time to breath end keycodes end
Private Instance Methods
char_to_symbol(char)
click to toggle source
# File lib/uinput/keyboard.rb, line 74 def char_to_symbol(char) @keymap.characters[char] or raise Device::Error.new("no character '#{char}' in keymap") end
symbol(name)
click to toggle source
# File lib/uinput/keyboard.rb, line 70 def symbol(name) @keymap.symbols[name.to_sym] or raise Device::Error.new("no keysym '#{name}' in keymap") end