fvwm-window-search 1.1.0 → 1.2.0

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -8
  3. data/focus.sh +16 -1
  4. data/fvwm-window-search +25 -8
  5. data/lib.rb +5 -5
  6. metadata +12 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 580941b472f2b948d9f6d854a337a1d066646c7b3705986f76f3b429845026a3
4
- data.tar.gz: 2e7b0a76b19a24514641ce603f35eee86f380bc8293c155014e80bfba9b24652
3
+ metadata.gz: dd55a9dff4bdaee0fcb2e3aab600d85f6c0d40b8a706ea1dd0d7d17e2c0a83c8
4
+ data.tar.gz: b47ae4bac4a1a0e68f629306de58e76f6d0111f48e1a9bb686fb63362179161b
5
5
  SHA512:
6
- metadata.gz: e85229be05ab43082df6362ca7b4b72c5f57cfdca85835027c979f305d01c332d74d5fa6830338548e08beb0718b4b25f2cd382c03da4ff66b5bce7a05429d79
7
- data.tar.gz: e9926afb792d151259ca4dadd48d6346da71437cbdc7642009392d08ff1e03a610b10b78e12475a58a6b901efb0551192d2977394e08e06aabdf51772e7c46e2
6
+ metadata.gz: 13ce630d60e59c33f1bd26c6b29f4dcca5134dabc8d4f0a6a54f812e9d5d50ebb4ca644031e126785cefdaad6cd95ce008a3ca7167deb04b103a0e9dfc43ed53
7
+ data.tar.gz: 00311f2288294e4556f3e38b297c33581a7f0ab0b8ced615daf07d31c88682d0555b164a8eb5be6d68729495a8460469ed244511d93d8f2cab0793abac7a8fbc
data/README.md CHANGED
@@ -5,14 +5,14 @@ Incremental window search & immediate switch to the selected window
5
5
 
6
6
  $ gem install fvwm-window-search
7
7
 
