読者です 読者をやめる 読者になる 読者になる

screen の backtick であれこれ

# $HOME/.screenrc

hardstatus alwayslastline "[%02c] %-w %{.r.}%{!}%n%f%t%{dd} %+w %= %0`"

backtick 0 0 0 ${HOME}/.screen/backtick.rb
#!/usr/bin/env ruby
# $HOME/.screen/backtick.rb

require "logger"
require "open-uri"

class Backtick
	def self.start
		@@instance ||= self.new
		@@instance.run
	end

	def initialize
		$stdout.sync = true
		@logger = Logger.new(File.expand_path('~/.screen/backtick.log'), 'daily')
		@logger.level = Logger::DEBUG
		@reload_flag = '/tmp/backtick-flag'
	end

	def run
		loop do
			reload if File.exist? @reload_flag
			results = []
			Functions.private_instance_methods.each do |action|
				ret = Functions.send(action)
				@logger.debug("#{action} => #{ret}")
				results << ret
			end
			@logger.debug("result => #{results.inspect}")
			puts results.map {|i| "[#{i}]" }.join(&#39; &#39;)
			sleep 60
		end
	end

	def reload
		File.delete @reload_flag
		load $0
	end

	module Functions
		module_function
		def notify_ldr
			ret = &#39;&#39;
			open("http://rpc.reader.livedoor.com/notify?user=aereal") do |out|
				ret << out.read
			end
			count = ret.split(&#39;|&#39;)[1]
			"LDR: #{count}"
		rescue => e
			@logger.error(e)
		end
	end
end

Backtick.start

Backtick::Functions に定義されているメソッドを片っ端から実行して、その返り値を結合して出力する。

/tmp/backtick-flag というファイルが作られていると、そのファイルを消したのちに自分自身を読みなおす。

いまのところ、LDRの未読件数を表示するだけになっている。いろいろ追加して遊んでみるのもよさそう。