barr 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +122 -123
- data/barr.gemspec +2 -1
- data/examples/README.md +0 -2
- data/examples/all_in.rb +39 -44
- data/examples/barr_example.rb +6 -6
- data/examples/fizzbuzz.rb +14 -15
- data/examples/i3_cpu_mem.rb +12 -9
- data/examples/rhythm.rb +7 -8
- data/examples/time_and_date.rb +5 -5
- data/examples/two_temperatures.rb +11 -11
- data/exe/barr_example +6 -6
- data/exe/barr_i3ipc +1 -1
- data/lib/barr.rb +12 -9
- data/lib/barr/block.rb +51 -26
- data/lib/barr/blocks/clock.rb +6 -4
- data/lib/barr/blocks/cpu.rb +17 -3
- data/lib/barr/blocks/hdd.rb +15 -7
- data/lib/barr/blocks/i3.rb +15 -6
- data/lib/barr/blocks/ip.rb +16 -11
- data/lib/barr/blocks/mem.rb +7 -3
- data/lib/barr/blocks/rhythmbox.rb +65 -0
- data/lib/barr/blocks/temperature.rb +20 -11
- data/lib/barr/blocks/whoami.rb +25 -0
- data/lib/barr/manager.rb +49 -36
- data/lib/barr/version.rb +1 -1
- metadata +19 -5
- data/lib/barr/blocks/rhythm_box.rb +0 -55
- data/lib/barr/blocks/who_am_i.rb +0 -15
data/lib/barr/blocks/cpu.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
1
3
|
module Barr
|
2
4
|
module Blocks
|
3
|
-
class
|
4
|
-
|
5
|
-
|
5
|
+
class CPU < Block
|
6
|
+
|
7
|
+
def update!
|
8
|
+
idle = sys_cmd.scan(/(\d{1,3}\.\d) id/).flatten.first.to_f
|
9
|
+
|
10
|
+
@output = "#{(100 - idle).round(1)}%"
|
6
11
|
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def sys_cmd
|
16
|
+
`top -bn1 | grep 'Cpu(s)'`.chomp
|
17
|
+
end
|
18
|
+
|
7
19
|
end
|
20
|
+
|
21
|
+
Cpu = CPU
|
8
22
|
end
|
9
23
|
end
|
data/lib/barr/blocks/hdd.rb
CHANGED
@@ -1,21 +1,29 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
1
3
|
module Barr
|
2
4
|
module Blocks
|
3
|
-
class
|
4
|
-
|
5
|
-
def initialize
|
5
|
+
class HDD < Block
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
6
8
|
super
|
9
|
+
|
7
10
|
@device = opts[:device]
|
8
11
|
end
|
9
12
|
|
10
|
-
def update
|
11
|
-
total, used, perc = sys_cmd.
|
12
|
-
|
13
|
+
def update!
|
14
|
+
total, used, perc = sys_cmd.split(' ')
|
15
|
+
|
16
|
+
@output = "#{used} / #{total} (#{perc})"
|
13
17
|
end
|
14
18
|
|
19
|
+
private
|
20
|
+
|
15
21
|
def sys_cmd
|
16
|
-
`df -h | grep #{@device} | awk '{printf "%s %s %s", $2, $3, $5}'
|
22
|
+
`df -h | grep #{@device} | awk '{printf "%s %s %s", $2, $3, $5}'`.chomp
|
17
23
|
end
|
24
|
+
|
18
25
|
end
|
19
26
|
|
27
|
+
Hdd = HDD
|
20
28
|
end
|
21
29
|
end
|
data/lib/barr/blocks/i3.rb
CHANGED
@@ -1,15 +1,20 @@
|
|
1
|
+
require 'i3ipc'
|
2
|
+
require 'barr/block'
|
3
|
+
|
1
4
|
module Barr
|
2
5
|
module Blocks
|
3
|
-
|
4
6
|
class I3 < Block
|
7
|
+
|
5
8
|
attr_reader :focus_markers, :i3, :workspaces
|
6
|
-
|
9
|
+
|
10
|
+
def initialize(opts = {})
|
7
11
|
super
|
8
|
-
|
12
|
+
|
13
|
+
@focus_markers = opts[:focus_markers] || %w(> <)
|
9
14
|
@i3 = i3_connection
|
10
15
|
end
|
11
16
|
|
12
|
-
def update
|
17
|
+
def update!
|
13
18
|
@workspaces = @i3.workspaces.map do |wsp|
|
14
19
|
if wsp.focused
|
15
20
|
"#{l_marker}#{wsp.name}#{r_marker}"
|
@@ -17,10 +22,11 @@ module Barr
|
|
17
22
|
"%{A:barr_i3ipc workspace #{wsp.num}:} #{wsp.name} %{A}"
|
18
23
|
end
|
19
24
|
end
|
20
|
-
|
25
|
+
|
26
|
+
@output = @workspaces.join('')
|
21
27
|
end
|
22
28
|
|
23
|
-
def destroy
|
29
|
+
def destroy!
|
24
30
|
@i3.close
|
25
31
|
end
|
26
32
|
|
@@ -28,6 +34,8 @@ module Barr
|
|
28
34
|
I3Ipc::Connection.new
|
29
35
|
end
|
30
36
|
|
37
|
+
private
|
38
|
+
|
31
39
|
def l_marker
|
32
40
|
@focus_markers[0]
|
33
41
|
end
|
@@ -35,6 +43,7 @@ module Barr
|
|
35
43
|
def r_marker
|
36
44
|
@focus_markers[1]
|
37
45
|
end
|
46
|
+
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
data/lib/barr/blocks/ip.rb
CHANGED
@@ -1,24 +1,29 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
1
3
|
module Barr
|
2
4
|
module Blocks
|
3
|
-
class
|
5
|
+
class IP < Block
|
4
6
|
|
5
7
|
attr_reader :device
|
6
|
-
|
7
|
-
def initialize
|
8
|
+
|
9
|
+
def initialize(opts = {})
|
8
10
|
super
|
9
|
-
@device = opts[:device] ||
|
11
|
+
@device = opts[:device] || 'lo'
|
12
|
+
@version = opts[:ipv6] ? 'inet6' : 'inet'
|
10
13
|
end
|
11
14
|
|
12
|
-
def update
|
13
|
-
ip
|
14
|
-
|
15
|
-
|
16
|
-
@output = "#{dev} > #{ip}"
|
15
|
+
def update!
|
16
|
+
ip = sys_cmd.split('/').first
|
17
|
+
|
18
|
+
@output = "#{@device} > #{ip}"
|
17
19
|
end
|
18
|
-
|
20
|
+
|
21
|
+
private
|
22
|
+
|
19
23
|
def sys_cmd
|
20
|
-
`ip addr
|
24
|
+
`ip addr show #{@device} | grep '#{@version}\s' | awk '{print $2}'`.chomp
|
21
25
|
end
|
22
26
|
end
|
27
|
+
Ip = IP
|
23
28
|
end
|
24
29
|
end
|
data/lib/barr/blocks/mem.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
1
3
|
module Barr
|
2
4
|
module Blocks
|
3
5
|
class Mem < Block
|
4
6
|
|
5
|
-
def update
|
6
|
-
@output = sys_cmd
|
7
|
+
def update!
|
8
|
+
@output = sys_cmd
|
7
9
|
end
|
8
10
|
|
11
|
+
private
|
12
|
+
|
9
13
|
def sys_cmd
|
10
|
-
`free -
|
14
|
+
`free -h | grep 'cache:' | awk '{printf "%s / %sG", $(NF-1), $(NF-1)+$(NF)}'`.chomp
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
3
|
+
module Barr
|
4
|
+
module Blocks
|
5
|
+
class Rhythmbox < Block
|
6
|
+
attr_reader :view_opts
|
7
|
+
|
8
|
+
def initialize(opts = {})
|
9
|
+
super
|
10
|
+
reassign_deprecated_option opts, :show_artist, :artist
|
11
|
+
reassign_deprecated_option opts, :show_title, :title
|
12
|
+
reassign_deprecated_option opts, :show_buttons, :buttons
|
13
|
+
|
14
|
+
@view_opts = {
|
15
|
+
artist: opts[:artist].nil? || opts[:artist],
|
16
|
+
buttons: opts[:buttons].nil? || opts[:buttons],
|
17
|
+
title: opts[:title].nil? || opts[:title]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def update!
|
22
|
+
op = []
|
23
|
+
|
24
|
+
if @view_opts[:artist] || @view_opts[:title]
|
25
|
+
if(running?)
|
26
|
+
info = sys_cmd.split(' - ')
|
27
|
+
|
28
|
+
if @view_opts[:artist] && @view_opts[:title]
|
29
|
+
op << info.join(' - ')
|
30
|
+
elsif @view_opts[:artist]
|
31
|
+
op << info[0]
|
32
|
+
elsif @view_opts[:title]
|
33
|
+
op << info[1]
|
34
|
+
end
|
35
|
+
else
|
36
|
+
op << 'None'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
op << buttons if @view_opts[:buttons]
|
41
|
+
|
42
|
+
@output = op.join(' ')
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def running?
|
47
|
+
`pgrep rhythmbox`.chomp.length != 0
|
48
|
+
end
|
49
|
+
|
50
|
+
def buttons
|
51
|
+
[
|
52
|
+
"%{A:rhythmbox-client --previous:}\uf048%{A}",
|
53
|
+
"%{A:rhythmbox-client --play-pause:}\uf04b%{A}",
|
54
|
+
"%{A:rhythmbox-client --next:}\uf051%{A}"
|
55
|
+
].join(' ').freeze
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def sys_cmd
|
61
|
+
`rhythmbox-client --print-playing`.chomp
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,26 +1,35 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
require 'weather-api'
|
3
|
+
require 'barr/block'
|
4
|
+
|
2
5
|
module Barr
|
3
6
|
module Blocks
|
4
7
|
class Temperature < Block
|
5
|
-
attr_reader :location, :unit
|
6
8
|
|
7
|
-
|
9
|
+
attr_reader :location
|
10
|
+
|
11
|
+
def initialize(opts = {})
|
8
12
|
super
|
13
|
+
|
9
14
|
@location = opts[:location]
|
10
|
-
@unit = opts[:unit] ||
|
15
|
+
@unit = opts[:unit] || 'C'
|
11
16
|
end
|
12
17
|
|
13
|
-
def update
|
14
|
-
|
15
|
-
|
16
|
-
action = "xdg-open weather.yahoo.com\/country\/state\/city-#{@location}\/".chomp
|
17
|
-
@output = "%{A:#{action}:}#{temp}°#{@unit} #{res.condition.text}%{A}"
|
18
|
+
def update!
|
19
|
+
action = "xdg-open weather.yahoo.com\/country\/state\/city-#{@location}\/"
|
20
|
+
@output = "%{A:#{action}:}#{weather.condition.temp}°#{@unit} #{weather.condition.text}%{A}"
|
18
21
|
end
|
19
22
|
|
20
|
-
|
21
|
-
|
23
|
+
private
|
24
|
+
|
25
|
+
def weather
|
26
|
+
Weather.lookup(@location, weather_units)
|
22
27
|
end
|
23
|
-
|
28
|
+
|
29
|
+
def weather_units
|
30
|
+
@unit == 'F' ? Weather::Units::FAHRENHEIT : Weather::Units::CELSIUS
|
31
|
+
end
|
32
|
+
|
24
33
|
end
|
25
34
|
end
|
26
35
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
3
|
+
module Barr
|
4
|
+
module Blocks
|
5
|
+
class Whoami < Block
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def update!
|
12
|
+
@output = sys_cmd
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def sys_cmd
|
18
|
+
`whoami`.chomp
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
WhoAmI = Whoami
|
24
|
+
end
|
25
|
+
end
|
data/lib/barr/manager.rb
CHANGED
@@ -1,63 +1,76 @@
|
|
1
|
+
require 'barr/block'
|
2
|
+
|
1
3
|
module Barr
|
2
4
|
class Manager
|
5
|
+
|
6
|
+
ERROR_ICON = "%{F#FF0000}\uf071%{F-}"
|
7
|
+
|
3
8
|
attr_reader :count, :blocks
|
4
|
-
|
9
|
+
|
5
10
|
def initialize
|
6
11
|
@count = 0
|
7
12
|
@blocks = []
|
8
13
|
end
|
9
14
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
STDERR.puts e.message
|
17
|
-
block.append_output(ERROR_ICON) unless block.output.include?(ERROR_ICON)
|
18
|
-
next
|
19
|
-
end
|
20
|
-
end
|
21
|
-
@count += 1
|
15
|
+
def add(block)
|
16
|
+
@blocks << block
|
17
|
+
end
|
18
|
+
|
19
|
+
def destroy!
|
20
|
+
@blocks.each(&:destroy!)
|
22
21
|
end
|
23
22
|
|
24
23
|
def draw
|
25
|
-
|
26
|
-
outputs = { l: [], c: [], r: []}
|
24
|
+
outputs = { l: [], c: [], r: [] }
|
27
25
|
|
28
26
|
@blocks.each do |block|
|
29
|
-
outputs[block.align]
|
27
|
+
outputs[block.align] << block.draw
|
30
28
|
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
bar_render = ""
|
37
|
-
bar_render += "%{l}#{opl} %{F-}%{B-}" if opl.length > 0
|
38
|
-
bar_render += "%{c} #{opc} %{F-}%{B-}" if opc.length > 0
|
39
|
-
bar_render += "%{r} #{opr}%{F-}%{B-}" if opr.length > 0
|
40
|
-
bar_render.gsub!("\n","")
|
30
|
+
left_blocks = outputs[:l].join ''
|
31
|
+
centre_blocks = outputs[:c].join ''
|
32
|
+
right_blocks = outputs[:r].join ''
|
41
33
|
|
42
|
-
|
43
|
-
#
|
44
|
-
|
34
|
+
bar_render = ''
|
35
|
+
bar_render << "%{l}#{left_blocks} " if left_blocks.length > 0
|
36
|
+
bar_render << "%{c} #{centre_blocks} " if centre_blocks.length > 0
|
37
|
+
bar_render << "%{r} #{right_blocks}" if right_blocks.length > 0
|
45
38
|
|
46
|
-
|
47
|
-
@blocks.each(&:destroy)
|
48
|
-
end
|
39
|
+
bar_render.gsub! "\n", ''
|
49
40
|
|
50
|
-
|
51
|
-
@blocks << block
|
41
|
+
system('echo', '-e', bar_render.encode('UTF-8'))
|
52
42
|
end
|
53
43
|
|
54
|
-
def run
|
44
|
+
def run!
|
55
45
|
while true
|
56
|
-
|
57
|
-
self.update
|
46
|
+
self.update!
|
58
47
|
self.draw
|
59
48
|
sleep 1
|
60
49
|
end
|
61
50
|
end
|
51
|
+
|
52
|
+
def update!
|
53
|
+
@blocks.each do |block|
|
54
|
+
begin
|
55
|
+
block.update! if @count == 0 || (@count % block.interval == 0)
|
56
|
+
rescue StandardError => e
|
57
|
+
STDERR.puts e.message
|
58
|
+
block << ERROR_ICON unless block.output.include?(ERROR_ICON)
|
59
|
+
next
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
@count += 1
|
64
|
+
end
|
65
|
+
|
66
|
+
# compatibility methods.
|
67
|
+
# alias_method would work here, but for consistency with Block
|
68
|
+
# I'll define them this way
|
69
|
+
|
70
|
+
def update; update!; end
|
71
|
+
def run; run!; end
|
72
|
+
def destroy; destroy!; end
|
73
|
+
def add_block(block); add(block); end
|
74
|
+
|
62
75
|
end
|
63
76
|
end
|
data/lib/barr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Russell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: timecop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: i3ipc
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,9 +132,9 @@ files:
|
|
118
132
|
- lib/barr/blocks/i3.rb
|
119
133
|
- lib/barr/blocks/ip.rb
|
120
134
|
- lib/barr/blocks/mem.rb
|
121
|
-
- lib/barr/blocks/
|
135
|
+
- lib/barr/blocks/rhythmbox.rb
|
122
136
|
- lib/barr/blocks/temperature.rb
|
123
|
-
- lib/barr/blocks/
|
137
|
+
- lib/barr/blocks/whoami.rb
|
124
138
|
- lib/barr/manager.rb
|
125
139
|
- lib/barr/version.rb
|
126
140
|
homepage: https://github.com/OkayDave/barr
|
@@ -150,5 +164,5 @@ rubyforge_project:
|
|
150
164
|
rubygems_version: 2.4.8
|
151
165
|
signing_key:
|
152
166
|
specification_version: 4
|
153
|
-
summary: Barr is a status line
|
167
|
+
summary: Barr is a status line generator for use with Lemonbar
|
154
168
|
test_files: []
|