かなり快適です。
特にセレクトボックスとかをC-p/C-nで選択できるところが。
imap <C-n> <Down> imap <C-p> <Up>
これ設定してから思ったんだけど、 input-mode を emacs ライクにしてしまうのもありかと思った。
してみた。
e でタグ+コメント編集。q で削除。
LDRizeCooperation+localkeymodeで実現。
(function(){
var hbControl = function(is_edit){
var paragraph = liberator.plugins.LDRizeCooperation.LDRize.getParagraphes();
var pos = paragraph.current.position + 1;
var doc = content.window.document;
var n = doc.evaluate('//descendant::h3[@class="entry"]['+pos+']', doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
if (!n) return;
var bmid = n.singleNodeValue.id.replace(/[^\-]+-/,'');
var e = content.document.createEvent("MouseEvents");
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cn = doc.evaluate('//span[@class="bookmark-appender-cancel"]', doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (let i=0, l=cn.snapshotLength; i<l ; i++) cn.snapshotItem(i).dispatchEvent( e );
var node = doc.getElementById("delete-"+bmid);
if (!node) return;
var target = is_edit ? node.nextElementSibling : node ;
e.initMouseEvent("mouseover", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
target.dispatchEvent( e );
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
target.dispatchEvent( e );
};
liberator.globalVariables.localKeyMappings=[
[ /b\.hatena\.ne\.jp/, [
['e', function() hbControl(true)], // edit tag and comment
['q', function() hbControl(false)], // delete bookmark
] ],
];
})();
本当はグリモンでMinibuffer.addShortcutKey + feedSomekeys_2.js とかで対応したかったんだけど、直でLDRizeの制御オブジェクトに触る方法がない(一応とれないかがんばった!けどとれねー)→Minibuffer経由で実現できそうだけどやるのが面倒→これでいいや的な感じ。
eval 第二引数があればなー、、、もしくはグリモンで liberator.eval 相当のものがあれば楽になるのに、、、という感じ。
liberator.eval 相当を自前で用意するのもアリっちゃアリなのかもだけど、導入が面倒になるのでスルーしました。
それにしても、このやり方は我ながらかなり無理矢理&適当感大
<C-v><Del>でも十分だったんだけど、そろそろフィードの整理がしたかったので、ワンキーで購読停止したかったのでやってみました。
feedSomeKeys_2.js で fmap hoge q,<Del> とか、fmap hoge <Del> とかを指定できればよいのだけれど、なんか僕の環境だとできなかったぽいので、別の方法で回避。
autocmd LocationChange http://reader\\.livedoor\\.com/reader :fmap q js <<EOM</ppp> autocommands.add('DOMLoad' , 'http://reader\.livedoor\.com/reader/', function(arg){ var w = gBrowser.mTabs[arg.tab-1].linkedBrowser.contentWindow.wrappedJSObject; w.addEventListener('load', function(){ // add susubscribe keybind w.Keybind.add('q', w.Control.unsubscribe); }, false); }); EOM
ちなみに、DOMLoad じゃなくて PageLoad にひっかけてもいけると思う。
addEventListener をしてるのは DOMLoad のタイミングで実行しちゃうと、JS側の初期化が多分終わってないぽく、エラーがでちゃうのを回避するためです。
まー、こんなことするならグリモンでやっちゃった方が早いんだろうけど、グリモンがごちゃごちゃしてきているのであえてVimp側(正確にはvimp+feedSomeKeys_2.js)でやってみました。
本当はあまり影響なさげな # とかで Keybind.add しようと思ったんだけどキー制御ロジックがa-zA-Z0-9と特定のキーしか対応してないぽい。(厳密によく読んでないので違うかもしれないけど)
上記コードを書いておもったんだけど、autocommands.add のコールバックに渡される引数に contentWindow.wrappedJSObject がないのはなんでなんだろ?
contentWindow.document よりも window もらえた方がありがたいと思うんだけど。もしかしたらあんのかなー?
すでにやってる人いた~。
><
以前作ったLDRで購読停止するコマンドをVimperator的にするとこんな感じかな? - vimpがあればなんでもできるっ! - vimperatorグループ
ほー、こういう風にしたのか、と参考になった。
vimperator | |
![]()
自作プラギン exopen.js 専用だけど、はてなのグループ系だったらid:malaさん作のYahoo!Pipesを通してLivedoorReaderに追加する設定。
はてなグループじゃない場合は、フツーにLivedoorReadeのブックマークレットと同じ動き。
liberator.globalVariables.exopen_templates = [ {
label: 'sldr',
value: 'subscribe feed to livedoor reader',
custom: function(){
var url = buffer.URL;
if (/https?:\/\/(\w+)\.g\.hatena\.ne\.jp/.test(url))
url = 'http://pipes.yahoo.com/pipes/pipe.run?_id=TssmX7bb2xGYLar_l7okhQ&_render=rss&group_id=' + RegExp.$1;
return 'http://reader.livedoor.com/subscribe/'+url;
}
}
];
実はこーゆーのを気軽にプラギンでやりたいがために exopen.js を作っただけなのよね。
工夫次第では他のプラギンでも実現できることだから、無駄プラギンなのかもしれんけど。笑
そろそろ久々にプラギン作りたいけど、アイデアがないです。
というか、現状のVimpに満足してしまっている自分ガイル…
まー、作者がまとめるべき情報ではないよね。
ソースのコメント見れば、みんなだいたいわかるように書いてるしね。
ともあれ、初心者の人とかが見てわかるかといわれれば微妙っちゃ微妙かも。
・・・てなことを書いてる途中に、プラギンのまとめページぽいのをid:teramakoさんが用意してるぽいのをハケーン!!
pluginList - Vimperator - livedoor Wiki(ウィキ)
仕事はえー!!
さすがですね。
Coderepos だけじゃなくて、本家で公開されてるものまでまとめてるし。
とりあえずここでまとめればいいんじゃね?w
調べてみたら、結構楽にでけそう