xkeyrap 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/xkeyrap +5 -3
- data/lib/xkeyrap/command.rb +0 -1
- data/lib/xkeyrap/key.rb +3 -0
- data/lib/xkeyrap/version.rb +1 -1
- data/lib/xkeyrap.rb +13 -10
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53d65df084224617a2b2e9e7c785c26169a699129b04a6304e3d8dbd692609b0
|
4
|
+
data.tar.gz: 273876407024ab07ae36d093783e7fb509dbd15dabb2c7ca65b0d0f33f928419
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76e0757655a469cae1a96329117aa128d05c9a74fdd3b0f89ce733082a8b1de1f61f1018bea08c067f8cafc7dbd500cc1b6c5034637f6805704e6be4ba03f5b5
|
7
|
+
data.tar.gz: 0c73fa4e02107bb8c7543b61dc0d83f4649a2c986436e8843d70b1dede44fb12c873d20fe7769d06d4b2e5b53382ff7c4c7e4f8e11562e7b988513f81f1e58c0
|
data/bin/xkeyrap
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'xkeyrap'
|
4
|
-
|
5
|
-
puts "
|
6
|
-
|
4
|
+
keyboard_device = ARGV[1]
|
5
|
+
puts "#########################################"
|
6
|
+
puts "grab device: #{keyboard_device}"
|
7
|
+
puts "#########################################"
|
8
|
+
Xkeyrap::Cli.run(keyboard_device)
|
data/lib/xkeyrap/command.rb
CHANGED
data/lib/xkeyrap/key.rb
CHANGED
data/lib/xkeyrap/version.rb
CHANGED
data/lib/xkeyrap.rb
CHANGED
@@ -9,10 +9,9 @@ require 'uinput/device'
|
|
9
9
|
|
10
10
|
module Xkeyrap
|
11
11
|
class Cli
|
12
|
-
|
13
|
-
def self.run(device)
|
12
|
+
def self.run(keyboard_device)
|
14
13
|
display = XlibObj::Display.new(':0')
|
15
|
-
|
14
|
+
virtual_device = Uinput::Device.new do
|
16
15
|
self.name = "Xkeyrap virtual device"
|
17
16
|
self.type = LinuxInput::BUS_VIRTUAL
|
18
17
|
|
@@ -24,12 +23,12 @@ module Xkeyrap
|
|
24
23
|
self.add_event(:EV_SYN)
|
25
24
|
end
|
26
25
|
|
27
|
-
keyboard = Evdev.new(
|
26
|
+
keyboard = Evdev.new(keyboard_device)
|
28
27
|
keyboard.grab
|
29
28
|
|
30
|
-
command = Command.new(
|
29
|
+
command = Command.new(virtual_device, nil)
|
31
30
|
|
32
|
-
|
31
|
+
keyboard.on(*Xkeyrap::Key::ALL_KEYS) do |state, key|
|
33
32
|
root_window = display.screens.first.root_window
|
34
33
|
top_level_windows = root_window.property(:_NET_CLIENT_LIST_STACKING)
|
35
34
|
focused_window = display.focused_window
|
@@ -57,10 +56,14 @@ module Xkeyrap
|
|
57
56
|
parent = FFI::MemoryPointer.new :Window
|
58
57
|
number = FFI::MemoryPointer.new :uint
|
59
58
|
children = FFI::MemoryPointer.new :pointer
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
begin
|
60
|
+
q = Xlib.XQueryTree(display.to_native, focused_window.to_native, root, parent, children, number)
|
61
|
+
parent_window_id = parent.read(:int)
|
62
|
+
parent_window = top_level_windows.select {|tlw| tlw.id == parent_window_id }.first
|
63
|
+
parent_window.property("WM_CLASS")[1]
|
64
|
+
rescue
|
65
|
+
"global"
|
66
|
+
end
|
64
67
|
end
|
65
68
|
end
|
66
69
|
end
|