#soozy@freenodeでidコールされてて、なにかと思ったらText::MicroTemplateのEmacsのメジャーモードがあったらいいねーみたいな話しだったのでてきとうにでっちあげてみた。
そしたらすぐにimakado先生が問題あるところを修正をしてくれました。
imakado++
まだT::MTのパッケージには入れてないですがgithubのリポジトリの権限はもらったので問題なさそうだったら入れさせて頂こうかと思います。
名前はIRCですでに呼ばれてたtmt-modeにしてみた。
emacs lispを書いててふと思ったんだけど、Perl moduleのmake testみたいなことをやる機構ってあるのかな。
絶対あると思うから
あとで探してみよう。
(add-to-list 'load-path "~/.emacs.d/plugins") (require 'yasnippet-bundle)このyasnippet-bundleってやつは、各種言語用(など)のsnippetの設定もlispの中に同梱しているようです。まさに横着用。でも自分で書き変えたりできない(まぁ、できるけど)。
(add-to-list 'load-path "~/.emacs.d/plugins") (require 'yasnippet) (yas/initialize) (yas/load-directory "~/.emacs.d/snippets")こんな感じで設定してやると、yasnippetが動くようになります。
if () {
}
こんな感じに補完ができたら成功!ちょっと感動します。それ以外にもいろいろとできるようですが、どんな文字列で補完が効くかは、snippetsディレクトリの中のファイルを探してみてください。該当するメジャーモードの名前のディレクトリにあるファイル名が補完を発動する名前になってます。上記でifが補完されたのは、snippets/text-mode/perl-mode/if があるからですね。それ以外にもxifとかもありますね。これは、expression if conditionって補完されますね。なるほど、なるほど。で、「expression」の「e」にカーソルがあるので、そこでなにかを書き初めると「expression」が消えてくれます。で書き終ったあとにTABキーを押すと、カーソルが「condition」の「c」に移動してくれます。ここでまたifの条件を書こうとすると「condition」が消えてくれます。なるほどぉ。こういうことか。
最近MacBook Airを購入しました。
もともとマカーだったので懐しくもあるんですが、Tigerの初期ぐらいまでしか使ってなかったので、だいぶ浦島太郎状態なわけです。でもそれがまたよかったりもするんですが。
で、今回の話は以前したBloggerpostをmacにいれる手順です。
まずは、MacPorts。MacにはMacPortsっていうパッケージシステムがあって、昔自分が使ってたときはfinkってのを使ってたんですが、最近はMacPortsが流行りだと同僚に言われそれをインストールしました。
そのあとに、おやくそくのRubyからemacsをごにょごにょできるel4rをインストール。
次に、MacPortsでqdbmをインストール。で、BloggerpostではqdbmのRubyバインディングであるdepotを入れるのですが、普通にMacPortsで入れるとRubyが入ってしまうので、qdbmのライブラリだけ使ってdepotを入れなければなりませんでした。
普通にldconfigみたいなのがあれば/opt/local/lib(MacPortsでは/opt以下にいろいろなものをインストールしてメインシステムへの汚染を避けている)を読み込ませればいいんですが、それがないのでどうしたものかと調べていたら、
% setenv LIBRARY_PATH /opt/local/lib
とやってから、./configure && make && make install したらmakeできました。
あとは以前紹介した設定をすれば問題なくemacsからブログへ投稿ができるようになります。
この記事もBloggerPostを使ってポストしている次第です。
ところで最近のMacはPerlとかRubyとか標準で入ってるけどMacPortsでも入れられます。
どっちを使ったらいいのか迷うところなんだけど、どっちがいいんですかね?
BloggerPostでXML-RPCでPostするときに出るエラーを修正したpatchを置いておきます。
対象はREL-0.1.7のタグのものです。
diff -ur lib.old/bloggerpost/service.rb lib/bloggerpost/service.rb
--- lib.old/bloggerpost/service.rb 2008-02-22 12:55:26.000000000 +0900
+++ lib/bloggerpost/service.rb 2008-02-22 22:18:11.000000000 +0900
@@ -1,3 +1,5 @@
+require "xmlrpc/client"
+
module BloggerPost
class Service
def initialize(config)
@@ -132,12 +134,13 @@
entry.updated = DateTime.now
entry.date = entry.updated unless entry.date
return
- elsif method == 'new' || entry.blog.service.atom_at_put
+ elsif (method == 'new' || entry.blog.service.atom_at_put) && response_body !~ /^\n*$/
published, updated, url, edit_id = parse_atom(response_body)
else
published = entry.date.to_s
url = entry.url
edit_id = entry.edit_id
+ updated = DateTime.now.strftime('%Y-%m-%d %H:%M:%S')
end
entry.update_url(url)
entry.edit_id = edit_id if edit_id
@@ -258,6 +261,7 @@
end
class XMLRPCAPI
+ include BloggerPost::Common
def initialize(config)
@config = config
end
@@ -340,7 +344,7 @@
if @config.use_proxy
proxy_host, proxy_port, proxy_user, proxy_passwd = get_proxy_info(config, use_ssl)
end
- XMLRPC::Client.new(url.host, url.path, url.port, proxy_host, proxy_port, proxy_user, proxy_passwd, use_ssl)
+ XMLRPC::Client.new(url.host, url.path, url.port, proxy_host, proxy_port, proxy_user, proxy_passwd, use_ssl, 360)
end
end
end
先程のエントリのBloggerPostを使ってみてるんだけど、どうもAtompub使った時の挙動が微妙。
あとエラったときなにがエラったのかがわかりづらいのでデバッグしづらい。いや、これはel4r側のあれか。いくつか不具合っぽいのは直したんだけど、きりがないのでまた時間ができたらやる。
とりあえずMTは書けてるっぽい。
以前mapaeを使って書いた記事があったのですが、使い勝手などもろもろが自分のスタイルに合わず、結局使わなくなってしまってました。
で、しばらく熱が冷めていたのですが、やっぱりemacsでブログ投稿したいなーと思い別のソフトを探していたら、先日BloggerPostという別のemacsフロントエンドをみつけたので、早速インストールして使ってみたらいいかんじなのでご紹介。
このBloggerPostは、el4rというRubyでelispを書いてしまおうというソフトを使ったソフト(?)で、AtompubとXML-RPCに対応しています。
で、まず最初に言っておきたいのが、自分も勘違いしていたのはBloggerPostを導入する以前に書いた記事も読み込んで編集とかできるのかなーと思ってたのですが、それは現状できないようです。なので、このBloggperPost経由で書いた記事のみをローカルのディスクに保存して、それであれば編集などもできるという代物です。(最初これがわからず、なんで今まで書いた記事が読み込めねーんだよと小一時間悩みました)
ということで、インストール時のハマりポイントとかをいくつか書いておきます。
BloggerPostはQDBMでデータを保存しておくらしいのですが、そのrubyバインディングはQDBMを普通にインストールしても入りません。QDBMのソースのrubyディレクトリの中で./configure && make && make install をしましょう。
自分の環境ではどうしても投稿ができなくて悩んでデバッグログ(M-x el4r-show-logで見られる)を見ていたらrd2コマンドがないよーって言ってたので気付きました。このrd2はrdtoolに含まれるコマンドのようです。
BloggerPostのページだとあまり詳しくは書いてないところもあったりするので、試行錯誤で自分は以下のようにconfig.ymlを書いています。
「account:」と「blog: -> list:」の両方に「name:」ってのがあってこんがらがりそうなのですが、「account: -> name:」は「blog: -> list: -> account:」に指定するためのもので、「blog: -> list: -> name:」は「blog: -> default:」などで指定するために使うもののようです。あと、mtなどのXML-RPCの場合は「apiurl:」と「blogid:」が必要で、livedoor BlogのようなAtompubの場合は「posturl:」があればよいようです。このAtompubの「posturl:」はlivedoor Blogであれば、以下のような「http://cms.blog.livedoor.com/atom/blog_id=YOUR_BLOG_ID」でいいのですが、それ以外のサービスとかだと、自分でマニュアルを見るかエンドポイントを叩いて確認しなきゃならないかもしれません。
defaultstyle: bhtml
account:
- name: mt_account
user: your_username
passwd: your_password
- name: livedoor_account
user: your_livedoor_id
passwd: your_livedoor_password
blog:
default: mt
list:
- name: mt
title: "Your blog title"
url: http://blog.example.com/
service: mt
account: mt_account
apiurl: http://blog.example.com/mt-xmlrpc.cgi
blogid: 1
- name: livedoor
title: "Your livedoor blog title"
url: http://blog.livedoor.jp/your_livedoor_id/
service: livedoor
account: livedoor_account
posturl: http://cms.blog.livedoor.com/atom/blog_id=YOUR_BLOG_ID
という感じのことを乗り越えて、このエントリをポストしてます。上記以外のインストールについてはそれぞれのページの方法でいけると思います。
まだ、使い始めたばっかりなので使い倒してないのですが、使用感としてはおおむねよさげです。ちなみに機能としては普通にポストする以外にもflickrやAmazonと連携することもできるっぽいです。
あと最後に、el4rのエラーってmini bufferにちょろっと「Error raised in Ruby」とか出るだけなので最初どうやってデバッグするねんと悩んだのですが、途中にも書きましたが「M-x el4r-show-log」とすればバックトレースが見られるようですので、printデバッグもできます。
yaml-mode 0.0.3をリリースしました。
変更点としては、Changesにあるようにコメントの中に「'」「"」「:」などがあった場合にfont-lockが変になって色が崩れるバグの修正がメインです。また、その他にも細かいいくつかの修正をしています。
ダウンロードは下記からどうぞ。
http://yaml-mode.clouder.jp/
--- kill-summary.el.old 2006-09-01 15:09:50.482637000 +0900
+++ kill-summary.el 2006-09-01 15:06:10.152637000 +0900
@@ -231,7 +231,7 @@
()
(setq kill-summary-list (append kill-summary-list (list n)))
(insert (format "%2d:%s %s\n" n lines
- (truncate-string
+ (truncate-string-to-width
(mapconcat (lambda (y) y) strtmp
kill-summary-newline-notation) w)))
(setq prev str)