なんか意外とサクサク進み、予定通り改稿が100%まで行けました。まあ、単に一回すべての改稿指示に目を通したってだけで、このあとまた1から読み返してさらに改稿しなきゃならないんですが。
で、改稿のときひたすらついったーにつぶやいていたので、一旦脳を休ませる意味合いも兼ね、vimでついったーのタイムラインを表示するスクリプトを組んでみました。さすがに今日は余計なダウンロードなどせず、最初からif_pythonで書こうと決めて書きましたよ。
たいして深く考えずに書いたものなので、探せばどっかに絶対これより優秀なスクリプトがあるでしょうが、まあ、頭の体操ということで。
" vimでついったーを読む。要if_python & twitter.py
" vimはSJISで使っていると仮定
function! ReadTwitter()
bel 10new twitter
python << EOF
import vim, twitter, simplejson, re
# TODO: ここに自分のユーザー名とパスワードを入れるべし
api = twitter.Api('nekosuna', '*****')
timeline = api.GetFriendsTimeline()
for t in timeline:
vim.current.buffer.append('【%s】' % re.sub('\n', '', t.user.screen_name.encode('shift-jis')))
vim.current.buffer.append(re.sub('\n', '', t.text.encode('shift-jis')))
vim.current.buffer.append('')
EOF
set nomod
endfunction
:call ReadTwitter()<CR>でついったー表示。自分やフォローしてる人たちのつぶやきが、ウィンドウ下部についっと出てきます。
ああ、pythonかわいいよpython。
◇5/23追記
さらに改造してみた。
twitter.pyをいじって警告が出ないようにし、vimrcにはユーザー名とパスワードのみを記述。pythonコードはNekoTwitter.vimというファイルにまとめてpluginフォルダにぶち込んだ。
シンタックスやら何やらも追加。qでバッファを閉じたりなんだり。
ほんとは@の上でエンターすると投稿開始、みたくしたいけどもう面倒になってきた。
"
" NekoTwitter.vim
" 2009/05/23 Nekosuna Ippei ( http://twitter.com/nekosuna )
"
" python26などでmd5の警告が出る場合は、twitter.pyの「import md5」を
" 「import hashlib」に書き換え、
" _GetPathの「hashed_key = md5.new(key).hexdigest()」を
" 「hashed_key = hashlib.md5(key).hexdigest()」に書き換えてください。
"
" また、twitter.pyのPostUpdateに「data['sourse'] = 'vim'」を付け加えると
" vimからの投稿を明示できます。
"
" vimはwindows/cp932で使っているものとします
"
" vimrcに下の二行を書く
" let g:nekotw_user_name = 'user_name'
" let g:nekotw_user_pass = 'pass'
if !exists('g:nekotw_user_name')
echoerr "NekoTwitterError: Please set g:nekotw_user_name in vimrc."
finish
endif
if !exists('g:nekotw_user_pass')
echoerr "NekoTwitterError: Please set g:nekotw_user_pass in vimrc."
finish
endif
" ウィンドウ作成
function! s:NekoTwitter()
if bufexists('ReadTwitter')
bdelete NekoTwitter
endif
bel 15new NekoTwitter
call s:SetSyn()
call s:ReadTwitter()
set nomod
set ro
exe ":normal gg"
" qで終了、iで投稿
noremap <buffer> q :q<CR>
noremap <buffer> i :call <SID>PostTwitter()<CR>
endfunction
" 読み込み
function! s:ReadTwitter()
python << EOF
import vim, twitter, simplejson, re
u = vim.eval("g:nekotw_user_name")
p = vim.eval("g:nekotw_user_pass")
api = twitter.Api(u, p)
timeline = api.GetFriendsTimeline()
for t in timeline:
vim.current.buffer.append('@%s' % re.sub('\n', '', t.user.screen_name.encode('CP932')))
vim.current.buffer.append(' %s' % re.sub('\n', '', t.text.encode('CP932')))
vim.current.buffer.append(' [%s]' % t.relative_created_at.encode('CP932'))
vim.current.buffer.append('')
EOF
endfunction
" 色
function! s:SetSyn()
syntax match name /^@[a-zA-Z_]*/
syntax match follow /@[a-zA-Z_]*/ contains=name
syntax match igno /^C:\\.*/
syntax match come /^ \[[^\]]*]/
highlight link name Label
highlight link follow Underlined
highlight link igno Ignore
highlight link come Comment
" 単語の区切りに@を追加
setlocal iskeyword=@-90,97-122,48-57,_
endfunction
" 投稿
function! s:PostTwitter()
let post = input("twitter: ")
if strlen(post) > 140
echoerr 140
else
python << EOF
import vim, twitter
post = vim.eval("post")
u = vim.eval("g:nekotw_user_name")
p = vim.eval("g:nekotw_user_pass")
api = twitter.Api(u, p)
api.PostUpdate(unicode(post, 'CP932'))
EOF
endif
endfunction
" :NekoTwitter<CR> すると機能が呼び出されます
command NekoTwitter :call <SID>NekoTwitter()
