vimでpyblosxomのエントリを書いてアップロードするvimスクリプトをpythonで書いた
posted by jun-g at Mon, 09 Oct 2006 22:53 JST
pyblosxomは、テキストファイルにエントリを書いてFTPでサーバにアップロードする、という仕組みになっている。プラグインで拡張する事でMetaWeblogAPIを使ったり投稿画面を付けたりする事ができるみたいやけどまだ全然試せていなくて、エディタでエントリを書いてアップする、という作業がかなり面倒に感じていた。
そんな時、「pythonを使ってvimからGoogleカレンダーに予定を投げる (ueBLOG)」というエントリを読んで、ちょうどエディタはvimを使ってるし、「Pyblosxom用エントリファイルのFTP送信」を読んで「Emacs便利でいいなー」とか思ってたので、vimでエントリを書いてそのままアップロードできるスクリプトをpythonで書いてみた。
python << EOF FTP_SERV = "your.ftp.server" FTP_USER = "ftpuser" FTP_PASS = "ftppasswd" LOCAL_DIR = "/path/to/localdir" REMOTE_DIR = "/path/to/remotedir" import vim import datetime from os import path from ftplib import FTP def createEntry(): fileName = path.join(LOCAL_DIR, _createFileName()) vim.command("new %s" % fileName) vim.command("set fileencoding=utf-8") cb = vim.current.buffer cb[0] = "title" cb.append("#tags hoge,fuga") cb.append("body") vim.command("w") def uploadEntry(): cb = vim.current.buffer if cb.name == None: fileName = _createFileName() fullName = path.join(LOCAL_DIR, fileName) vim.command("saveas %s" % fullName) else: fileName = path.basename(cb.name) fullName = cb.name vim.command("w") f = open("%s" % fullName, "r") ftp = FTP(FTP_SERV, FTP_USER, FTP_PASS) ftp.cwd(REMOTE_DIR) ftp.storlines("STOR %s" % fileName, f) ftp.close() f.close() def _createFileName(): return "%s.txt" % datetime.datetime.now().strftime("%Y%m%d%H%M") EOF
これを.vimrcに書いといて、vim上で
:py createEntry()
とすると
title #tags hoge,futa body
という空のエントリを新規バッファを開きつつ「LOCAL_DIR」で指定したディレクトリ内に保存する。ファイル名は現在日時を「YYYYMMDDHHMI.txt」として自動生成。二行目の「#tags〜」はtagsプラグインを使っているので。
でもってエントリをつらつら書いたら、
:py uploadEntry()
でアップロード。僕はエントリのカテゴリ分けをしていないので、カテゴリ指定は無し。
vimは全然使いこなせてないので、おかしな事してるところがあるかもしれないけど、これだけでかなり便利になった。vimももっと勉強しないとな。