Skip to content

meh/hardstatus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hardstatus

I use the GNU screen hardstatus as global status bar, the downside was I had about 10 scripts that would make the whole thing lag every few seconds.

This solves the problem.

Install

Just install the gem and build the binary helper by running rake, it will put it in bin/hardstatus, you can them move it in your PATH and call it as backtick in the hardstatus.

Assuming you renamed the binary to hs.

backtick 1 1 1 hs right

This will define a right backtick, you have then to hadd the backtick to the hardstatus, supposedly on the right.

You can have both left and right templates in the configuration.

Example

require 'json'
require 'socket'
require 'timeout'

right '#{irssi}#{email}#{hackers}#{processor}#{temperature}#{wireless}#{battery}'

def wrap (string)
	"\005{= r}[\005{+b W}#{string}\005{= dr}] "
end

backtick :irssi, every: second do
	notifications = File.read(File.expand_path('~/.irssi/notifications')).gsub(':', '@').split(/, /)

	unless notifications.empty?
		wrap "IRC\005{-b r}|" + notifications.map {|n|
			"\005{+b rW}#{n}\005{-b dd}"
		}.join(' ')
	end
end

backtick :email, every: second do
	socket = TCPSocket.new('localhost', '9001')
	socket.puts '* list unread'

	notifications = JSON.parse(socket.gets)

	unless notifications.empty?
		wrap "Mail\005{-b r}|" + notifications.map {|name|
			"\005{+b rW}#{name}\005{-b dd}"
		}.join(' ')
	end
end

backtick :hackers, every: 5.seconds do
end

backtick :processor, every: 5.seconds do
	wrap `(cpupower -c 0 frequency-info; cpupower -c 1 frequency-info) |
		grep "current CPU" |
		head -n 1 |
		sed 's/^.*is //' |
		sed 's/\.$//' |
		tr -d '\n'`
end

backtick :temperature, every: 5.seconds do
	`sensors`.match(/temp1:\s+([\d+\-.]+)/) { |m|
		wrap(if m.to_i > 100
			'STACCA STACCA STACC-'
		else
			"#{m} C"
		end)
	}
end

backtick :wireless, every: 5.seconds do
	state = `iwconfig wlan0`

	next if state =~ /No such device/

	essid   = state.match(/ESSID:"(.*?)"/)[1]
	quality = state.match(/Quality=(.*?) /)[1]

	if quality
		wrap "#{essid}\005{-b r}|\005{+b W}#{quality}"
	end
end

backtick :battery, every: 5.seconds do
	state = `acpitool -B`

	next if state =~ /100\.0%/

	current = state.match(/([^\s]+%.*)$/)[1].sub(/, /, "\005{-b r}|\005{+b W}")

	if state.match(/discharging/i)
		wrap "\005{-b r}v|\005{+b W}#{current}"
	else
		wrap "^\005{-b r}|\005{+b W}#{current}"
	end
end

Why in the world would you do that?

Because life is too easy, and tmux handling of windows isn't compatible with my workflow, so I have to deal with the shittiness of GNU screen and this makes it both usable and useful to my end.

About

Write decent GNU screen hardstatuses without the lag.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published