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