clock_window 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/README.md +1 -0
- data/lib/clock_window/filters.rb +48 -0
- data/lib/clock_window/oscommand.rb +61 -0
- data/lib/clock_window/refinements.rb +12 -0
- data/lib/clock_window/version.rb +1 -1
- data/lib/clock_window.rb +5 -52
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5012765917a148b032d0ba2d0500799e4f755f3c
|
4
|
+
data.tar.gz: 4753ccc37be96da66166b90a683c2c08c3cad383
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4794cfd6ebec829de70e8ef42a6c6901ffd3b2cbdcdbbc7669a22374fc075bcda2eb36e7e3d1dafb470ff117319e0487bdd650b3b432655e6a47015aed440ed
|
7
|
+
data.tar.gz: 615416ae0e711751cefed115c9848e090a919c8f3f40ea39c0896fa29973a6d4a95eabd1709a1d68b9ae2f1b7428683383a2948e2a93f9e8566acd8d439a4fcf
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/danielpclark/clock_window.svg?branch=master)](https://travis-ci.org/danielpclark/clock_window)
|
1
2
|
[![Code Triagers Badge](http://www.codetriage.com/danielpclark/clock_window/badges/users.svg)](http://www.codetriage.com/danielpclark/clock_window)
|
2
3
|
|
3
4
|
# Clock Window
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module ClockWindow
|
2
|
+
class Filters
|
3
|
+
def initialize(**kwargs)
|
4
|
+
@title_range = kwargs.fetch(:title_range) { 0..60 }
|
5
|
+
@lazy_matchers = kwargs.fetch(:lazy_matchers) { true }
|
6
|
+
@no_notify = kwargs.fetch(:no_notify) { false }
|
7
|
+
|
8
|
+
# These are destructive matchers. String will conform to match data.
|
9
|
+
@matches = Array(kwargs.fetch(:matches) { [] }) # [/(thing)/, /(in)/] # parenthesis takes priority
|
10
|
+
@substitutions = Array(kwargs.fetch(:substitutions) { [] }) # [[//,'']]
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(source)
|
14
|
+
apply_filters(source)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def apply_filters(target)
|
19
|
+
target = matchers(target)
|
20
|
+
@substitutions.each do |a,b|
|
21
|
+
target = target.gsub(a,b)
|
22
|
+
end
|
23
|
+
target = no_notify(target)
|
24
|
+
target[@title_range]
|
25
|
+
end
|
26
|
+
|
27
|
+
def matchers(target)
|
28
|
+
@matches.each do |fltr|
|
29
|
+
if @lazy_matchers
|
30
|
+
tmp = target.match( Regexp.new(fltr) )
|
31
|
+
tmp = tmp[1] || tmp[0] if tmp.is_a? MatchData
|
32
|
+
target = tmp || target
|
33
|
+
else
|
34
|
+
target = target[Regexp.new(fltr)].to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
target
|
38
|
+
end
|
39
|
+
|
40
|
+
def no_notify(target)
|
41
|
+
# Remove Twitter notifications (must be last)
|
42
|
+
# Other sites may follow same notification pattern
|
43
|
+
target = target.gsub(Regexp.new(/\A ?\(\d+\) ?/), '') if @no_notify
|
44
|
+
target
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module ClockWindow
|
2
|
+
class OScommand
|
3
|
+
using Refinements::AddIf
|
4
|
+
# As this will get more sophisticated this class is the Back End
|
5
|
+
def initialize(**kwargs)
|
6
|
+
@filter_opts = kwargs.fetch(:filter_opts) { {} }
|
7
|
+
|
8
|
+
# Detect operating system
|
9
|
+
@os = RbConfig::CONFIG['host_os']
|
10
|
+
end
|
11
|
+
|
12
|
+
# output will be a two parameter array
|
13
|
+
# the first will be an OS specific executable string
|
14
|
+
# the second will be formatting the return value from the executables output
|
15
|
+
def active_window
|
16
|
+
# Choose script to execute and format output to just window name
|
17
|
+
case @os
|
18
|
+
when /linux/i
|
19
|
+
# Linux command to execute
|
20
|
+
exe = "xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME"
|
21
|
+
|
22
|
+
# Filters for resulting string
|
23
|
+
format = Filters.new(
|
24
|
+
matches: [ Regexp.new(/.*\"(.*)\"\n\z/) ].
|
25
|
+
add_if(@filter_opts.has_key? :matches){@filter_opts.delete(:matches)},
|
26
|
+
**@filter_opts
|
27
|
+
)
|
28
|
+
[exe, format]
|
29
|
+
when /darwin/i
|
30
|
+
exe = <<-SCRIPT
|
31
|
+
osascript -e '
|
32
|
+
global frontApp, frontAppName, windowTitle
|
33
|
+
|
34
|
+
set windowTitle to ""
|
35
|
+
tell application "System Events"
|
36
|
+
set frontApp to first application process whose frontmost is true
|
37
|
+
set frontAppName to name of frontApp
|
38
|
+
tell process frontAppName
|
39
|
+
tell (1st window whose value of attribute "AXMain" is true)
|
40
|
+
set windowTitle to value of attribute "AXTitle"
|
41
|
+
end tell
|
42
|
+
end tell
|
43
|
+
end tell
|
44
|
+
|
45
|
+
return windowTitle & " - " & frontAppName
|
46
|
+
'
|
47
|
+
SCRIPT
|
48
|
+
|
49
|
+
format = Filters.new(
|
50
|
+
matches: [ Regexp.new(/(.*)\n/) ].
|
51
|
+
add_if(@filter_opts.has_key? :matches){@filter_opts.delete(:matches)},
|
52
|
+
**@filter_opts
|
53
|
+
)
|
54
|
+
[exe, format]
|
55
|
+
else
|
56
|
+
raise "Not implemented for #{@os}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
private_constant :OScommand
|
61
|
+
end
|
data/lib/clock_window/version.rb
CHANGED
data/lib/clock_window.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require "clock_window/version"
|
2
|
+
require "clock_window/refinements"
|
3
|
+
require "clock_window/filters"
|
4
|
+
require "clock_window/oscommand"
|
2
5
|
|
3
6
|
module ClockWindow
|
4
7
|
class ClockIt
|
5
8
|
# As this will get more sophisticated this class is the UI
|
6
|
-
def initialize
|
7
|
-
@os_cmd = OScommand.new
|
9
|
+
def initialize(**kwargs)
|
10
|
+
@os_cmd = OScommand.new(**kwargs)
|
8
11
|
end
|
9
12
|
|
10
13
|
def active_window
|
@@ -12,54 +15,4 @@ module ClockWindow
|
|
12
15
|
format.call(`#{exe}`)
|
13
16
|
end
|
14
17
|
end
|
15
|
-
|
16
|
-
class OScommand
|
17
|
-
# As this will get more sophisticated this class is the Back End
|
18
|
-
def initialize
|
19
|
-
# Detect operating system
|
20
|
-
@os = RbConfig::CONFIG['host_os']
|
21
|
-
@window_title_length = 0..60
|
22
|
-
end
|
23
|
-
|
24
|
-
# output will be a two parameter array
|
25
|
-
# the first will be an OS specific executable string
|
26
|
-
# the second will be formatting the return value from the executables output
|
27
|
-
def active_window
|
28
|
-
# Choose script to execute and format output to just window name
|
29
|
-
case @os
|
30
|
-
when /linux/i
|
31
|
-
exe = "xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME"
|
32
|
-
format = ->str{ str.match(/.*\"(.*)\"\n\z/)[1][@window_title_length] }
|
33
|
-
[exe, format]
|
34
|
-
when /darwin/i
|
35
|
-
exe = <<-SCRIPT
|
36
|
-
osascript -e '
|
37
|
-
global frontApp, frontAppName, windowTitle
|
38
|
-
|
39
|
-
set windowTitle to ""
|
40
|
-
tell application "System Events"
|
41
|
-
set frontApp to first application process whose frontmost is true
|
42
|
-
set frontAppName to name of frontApp
|
43
|
-
tell process frontAppName
|
44
|
-
tell (1st window whose value of attribute "AXMain" is true)
|
45
|
-
set windowTitle to value of attribute "AXTitle"
|
46
|
-
end tell
|
47
|
-
end tell
|
48
|
-
end tell
|
49
|
-
|
50
|
-
return {frontAppName, windowTitle}
|
51
|
-
'
|
52
|
-
SCRIPT
|
53
|
-
|
54
|
-
format = ->str {
|
55
|
-
app, window = str.split(',')
|
56
|
-
"#{window.strip} - #{app.strip}"[@window_title_length]
|
57
|
-
}
|
58
|
-
[exe, format]
|
59
|
-
else
|
60
|
-
raise "Not implemented for #{@os}"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
private_constant :OScommand
|
65
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clock_window
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel P. Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: neatjson
|
@@ -85,6 +85,9 @@ files:
|
|
85
85
|
- clock_window.gemspec
|
86
86
|
- exe/clock_window
|
87
87
|
- lib/clock_window.rb
|
88
|
+
- lib/clock_window/filters.rb
|
89
|
+
- lib/clock_window/oscommand.rb
|
90
|
+
- lib/clock_window/refinements.rb
|
88
91
|
- lib/clock_window/version.rb
|
89
92
|
homepage: https://github.com/danielpclark/clock_window
|
90
93
|
licenses:
|