.
本記事末尾のローカルなkey mappingを実現するコードを改良してプラグインにしました。
↓
Vimperatorでローカルなkey mappingを実現するプラグイン local_mappings.js を書いた。
http://anond.hatelabo.jp/20080826124641
2008-07-14 - やぬすさんとこの日記
http://d.hatena.ne.jp/janus_wel/20080714
→n秒後/前に移動するkey mappingも忘れずに!
Re: autocmd が分からない - hogehoge
http://d.hatena.ne.jp/teramako/20080731/p1
のコードをいじった。
" --- autocmd ---" nicovideo" cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、" pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズーム。javascript <<EOMliberator.plugins.nicomap =function(){// no argsvar list=[ ["p","nicopause"], ["m","nicomute"], ["v","nicomementvisible"], ["z","nicosize"], ["s","nicoseek"], ];//has argsvar list2=[ ["c","nicomment"], ["C","nicommand"], ["l","nicovolume"], ["s","nicoseek"], ];if(buffer.URL.indexOf("http://www.nicovideo.jp/watch") == 0){for (var j=0; j<list.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list[i][0]],list[i][1], function(){ liberator.execute(list[i][1]);},{ rhs:":"+list[i][1]+"<CR>"} );}for (var j=0; j<list2.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1], function(){ liberator.execute('normal :'+list2[i][1]+'<Space>');},{ rhs:":"+list2[i][1]+"<Space>"} );}}else{for (var i=0; i<list.length; i++){ liberator.mappings.remove(1,list[i][0]);}for (var i=0; i<list2.length; i++){ liberator.mappings.remove(1,list2[i][0]);}}};liberator.autocommands.add('LocationChange','.*','js liberator.plugins.nicomap()');EOM
http://d.hatena.ne.jp/nokturnalmortum/20080802#1217633913
.
現在のマウスカーソル位置でクリックイベント発生するkey mappingを設定できればより快適なんだが・・・。
(「コメントする」ボタンのDOMノードが取得できれば、dispatchEventでいけそうだけど)
" ************* localkey mappings ****************javascript <<EOM (function(){function setlocalmap(obj){ var list = obj.list; var list2 = obj.list2; var exp = obj.exp; if(list.constructor != Array || list2.constructor != Array){ echr("invalid argument: array argument required");return; } if(exp.constructor !=RegExp){ echr("invalid argument:regex argument required");return; } if(exp.test(liberator.buffer.URL)){ for (var j=0; j<list.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list[i][0]],list[i][1], function(){ liberator.execute(list[i][1]); },{ rhs:":"+list[i][1]+"<CR>" } ); } for (var j=0; j<list2.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1], function(){ liberator.execute('normal :'+list2[i][1]+'<Space>'); },{ rhs:":"+list2[i][1]+"<Space>" } ); } } else { for (var i=0; i<list.length; i++){ liberator.mappings.remove(1,list[i][0]); } for (var i=0; i<list2.length; i++){ liberator.mappings.remove(1,list2[i][0]); } }}/** *AddKey Mappings to SpecificWebPages * @param obj :has following properties * list : commands thattake no args * list2 : commands thattake args * exp : target page'sURL (regex) * @see Re: autocmd が分からない - hogehoge * http://d.hatena.ne.jp/teramako/20080731/p1 */liberator.plugins.addLocalUserMap = function(obj){ liberator.plugins[obj.name + "MapSetter"] = function(){ setlocalmap(obj); } liberator.autocommands.add( 'LocationChange', '.*', 'js liberator.plugins.' + obj.name + 'MapSetter()' );};// nicovideo// cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、// pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズーム。var nicovideo = {name : 'nico',exp : /^http:\/\/www.nicovideo.jp\/watch/,list : [ ["p","nicopause"], ["m","nicomute"], ["v","nicomementvisible"], ["z","nicosize"], ["s","nicoseek"],],list2 : [ ["c","nicomment"], ["C","nicommand"], ["l","nicovolume"], ["s","nicoseek"],],};liberator.plugins.addLocalUserMap(nicovideo);})();EOM
これは何? 以前書いたやつの改良版。 ニコニコ動画を快適化するvimperator設定まとめ http://anond.hatelabo.jp/20080803202321 これには致命的なバグがあって、グローバルなkey mappingを上書きし...