適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

VimperatorでTracのチケット番号やチェンジセット番号をいい感じに扱う

VimperatorでのTrac利用におけるいい感じな小ネタを二つほど...。

copy.jsを使ってチケット番号やチェンジセット番号をいい感じにコピる

会社ではTracを使用しているのだけれども、Tracリンクの記法で「#」+数字は「チケット番号」、「r」+数字は「チェンジセット番号」を示すことから、社内IRCでも下記のようなやりとりが多い。

#1234 のチケットが云々...
r1234 の修正で云々...

このときに、直接数字を手打ちしたり、チケットのページからマウスで数字部分を選択してコピーしたりなんていうのが許されるのは小学生ま(ryということで、Vimperatorプラグインのcopy.jsを利用するといい感じにコピーできるようになる。

javascript <<EOM
(function () {
  liberator.globalVariables.copy_templates = [
    {label: 'trackChangesetOrTicketLink',
     value: 'copy number',
     custom: function() { return content.document.location.pathname.replace(/.*\/(changeset|ticket)\/(\d+)/, function($0, $1, $2){return ($1 === 'changeset' ? 'r' : '#') \
     map: ',tn'},
  ];
})();
EOM

上記の処理を.vimperatorrcに書いておき、Tracのチケットかチェンジセットのページで「,tn」すると「#1234」とか「r1234」とかでいい感じにコピれる。

チケットやチェンジセットや検索結果にいい感じにアクセスする

自分統計によると会社Tracのアクセスの実に67%(適当)は「チケット」と「チェンジセット」と「検索」に絞られる。

let g:trac_base_url = 'http://YOUR.TRAC.URL/PATH'
let g:trac_force_type = ''  " '#' OR 'r' OR '' default ''

js <<EOM
  commands.addUserCommand(
    ['trac', 'tr'],
    'Tracのページへいい感じに',
    function(args) {
        var arg = args.join('');
        var force_type = liberator.globalVariables.trac_force_type;
        force_type = /^(?:r|#)$/.test(force_type) ? force_type : '';

        if (force_type && !isNaN(arg)) {
            arg = force_type + arg;
        }

        content.document.location.href = liberator.globalVariables.trac_base_url + (function() {
            if (/^(?:r|#)\d+$/.test(arg)) {
                return arg.replace(/(#|r)(\d+)/, function($0, $1, $2) {
                    return ($1 === 'r' ? 'changeset/' : 'ticket/') + $2;
                });
            } else {
                // return 'search?q=' + encodeURIComponent(arg); 2012/10/10 修正
                return 'search?q=' + encodeURIComponent(args.join(' '));
            }
        })();
    }
  );
EOM

上記を.vimperatorrcに書いておき(trac_base_urlはTracのURLを指定してください)、下記のようにtracに対して「# OR r」付き番号または検索キーワードを渡してあげると、それぞれのページをいい感じに開いてくれる。

:trac #1234  // http://YOUR.TRAC.URL/PATH/ticket/1234
:trac r1234  // http://YOUR.TRAC.URL/PATH/changeset/1234
:trac hoge   // http://YOUR.TRAC.URL/PATH/search?q=hoge

trac_force_type(名前が微妙...)を「# OR r」で指定してあげると、数字だけが渡された場合に「チケット番号」または「チェンジセット番号」として扱ってくれる。

// g:trac_force_type = ''
:trac 1234  // http://YOUR.TRAC.URL/PATH/search?q=1234

// g:trac_force_type = 'r'
:trac 1234  // http://YOUR.TRAC.URL/PATH/changeset/1234

// g:trac_force_type = '#'
:trac 1234  // http://YOUR.TRAC.URL/PATH/ticket/1234