phoenix-powerほとんどコードの流用ですが。

tweetvim_notfiy

TweetVimの最新のツイートを文字列比較し、違いがあれば、通知します。以前にも似たようなの作ったことありましたが、今回は、systemgetlineを使っていますので、ある程度の依存関係が無くなったのとクリップボードを汚しません。

tweetvim_notfiy

~/.vimrc
1
2
3
4
5
NeoBundle 'syui/tweetvim_notfiy'
NeoBundle 'gist:rhysd/4201877', {
\   'name': 'tweetvim_update',
\   'script_type': 'plugin'
\}

または、

~/.vimrc
1
2
3
4
5
6
7
8
9
NeoBundle 'basyura/TweetVim'
NeoBundle 'tyru/open-browser.vim'
NeoBundle 'basyura/twibill.vim'

NeoBundle 'syui/tweetvim_notfiy'
NeoBundle 'gist:rhysd/4201877', {
\   'name': 'tweetvim_update',
\   'script_type': 'plugin'
\}

vim +NeoBundleInstall

必要なもの

使い方

基本的には、リストを流していますが、特定のユーザーのツイートを流しても良いですし(そのユーザーの他人とのやりとりも流れる)、色々と応用が効きます。

~/.zshrc
1
2
3
function tweetvim-auto(){
  vim -c "TweetVimListStatuses $1" +TweetVimAutoUpdate +TweetVimStartNotify
}

定義したtweetvim-autoコマンドは、リスト名を引数で渡します。

リツイート増えても、通知されるので、注意です。

コード

一応、小さめにしたコードを表示しておきます。

tweetvim_notfiy.vimLINK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let s:tweetvim_notfiy_update_interval_seconds = 2
let s:tweetvim_notfiy_timestamp = reltime()[0]
let s:tweetvim_notfiy_getline_1 = getline(3)

fu! s:tweetvim_notfiy()
  let n_current = reltime()[0]
    if n_current - s:tweetvim_notfiy_timestamp > s:tweetvim_notfiy_update_interval_seconds
        if s:tweetvim_notfiy_getline_1 != getline(3)
          let s:tweetvim_notfiy_getline_1 = getline(3)
          call system("growlnotify -m '" . getline(3) . "'")
        end
        let s:tweetvim_notfiy_timestamp = n_current
    end
endf

fu! s:tweetvim_notfiy_setup_autoupdate()
    aug vimrc-tweetvim-notfiy-autoupdate
        au!
        au CursorHold * call <SID>tweetvim_notfiy()
    aug END
endf

com! -nargs=0 TweetVimStartNotify call <SID>tweetvim_notfiy_setup_autoupdate()
com! -nargs=0 TweetVimStopNotfiy au! vimrc-tweetvim-notfiy-autoupdate

設定

~/.vim/bundle/tweetvim_update/plugin/tweetvim_autoupdate.vim
1
let s:tweetvim_update_interval_seconds = 10
~/.vim/bundle/tweetvim_notfiy/plugin/tweetvim_notfiy.vim
1
let s:tweetvim_notfiy_update_interval_seconds = 5

テスト

試していませんが。WindowsとLinuxの場合は、こんな感じで通知できそうです。

ostype
1
2
3
4
5
6
7
8
9
10
11
fu! s:air_test_ostype()
let OSTYPE = substitute(system('uname'), "\n", "", "")
if OSTYPE == "Darwin"
  echo OSTYPE
elsei OSTYPE == "Linux"
  echo OSTYPE
elsei has('win32') || has('win16') || OSTYPE =~ "CYGWIN"
  echo OSTYPE
en
endf
com! -nargs=0 AirTestOstype call <SID>air_test_ostype()

アイコンです。

system
1
2
3
4
5
let s:air_test_dir_icon= expand("<sfile>:p:h:h") . "/icon/twitter.png"
fu! s:air_test_system()
  call system("growlnotify -a Twitter -m '" . s:air_test_dir_icon . "/test'")
endf
com! -nargs=0 AirTestSystem call <SID>air_test_system()

おまけ:通知

私の場合は、以下のコマンドでTwitterアプリを最小化起動しています。こうすることで、メンションなどが来た場合、通知されます。つまり、公式アプリの通知機能を使っているということです。

1
$ osascript -e 'tell application "Twitter" to close window 1'

Macの起動時にコマンドを叩くには、以下のエディタでアプリケーション形式で保存し、アプリを起動時登録しておくとよいでしょう。保存する内容は、tell application "Twitter" to close window 1で良いと思います。

1
$ open -a AppleScript\ Editor

http://qiita.com/syui/items/b9506d2bf622bed55acc