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

termtterのnotify-send3プラグインを画面外にはみ出ないように

termtterのnotify-send3プラグインを使うと、アイコン画像付きでなかなかいい感じで表示されるけど、
件数が多すぎると画面外にはみ出ててしまうので、ちょっと改造して運用してる(今は6件ごとに表示)

notify-send4.rbみたいにテキトーに名前を付けて、~/.termtter/plugins/の下に保存して使用するといいと思います

改造したnotify-send3.rb
# -*- coding: utf-8 -*-

require 'fileutils'
require 'RMagick'
require 'uri'

# Copy from notify-send2.rb
config.plugins.notify_send.set_default(:icon_cache_dir, "#{Termtter::CONF_DIR}/tmp/user_profile_images")
def get_icon_path(s)
  FileUtils.mkdir_p(config.plugins.notify_send.icon_cache_dir) unless File.exist?(config.plugins.notify_send.icon_cache_dir)
  cache_file = "%s/%s%s" % [  config.plugins.notify_send.icon_cache_dir,
                              s.user.screen_name,
                              File.extname(s.user.profile_image_url)  ]
  if !File.exist?(cache_file) || (File.atime(cache_file) + 24*60*60) < Time.now
    File.open(cache_file, "wb") do |f|
      begin
        http_class = Net::HTTP
        unless config.proxy.host.nil? or config.proxy.host.empty?
          http_class = Net::HTTP::Proxy(config.proxy.host,
                                        config.proxy.port,
                                        config.proxy.user_name,
                                        config.proxy.password)
        end
        uri = URI.parse(URI.escape(s.user.profile_image_url))
        image = http_class.get(uri.host, uri.path, uri.port)
        rimage = Magick::Image.from_blob(image).first
        rimage = rimage.resize_to_fill(90,90)
        f << rimage.to_blob
      rescue Net::ProtocolError
        return nil
      end
    end
  end
  cache_file
end

Termtter::Client.register_hook(
  :name => :notify_send4,
  :points => [:output],
  :exec_proc => lambda {|statuses, event|
    return unless event == :update_friends_timeline
    Thread.start do
      i = 0
      statuses.each do |s|
        i = i + 1
        text = CGI.escapeHTML(s.text)
        text = %Q{"#{text}"} if text =~ /^-/
        text.gsub!(URI.regexp,'<a href="\0">\0</a>')
        begin
          system 'notify-send', '-i', get_icon_path(s), '-t','10000','--', s.user.screen_name, text
          sleep 0.01
          if i % 6 == 0
              sleep 10.0
          end
        rescue
        end
      end
    end
  }
)
設定ファイルはこんな感じ(~/.termtter/config)
config.user_name = 'username'                                                                                                                                                                                                                                          
config.password = 'password'
config.update_interval = 60 # 更新間隔を60秒に
Termtter::Client.init do |t|
      t.plug 'notify-send4'
      t.plug 'uri-open'
end