8
- ![A screenshot of running fvwm-window-search](https://raw.github.com/gromnitsky/fvwm-window-search/master/screnshot1.png)
8
+ ![demo](https://thumbs.gfycat.com/GenerousRingedFlicker-small.gif)
9
9
 
10
- * Should work w/ any X11 window manager.
11
- * Filtering by windows names/resources/classes.
10
+ * Should work w/ most stackings X11 window managers.
11
+ * Filtering by window name/resource/classe.
12
12
 
13
13
  ## Reqs
14
14
 
15
- * Ruby
15
+ * Ruby 2.4+
16
16
  * `xwininfo` & `xdotool` (`xorg-x11-utils` & `xdotool` Fedora pkgs)
17
17
 
18
18
  ## Compilation
@@ -22,7 +22,12 @@ not contravene w/ a system-installed dmenu.
22
22
 
23
23
  ## Usage
24
24
 
25
- Run `fvwm-window-search`.
25
+ ~~~
26
+ $ ./fvwm-window-search -h
27
+ Usage: fvwm-window-search [options]
28
+ -c path an alternative path to conf.yaml
29
+ -r focus a window only if Return is pressed
30
+ ~~~
26
31
 
27
32
  To customise dmenu or filtering, create a yaml file
28
33
  `$XDG_CONFIG_HOME/fvwm-window-search/conf.yaml`, e.g.:
@@ -40,8 +45,8 @@ filter:
40
45
  ~~~
41
46
 
42
47
  Subkeys in `dmenu` are the usual CLOs for
43
- [dmenu(1)][]. `selhook-return-key-focus-only` is a custom one, that
44
- enables window focusing on pressing Return only.
48
+ [dmenu(1)][]. `selhook-return-key-focus-only` is an equivalent of `-r`
49
+ CLO.
45
50
 
46
51
  [dmenu(1)]: https://manpages.debian.org/unstable/suckless-tools/dmenu.1.en.html
47
52
 
@@ -51,7 +56,7 @@ a subkey is an array of regexes. See the defaults in
51
56
 
52
57
  ## Bugs
53
58
 
54
- * Tested only w/ Ruby-2.7.0 & Fvwm3.
59
+ * Tested only w/ Fvwm3.
55
60
  * No distinction between normal & iconified windows.
56
61
 
57
62
  ## License
data/focus.sh CHANGED
@@ -4,4 +4,19 @@ id=`echo "$1" | awk -F'|' '{print $NF} END { exit $NF == "" ? 1 : 0}'` || {
4
4
  echo "usage: `basename "$0"` 'name | class | id'"
5
5
  exit 1
6
6
  }
7
- xdotool windowactivate "$id" mousemove --window "$id" 0 0
7
+
8
+ # tries to put a mouse pointer as shown on the picture below (▲ is the
9
+ # pointer):
10
+ #
11
+ # +-------------+
12
+ # | Title |
13
+ # +-------------+
14
+ # | ▲ |
15
+ # | |
16
+ # | |
17
+ # +-------------+
18
+
19
+ eval "`xdotool getwindowgeometry --shell "$id"`"
20
+ x=$((WIDTH/2))
21
+
22
+ xdotool windowactivate "$id" mousemove --window "$id" "$x" 0
@@ -3,18 +3,13 @@
3
3
  require_relative './lib'
4
4
  include FvwmWindowSearch
5
5
  require 'yaml'
6
-
7
- def options_load
8
- xdg_config_home = ENV['XDG_CONFIG_HOME'] || File.expand_path('~/.config')
9
- conf = File.join xdg_config_home, 'fvwm-window-search', 'conf.yaml'
10
- r = File.read conf rescue nil
11
- YAML.load r, conf rescue errx 1, "invalid config: #{$!}" if r
12
- end
6
+ require 'optparse'
13
7
 
14
8
  def options
15
9
  default = {
16
10
  "dmenu" => { # each key is a corresponding CL option
17
11
  "selhook" => File.join(__dir__, "focus.sh %s"),
12
+ "selhook-return-key-focus-only" => false,
18
13
  "fn" => "Monospace-10",
19
14
  "l" => 8,
20
15
  "b" => true,
@@ -27,7 +22,29 @@ def options
27
22
  }
28
23
  }
29
24
 
30
- deep_merge(default, options_load || {})
25
+ cl = options_load_cl
26
+ env = deep_merge(default, options_load_file(cl) || {})
27
+ deep_merge env, cl
28
+ end
29
+
30
+ def options_load_cl
31
+ opt = { "dmenu" => {} }
32
+ OptionParser.new do |o|
33
+ o.on("-c path", "an alternative path to conf.yaml") { |v| opt["conf"] = v }
34
+ o.on("-r", "focus a window only if Return is pressed") do
35
+ opt["dmenu"]["selhook-return-key-focus-only"] = true
36
+ end
37
+ end.parse!
38
+ opt
39
+ end
40
+
41
+ def options_load_file opt # return nil if config wasn't found
42
+ conf = opt["conf"] || -> do
43
+ xdg_config_home = ENV['XDG_CONFIG_HOME'] || File.expand_path('~/.config')
44
+ File.join xdg_config_home, 'fvwm-window-search', 'conf.yaml'
45
+ end.call
46
+ r = File.read conf rescue nil
47
+ YAML.load r, conf rescue errx 1, "invalid config: #{$!}" if r
31
48
  end
32
49
 
33
50
  def menu params, text
data/lib.rb CHANGED
@@ -71,8 +71,8 @@ module FvwmWindowSearch
71
71
 
72
72
  def windows_filter patterns, winlist
73
73
  desired = -> (type, value) {
74
- include = patterns[type].filter{|v| v[0] != '!'}
75
- exclude = patterns[type].filter{|v| v[0] == '!'}.map {|v| v[1..-1]}
74
+ include = patterns[type].select {|v| v[0] != '!'}
75
+ exclude = patterns[type].select {|v| v[0] == '!'}.map {|v| v[1..-1]}
76
76
 
77
77
  exclude.each do |pattern|
78
78
  return true if value.match pattern
@@ -83,9 +83,9 @@ module FvwmWindowSearch
83
83
  true
84
84
  }
85
85
 
86
- winlist.filter { |w| desired.call "class", w.class }
87
- .filter{ |w| desired.call "resource", w.resource }
88
- .filter{ |w| desired.call "name", w.name }
86
+ winlist.select { |w| desired.call "class", w.class }
87
+ .select { |w| desired.call "resource", w.resource }
88
+ .select { |w| desired.call "name", w.name }
89
89
  end
90
90
 
91
91
  def deep_merge first, second
metadata CHANGED
@@ -1,19 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fvwm-window-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Gromnitsky
8
8
  autorequire:
9
9
  bindir: "."
10
10
  cert_chain: []
11
- date: 2020-07-19 00:00:00.000000000 Z
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
- Search for windows interactively using a patched dmenu utility.
15
- Originally made for Fvwm, it's been fully rewritten to work out-of-the-box
16
- with any window manager. Requires xdotool & xwininfo installed.
14
+ A window switcher: search for windows interactively using a patched
15
+ dmenu utility (comes with the gem). This was originally made for Fvwm,
16
+ but it's been fully rewritten to work out-of-the-box with any stacking
17
+ window manager. Requires xdotool & xwininfo installed.
18
+
19
+ It differs from rofi & co in that it activates (brings up) windows
20
+ _during_ the search.
17
21
  email: alexander.gromnitsky@gmail.com
18
22
  executables:
19
23
  - fvwm-window-search
@@ -40,7 +44,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
40
44
  requirements:
41
45
  - - ">="
42
46
  - !ruby/object:Gem::Version
43
- version: '0'
47
+ version: 2.4.0
44
48
  required_rubygems_version: !ruby/object:Gem::Requirement
45
49
  requirements:
46
50
  - - ">="
@@ -50,5 +54,6 @@ requirements: []
50
54
  rubygems_version: 3.1.2
51
55
  signing_key:
52
56
  specification_version: 4
53
- summary: Interactive incremental windows search & selection for X Window
57
+ summary: 'A window switcher: an interactive incremental windows search & selection
58
+ for X Window'
54
59
  test_files: []