c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programmingに分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

AzureaWin、リプライ拡張 #js #AzureaScript

追記 20110207: API Level9に従って、コード修正。


前回[AzureaWinで、tweetを翻訳する拡張 #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110127/1296092606 ]は、Azurea for Windowsへ、独自にGoogle翻訳を組み込んでみましたが、ちょっと欲張って、reply (mention)とretweetを拡張するAzurea拡張を書きました。
欲無さ過ぎじゃないですかねfuck。BANA! #yuraru

動作解説

  • reply()

返信先のhashtagを引き継ぐ様、拡張しました。in_replu_toは、返信先だと指定したtweetです。ショートカットキーを、Rに割り振りました。デフォルトのリプライ用ショートカットキーも、Rです。

  • replyAll()

「全てにリプライ」と同じ動作です。ショートカットキーを、Shift+Rに割り振りました。

  • quoteReply()

テンプレートで書式を指定します。デフォルトのテンプレートは、「@user RT: 〜」です。in_replu_toは、返信先だと指定したtweetへ向けて付きます。ショートカットキーを、Ctrl+Rに割り振りました。
テンプレートは腑抜けた実装に成っています。new Template(String)する時、#{}の中に、任意のJavaScriptを書きます。template.expand(Hash)で、展開します。コード見た方が早いと思います。
QT (QuoteTweet)にしたい場合は、quoteReply()の一行目で、

var template = new Template("QT #{status.user.screen_name}: #{status.text}");

とテンプレートを差し替えます。

  • mashirosikiRetweet()

ましろ式RT。「 MRT: ツイートのURL」の形で、in_reply_toは振られません。ショートカットキーを、Ctrl+Tに割り振りました。デフォルトで、T (or W)がRTに振られているからです。

JavaScript Code

// @author = http://c4se.sakura.ne.jp/profile/ne.html
// @date = 2011-02-06


(function() {

function Template(template_text) {
    this.text = template_text;
}
Template.prototype.expand = function(env) {
    return this.text.replace(/#{(.[^}]*)}/g, function() {
        with (env) {
            return eval(arguments[1]);
        }
    });
}


function reply(status_id) {
    var status = TwitterService.status.get(status_id),
        status_user_screen_name = status.user.screen_name,
        status_hashtags = [];//status.text.match(/#(?:(?:[A-Za-z0-9_]+)|(?:[^\s#]+_))/g);
    
    TwitterService.status.getHashes(status_id, status_hashtags);
    TextArea.show();
    TextArea.text = '@' + status_user_screen_name + ' ' + (status_hashtags ? ' ' + status_hashtags.join(' ') : '');
    TextArea.in_reply_to_status_id = status_id;
    TextArea.setFocus();
    TextArea.setCursor(status_user_screen_name.length + 2);
}


function replyAll(status_id) {
    var status = TwitterService.status.get(status_id),
        status_users = [];//status.text.match(/@[A-Za-z0-9_]+/g);
    
    TwitterService.status.getUsers(status_id, status_users);
    TextArea.show();
    TextArea.text = '@' + status.user.screen_name + (status_users ? ' @' + status_users.join(' @') : '') + ' ';
    TextArea.in_reply_to_status_id = status_id;
    TextArea.setFocus();
    TextArea.setCursor(TextArea.text.length);
    
}


function quoteReply(status_id) {
    var template = new Template('@#{status.user.screen_name}  RT: #{status.text}');
    
    TextArea.show();
    TextArea.text = template.expand({status: TwitterService.status.get(status_id)});
    TextArea.in_reply_to_status_id = status_id;
    TextArea.setFocus();
}


function mashirosikiRetweet(status_id) {
    TextArea.show();
    TextArea.text = ' MRT: http://twitter.com/' + TwitterService.status.get(status_id).user.screen_name + '/status/' + status_id;
    TextArea.setFocus();
    //TextArea.setCursor(0);
}


System.addKeyBindingHandler(0x52, // VK_R
                            0,
                            reply);
System.addKeyBindingHandler(0x52, // VK_R
                            1, // Shift
                            replyAll);
System.addKeyBindingHandler(0x52, // VK_R
                            2, // Ctrl
                            quoteReply);
System.addKeyBindingHandler(0x54, // VK_T
                            2, // Ctrl
                            mashirosikiRetweet);


})();

AzureaWinインストールフォルダの、Scriptsへ、.js拡張子にて保存します。

cf.

AzureaWinのOAuthを通す - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20101212/1292156649
AzureaWinで、tweetを翻訳する拡張 #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110127/1296092606