Firefox via KeySnailでtwitterに投稿するjavascript

NO IMAGE

一昨日の日記でご紹介したKeySnail。
firefoxをEmacsにしてくれるKeySnailがすごすぎる

Emacsライクなキーバインドでブラウザを縦横無尽に操作できるというのが素敵すぎます。
気づいてなかったんですが、分割ブラウザというアドオンをいれておけばいつものC-x 0,1,2,3で画面分割までしてくれるんですね。まだ知らない機能ありそうです。

さて、カスタマイズしてこそのEmacs(Emacsぢゃないけど)。一昨日はhrefタグつけてURLとかをコピーする関数を書いてみましたが、懲りずにまた書いてみました。
今回は、最近流行りのtwitterに投稿する関数です。

設定

まず、ソースコード。
またしても、ほぼコピペ。vimperatorプラグイン、twitter.jsのコードの一部から拝借させていただきました。
/lang/javascript/vimperator-plugins/trunk/twitter.js – CodeRepos::Share – Trac
今回使ったprompt.read()については作者のmoozさんが詳しく説明してくれています。
Emacs ユーザや keyconfig ユーザにおすすめのアドオン KeySnail – リタマス
[js]
key.setViewKey([‘C-c’, ‘t’], function (aEvent) {
prompt.read("tweet:", function (aTweet) {
var password;
var username;
var passwordManager = Cc[‘@mozilla.org/login-manager;1’].getService(Ci.nsILoginManager);
var logins = passwordManager.findLogins({},
"http://twitter.com", "https://twitter.com", null);
[username, password] = [logins[0].username, logins[0].password];
var xhr = new XMLHttpRequest;
xhr.open("POST", "http://twitter.com/statuses/update.json", false, username, password);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("X-Twitter-Client", "KeySnail");
xhr.setRequestHeader("X-Twitter-Client-Version", "0.1");
xhr.send("status=" + aTweet);
});
}, ‘Twitter投稿’);
[/js]
ソースコード中のUSERNAME、PASSWORDを自分のやつに適宜変えておくと後々面倒くさくないです。
んで、
ソースコードを初期化ファイルにコピペ。初期化ファイルはおそらく右下にあるKeySnailのアイコンを右クリックして、”初期化ファイル” -> “初期化ファイルを編集”で開きます。後はFirefoxを再起動するか右クリックメニューの中にある再読み込みで編集した初期化ファイルを読み込ませればおkです。

使い方

1.C-c t
2.つぶやいてリターン

以上です。
キーバインドはC-c tにしてますが、それyatexのキーバインドやんけーって方は、適宜ソースコード変えてください。

その他諸々

140文字超えてもエラーも出さないし、今のところつぶやく以外に何の機能もないですが、僕が知っているtwitterクライアントの中では最速でつぶやけます。脊髄反射でつぶやく人には、多分すごく便利ではないでしょうか。
他にステータス見るとか、RTつけるとかハッシュタグつけるとかもKeySnailの標準機能でどうにかなるかもです。あ、見てるサイトをつぶやくとかは簡単に出来ますね。ぼちぼちバージョンアップしてみることにします。ま、その前に偉い人がべらぼうにハックしてくれそうな気もしますがね。

20091001追記

IDとパスをスクリプト中に直接書き込まずにchrome特権で持ってくるようにしました。
Thanks to
Twitter / teramako: Chrome特権は使えるのかな。使えるならvimpの …
Twitter / mooz: @teramako ユーザスクリプトは Chrome …