なかなかAzurea for Windowsに馴染んでいますね! PC版でもメモリ消費が少なく、有り難いです。
Azurea Wikiも出来たようです。
Azureaとは - PukiWiki http://azurea.refy.net/ja/wiki/index.php?Azurea%E3%81%A8%E3%81%AF
今まで2つ、Azurea Scriptを作りました。
AzureaWinで、tweetを翻訳する拡張 #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110127/1296092606
AzureaWin、リプライ拡張 #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110129/1296267611
JavaScriptで簡単に拡張出来るのは、嬉しいです。
作ったscriptは、[ http://c4se.sakura.ne.jp/widgets/azurea/ ]に置いてあります。
AzureaVim
今回作ったのは、AzureaWinに、何と言いますか、Vim風と言いますか、Vim使ってないんですけど……、コマンド操作を追加するscriptです。
Gistに上げておきます。あ、ライセンス何にしよう…public domainで好いんじゃないかな。じゃ、public domainです。
gist: 833567 - AzureaVim.js- GitHub https://gist.github.com/833567
インストールは、AzureaWinのインストールフォルダに有る、Scriptsフォルダへ、.js拡張子で保存する丈です。AzureaVim.jsとか。
操作法は、キーボードから行う事に成ります。
先ず適当なtweetを選択します(選択の不要なコマンドを、将来に追加する可能性が有ります。其のコマンドの場合は、何も選択してなかろうが、洞れを選択していようが、同じ事です)。
次に、:キーを押します。コロンです。
すると、入力欄に「:」と自動に入力され、フォーカスが当たります。:に続けてコマンドを打ち込み、送信動作を行って下さい。tweetとして送信はされずに、コマンドが実行されます。
現在有るコマンドは、:open (:oと省略可)、:urlの二つです。
:openは、標準Webブラウザで、何かを開くコマンドです。
:openコマンドは、status、favstar (f、又はfavと省略可)、favotter、favlook、twistar、favolog、twilog、user、urlと云う、9種類のオプションの内一つを取れます。御前普段何してんだ、ってとこですね。此れ等以外のオプションを打った場合は、何も開きません。オプションを省略し、単に:openや:oと打った場合は、:open statusと同じ動作を行います。
:open statusは、当該tweetの個別ページを開きます。
:open favotter、:open f、:open fav、:open favotter、:open twistarは、其々favstar等の然るべきサービスで、当該tweetページを開きます。頭おかしいんじゃないですかね。
:open favolog、:open twilogは、当該tweetのユーザの、其々favolog、twilogを開きます。
:open userは、当該tweetのユーザページを開きます。
:open urlは、当該tweetに含まれているurlを開きます。自然数を更にオプションとして取り、:o url 0、:o url 1、と当該tweetの先頭から順番に番号を当てています。0から始まる自然数。其の番号に当たるurlが無かった場合は、何も開きません。番号を省略し、単に:o urlと打った場合は、:o url 0と同じ動作を行います。
:urlは、:open urlの省略形です。:open urlと同じく、後ろに自然数のオプションを取れます。単に:urlとした場合は、:url 0と同じ動作を行います。此のコマンドを一番使いますね。
以上が概略です。
内部動作に就いても書きます。
初めに:キーで入力欄へ飛ぶとき。此所では殆ど何もやっていません。入力欄のin reply toに、選択していたtweetのidを設定し、:を入力し、カーソルを当てている丈です。普通にreplyをしようとした時には、@ユーザー名が入力されますが、代わりに:を入れている丈で、同じです。in reply toさえ設定されれば、:キーなんて押さなくても好いです。
送信しようとしたときに、主な動作を行います。送信テキストの先頭が:だった場合、AzureaVimコマンドと認識し、通常のtweet送信をストップして、コマンドを実行します。其の時に、in reply to等を参照し、好い様にする丈です。
後はGistのソースでも読んで下さい…。
コマンドを追加し易い様に書いた積りなのですが。洞うなんでしょうね。
因みに:userコマンドも作ってありますが、動作しないんですけど……何でしょう……。
code
一応、現時点でのコードも貼っておきますね。
// @author = http://c4se.sakura.ne.jp/profile/ne.html // @date = 2011-02-18 var commands_list = { open: 'open', o: 'open', url: 'url', user: 'user' }; function _pearse(text) { // @reply String: // @return Array: var command = []; command = text.replace(/^\s+|\s+$/g, '').split(/\s+/); return command; } //AzureaVim Class function AzureaVim(status) { //@param StatusUpdate Object: this.text = status.text.slice(1); this.command = _pearse(this.text); this.status_id = status.in_reply_to_status_id; this.screen_name = TwitterService.status.get(this.status_id).user.screen_name; this.status_urls = []; TwitterService.status.getUrls(this.status_id, this.status_urls); } AzureaVim.prototype.run = function() { this[commands_list[this.command[0]]](); } AzureaVim.prototype.open = function() { var url = 'http://', status_id = this.status_id, screen_name = this.screen_name; if (!this.command[1]) { this.command[1] = 'status'; } else if (this.command[1] === 'f' || this.command[1] === 'fav') { this.command[1] = 'favstar'; } switch (this.command[1]) { case 'status': url += 'twitter.com/' + screen_name + '/status/' + status_id; break; case 'favstar': url += 'favstar.fm/t/' + status_id; break; case 'favotter': url += 'favotter.net/status.php?id=' + status_id; case 'favlook': url += 'favlook.osa-p.net/status.html?status_id=' + status_id; break; case 'twistar': url += 'twistar.cc/' + screen_name + '/status/' + status_id; break; case 'favolog': url += 'favolog.org/' + screen_name; break; case 'twilog': url += 'twilog.org/' + screen_name; break; case 'user': url += 'twitter.com/' + screen_name; break; case 'url': if (!this.command[2]) { this.command[2] = 0; } url = this.status_urls[this.command[2]]; break; default: break; } System.openUrl(url); } AzureaVim.prototype.url = function() { this.command.unshift('open'); this.open(); } AzureaVim.prototype.user = function() { System.views.openUserTimeline(this.screen_name, false); } function focusInput(status_id) { TextArea.text = ':'; TextArea.in_reply_to_status_id = status_id TextArea.show(); TextArea.setFocus(); TextArea.setCursor(1); } System.addKeyBindingHandler(0xBA, // VK_OEM_1 (:) 0, focusInput); System.addContextMenuHandler(':vim', 0, focusInput); //PreSendUpdateStatus Event Handler function PreSendUpdateStatus(status) { var azvim, flag = false; try { if (/^:/.test(status.text)) { flag = true; azvim = new AzureaVim(status); azvim.run(); } } catch (e) { System.alert(e.name + ':\n' + e.message); flag = true; } return flag; }