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

```ruby require ‘json’ require ‘socket’ require ‘timeout’

right ‘#irssi#email#hackers#processor#temperature#wireless#battery’

def wrap (string) “\005r[\005W#string\005dr] “ 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.