fusuma-plugin-appmatcher 0.1.1 → 0.1.5
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/README.md +24 -24
- data/fusuma-plugin-appmatcher.gemspec +2 -2
- data/lib/fusuma/plugin/appmatcher/gnome.rb +0 -1
- data/lib/fusuma/plugin/appmatcher/version.rb +1 -1
- data/lib/fusuma/plugin/appmatcher/x11.rb +4 -3
- data/lib/fusuma/plugin/appmatcher.rb +23 -4
- data/spec/fusuma/plugin/appmatcher/gnome_spec.rb +16 -0
- data/spec/fusuma/plugin/appmatcher_spec.rb +34 -4
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e83ab4ed022583573d314044dd916c8e997d7c8ded16d6e5e92dd47977eb68f
|
4
|
+
data.tar.gz: b25d958c8220d36c21ff0dae24fbf8e083feef7ca4d5317401de5926480b64af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47204d64d8ea6999328d00a6e4eb4d36823e91aaff66a8f6afcaef5bc09c6e5a471da0c09b2cbc72093c8246eaa7446e12bb84d89f986ca937e7aa8667f13720
|
7
|
+
data.tar.gz: d738fcde80baaa9cd61869caeb26667d04c8a1951956d0f2b0e274696e4c5b8bf57881a00ff2157e4275284fac1c53e4383b834ce931d3d6f1c3fd0a4a626276
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Fusuma::Plugin::Appmatcher [](https://badge.fury.io/rb/fusuma-plugin-appmatcher) [](https://travis-ci.com/iberianpig/fusuma-plugin-appmatcher)
|
2
2
|
|
3
|
-
[Fusuma](https://github.com/iberianpig/fusuma) plugin configure
|
3
|
+
[Fusuma](https://github.com/iberianpig/fusuma) plugin configure app-specific gestures
|
4
4
|
|
5
5
|
* Switch gesture mappings by detecting active application.
|
6
6
|
* Support X11, Ubuntu-Wayland
|
@@ -49,7 +49,7 @@ In the following example of config.yml
|
|
49
49
|
* On Google-chrome, the three-finger gesture is mapped to open in tab, close tab, back in history, forward in history.
|
50
50
|
* On Gnome-terminal, the three-finger gesture will be mapped to open in tab, close in tab.
|
51
51
|
|
52
|
-
```
|
52
|
+
```yaml
|
53
53
|
# this is default context
|
54
54
|
swipe:
|
55
55
|
4:
|
@@ -62,28 +62,28 @@ swipe:
|
|
62
62
|
sendkey: 'LEFTCTRL+LEFTALT+UP'
|
63
63
|
LEFTSHIFT:
|
64
64
|
sendkey: 'LEFTSHIFT+LEFTCTRL+LEFTALT+UP'
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
65
|
+
---
|
66
|
+
context:
|
67
|
+
application: Google-chrome
|
68
|
+
swipe:
|
69
|
+
3:
|
70
|
+
left:
|
71
|
+
sendkey: 'LEFTALT+RIGHT'
|
72
|
+
right:
|
73
|
+
sendkey: 'LEFTALT+LEFT'
|
74
|
+
up:
|
75
|
+
sendkey: 'LEFTCTRL+T'
|
76
|
+
down:
|
77
|
+
sendkey: 'LEFTCTRL+W'
|
78
|
+
---
|
79
|
+
context:
|
80
|
+
application: Gnome-terminal
|
81
|
+
swipe:
|
82
|
+
3:
|
83
|
+
up:
|
84
|
+
sendkey: 'LEFTSHIFT+LEFTCTRL+T'
|
85
|
+
down:
|
86
|
+
sendkey: 'LEFTSHIFT+LEFTCTRL+W'
|
87
87
|
```
|
88
88
|
|
89
89
|
## Contributing
|
@@ -22,8 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
spec.
|
25
|
+
spec.add_dependency "rexml" # ruby-dbus doesn't resolve dependency
|
26
26
|
spec.add_runtime_dependency 'ruby-dbus'
|
27
27
|
|
28
|
-
spec.add_dependency 'fusuma', '~> 2.0
|
28
|
+
spec.add_dependency 'fusuma', '~> 2.0'
|
29
29
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'open3'
|
3
4
|
require_relative './user_switcher'
|
4
5
|
require 'fusuma/multi_logger'
|
5
6
|
require 'fusuma/custom_process'
|
6
|
-
require 'posix/spawn'
|
7
7
|
|
8
8
|
module Fusuma
|
9
9
|
module Plugin
|
@@ -75,7 +75,7 @@ module Fusuma
|
|
75
75
|
private
|
76
76
|
|
77
77
|
def active_window_id(watch: false, &block)
|
78
|
-
|
78
|
+
i, o, e, _w = Open3.popen3(xprop_active_window_id(watch))
|
79
79
|
i.close
|
80
80
|
o.each do |line|
|
81
81
|
id = line.match(/0x[\da-z]{2,}/)&.to_s
|
@@ -89,7 +89,8 @@ module Fusuma
|
|
89
89
|
o.close
|
90
90
|
|
91
91
|
return nil unless block_given?
|
92
|
-
|
92
|
+
|
93
|
+
sleep 0.5
|
93
94
|
active_window_id(watch: watch, &block)
|
94
95
|
rescue StandardError => e
|
95
96
|
MultiLogger.error e.message
|
@@ -13,11 +13,30 @@ module Fusuma
|
|
13
13
|
|
14
14
|
# @return [Class]
|
15
15
|
def backend_klass
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
case xdg_session_type
|
17
|
+
when /x11/
|
18
|
+
return X11
|
19
|
+
when /wayland/
|
20
|
+
return Gnome if xdg_current_desktop =~ /GNOME/
|
20
21
|
end
|
22
|
+
MultiLogger.error(
|
23
|
+
<<~ERROR
|
24
|
+
appmatcher doesn't support
|
25
|
+
XDG_CURRENT_DESKTOP: '#{xdg_current_desktop}'
|
26
|
+
XDG_SESSION_TYPE: '#{xdg_session_type}'"
|
27
|
+
ERROR
|
28
|
+
)
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def xdg_session_type
|
35
|
+
ENV.fetch('XDG_SESSION_TYPE', '')
|
36
|
+
end
|
37
|
+
|
38
|
+
def xdg_current_desktop
|
39
|
+
ENV.fetch('XDG_CURRENT_DESKTOP', '')
|
21
40
|
end
|
22
41
|
end
|
23
42
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require './lib/fusuma/plugin/appmatcher/gnome'
|
5
|
+
|
6
|
+
module Fusuma
|
7
|
+
module Plugin
|
8
|
+
module Appmatcher
|
9
|
+
RSpec.describe Gnome do
|
10
|
+
it 'requires ruby-dbus' do
|
11
|
+
expect(DBus).not_to be nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,9 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
module Fusuma
|
6
|
+
module Plugin
|
7
|
+
RSpec.describe Appmatcher do
|
8
|
+
it 'has a version number' do
|
9
|
+
expect(Appmatcher::VERSION).not_to be nil
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#backend_klass' do
|
13
|
+
context 'when XDG_CURRENT_DESKTOP is UNKNOWN' do
|
14
|
+
before { allow(Appmatcher).to receive(:xdg_current_desktop).and_return('UNKNOWN') }
|
15
|
+
it { expect { Appmatcher.backend_klass }.to raise_error }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when XDG_SESSION_TYPE is x11' do
|
19
|
+
before { allow(Appmatcher).to receive(:xdg_session_type).and_return('x11') }
|
20
|
+
it { expect(Appmatcher.backend_klass).to eq Appmatcher::X11 }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when XDG_SESSION_TYPE is wayland' do
|
24
|
+
before { allow(Appmatcher).to receive(:xdg_session_type).and_return('wayland') }
|
25
|
+
|
26
|
+
context 'when XDG_CURRENT_DESKTOP is ubuntu:GNOME' do
|
27
|
+
before { allow(Appmatcher).to receive(:xdg_current_desktop).and_return('ubuntu:GNOME') }
|
28
|
+
it { expect(Appmatcher.backend_klass).to eq Appmatcher::Gnome }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when XDG_CURRENT_DESKTOP is UNKNOWN' do
|
32
|
+
before { allow(Appmatcher).to receive(:xdg_current_desktop).and_return('UNKNOWN') }
|
33
|
+
it { expect { Appmatcher.backend_klass }.to raise_error }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
8
38
|
end
|
9
39
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fusuma-plugin-appmatcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rexml
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0
|
47
|
+
version: '2.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.0
|
54
|
+
version: '2.0'
|
55
55
|
description: fusuma-plugin-appmatcher is Fusuma plugin for assigning gesture mapping
|
56
56
|
per application.
|
57
57
|
email:
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/fusuma/plugin/events/records/appmatcher_record.rb
|
78
78
|
- lib/fusuma/plugin/inputs/appmatcher_input.rb
|
79
79
|
- lib/fusuma/plugin/parsers/appmatcher_parser.rb
|
80
|
+
- spec/fusuma/plugin/appmatcher/gnome_spec.rb
|
80
81
|
- spec/fusuma/plugin/appmatcher_spec.rb
|
81
82
|
- spec/fusuma/plugin/inputs/appmatcher_detector_spec.rb
|
82
83
|
- spec/spec_helper.rb
|
@@ -84,7 +85,7 @@ homepage: https://github.com/iberianpig/fusuma-plugin-appmatcher
|
|
84
85
|
licenses:
|
85
86
|
- MIT
|
86
87
|
metadata: {}
|
87
|
-
post_install_message:
|
88
|
+
post_install_message:
|
88
89
|
rdoc_options: []
|
89
90
|
require_paths:
|
90
91
|
- lib
|
@@ -99,11 +100,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
100
|
- !ruby/object:Gem::Version
|
100
101
|
version: '0'
|
101
102
|
requirements: []
|
102
|
-
rubygems_version: 3.
|
103
|
-
signing_key:
|
103
|
+
rubygems_version: 3.2.15
|
104
|
+
signing_key:
|
104
105
|
specification_version: 4
|
105
106
|
summary: Fusuma plugin to assign gesture mapping per application
|
106
107
|
test_files:
|
107
|
-
- spec/fusuma/plugin/
|
108
|
+
- spec/fusuma/plugin/appmatcher/gnome_spec.rb
|
108
109
|
- spec/fusuma/plugin/appmatcher_spec.rb
|
110
|
+
- spec/fusuma/plugin/inputs/appmatcher_detector_spec.rb
|
109
111
|
- spec/spec_helper.rb
|