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

xyttr v1.1.2 release (xyttr Advent Calendar 1日遅れの20日目)

この記事はxyttr Advent Calendar 2011の記事です。

◆ v1.1.1 → v1.1.2の変更点

  • タイムラインバッファリロード時に実行するフック *timeline-reload-hook* を追加
  • xyttr-listコマンドに引数としてリスト名(@screen_name/listname)を渡して起動できるように修正
  • search-timelineでin_reply_to_status_idをツイートデータに含めるよう修正

以下詳細

◆ リロードフックの追加

*timeline-reload-hook* はタイムラインバッファのリロード時(バッファ更新完了後)にrun-hook-with-args関数で実行され、フック関数には引数として新着ツイートのリストが渡されます。
昨日紹介したGrowlでの新着通知機能の亜種をこのフックで実装してみると

(require "growl")
(in-package :xyttr)

;; home-timelineの新着を通知
(defun notify-new-tweets (tweets)
  (when (eq :xyttr (timeline-mode buffer-timeline))
    (when (> (length tweets) 10)
      (setq tweets (subseq tweets 0 10)))
    (dolist (tw tweets)
      (w/json (user.screen_name user.profile_image_url text) tw
	(growl:notify (concat "@" user.screen_name) text
		      :name "xyttr" :icon user.profile_image_url)))))

(add-hook '*timeline-reload-hook* 'notify-new-tweets)

こんな感じに。タイムラインバッファを開いている時しか通知できませんがシンプルに書けます。

◆ xyttr-listコマンドの変更

今まではxyttr-listコマンドには引数がなく、処理の中でread-string関数を使ってリスト名の入力を取得していましたが、今回の修正でリスト名を引数として渡せるようになりました。

anythingからリストを起動する例

(require "anything/anything")
(in-package :user)

(add-anything-sources
 :name "xyttr-list"
 :candidates (lambda () (mapcar #'car xyttr::*list-subscriptions*))
 :action (lambda (l) (xyttr-list l)))

http://gyazo.com/8a73059f3b18a94da7d7e8611a178a5b.png

M-x xyttr-list での実行は相変わらずcomplete+導入推奨です。

◆ search-timelineの変更

返信先ツイート表示(pキー)がちょっと速くなりました。




そろそろリスト関係の機能を強化するべきかなーと思いつつ、リストほとんど使ってないのでなかなかやる気が起きない…