Hatena::Groupvimperator

saitamanodorujiの日記

2010-02-02

英語の頭字語、頭文字語、略語を検索出来る辞書サイトの multi_requester.js 用 SITEINFO を Wedata に登録した

05:34 | はてなブックマーク - 英語の頭字語、頭文字語、略語を検索出来る辞書サイトの multi_requester.js 用 SITEINFO を Wedata に登録した - saitamanodorujiの日記

:mr freedictionary-acronym hoge

で出る。

やたら充実してて 2 文字で検索すると 100 個くらいズラっと出てくる。"java" でも 5 つくらい出るし "aho" って入れると Ayumi Hamasaki Online とかが出る。"unko" はさすがになかった。

2009-09-09

「画像を保存するヒントモード」で保存先指定プロンプトが出るように

00:47 | はてなブックマーク - 「画像を保存するヒントモード」で保存先指定プロンプトが出るように - saitamanodorujiの日記

;p : 保存先指定プロンプトなし

;P : 保存先指定プロンプトあり

g:vimperator:id:blue_ring さんの作ったこのヒントモードがすごく便利なんですけど、自分のところではなぜか ;P を使ってもプロンプトが出なくて、Firefox のオプションで「一般」の「ダウンロード」のところと、「プログラム」の「ファイルの種類」と「取り扱い方法」のところをいろいろ変えてみたけどちょっとうまくいきませんでした*1。保存先指定無しの一発保存だけでも十分に便利だしいいかなって思ったけどやっぱり気になったので調べると、MDCXPCOM の nsIFilePicker というのを使うと保存先を選ぶプロンプトが扱えるとあったので、これを見ながら少し書き加えました。

"vimperatorrc
let g:imageSaveDirectory="path_to_directory"
" save photo hint mode
js <<EOM
(function(){
let xpath = '//img['
    + 'not(contains(@src, "image/x-icon")) and '
    + 'substring(@src, string-length(@foo) - 2) != "ico" and '
    + 'substring(@src, string-length(@foo) - 6) != "1x1.gif" and '
    + 'not(contains(@src, "b.hatena.ne.jp/entry/image"))'
    + ']';
hints.addMode('p', 'photo save (skip prompt)', function(elem){ util.saveImageElem(elem, true) }, function() xpath);
hints.addMode('P', 'photo save (with prompt)', function(elem){ util.saveImageElem(elem, false) }, function() xpath);
})();
EOM

ここまで元のままです。

js <<EOM
// image
util.saveImageElem = function(elem, skipPrompt){
    let doc  = elem.ownerDocument;
    let urlStr  = window.makeURLAbsolute(elem.baseURI, elem.src);
    let uri = makeURI(urlStr, null, null);
    window.urlSecurityCheck(uri, doc.nodePrincipal);
    let ext = elem.src.match(/\/[^\/?]+(\.[^.?\/]+)$/);
    ext = ext ? ext[1]: elem.src.match(/(\.[^\.\/]+)\?/)[1];
    if(!['.jpg','.png','.gif','.bmp','.jpeg'].some(function(e) e==ext)){
        liberator.echoerr('invalid extension (' + ext + ') @ util.saveImageElem');return;
    }
    let leafname;
    if(!elem.alt || elem.alt.length > 30){
        leafname = elem.src.match(/\/([^\/?]+\.[^.?\/]+)$/);
        if(leafname){
            leafname = leafname[1];
        }else{
            leafname = elem.src.match(/\/([^\/?.]+\.[^\.\/]+)\?/)[1];
        }
        if(leafname.length > 30){
            leafname = leafname.slice(-30);
        }
    }else{
        leafname = elem.alt + ext;
    }
    leafname = leafname.fromUTF8Octets();
    try {
        var downloadManager = Cc["@mozilla.org/download-manager;1"]
            .getService(Ci.nsIDownloadManager);
        var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
        .createInstance(Ci.nsIWebBrowserPersist);
        var file = services.create('file');
        if (skipPrompt == 0){
            var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
            fp.init(window, null, Ci.nsIFilePicker.modeSave);
            fp.defaultString = leafname;
            fp.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterImages);
            var diaRes = fp.show()
            if (diaRes == Ci.nsIFilePicker.returnOK || diaRes == Ci.nsIFilePicker.returnReplace){
                var selectedPath = fp.file.path;
                file.initWithPath(selectedPath);
            }else{
                var diaCancel = true;
            }
        }else{
            file.initWithPath(liberator.globalVariables.imageSaveDirectory);
            file.appendRelativePath(leafname);
        }
        if (!diaCancel) {
            var fileuri = makeFileURI(file);
            var download = downloadManager.addDownload(0, uri, fileuri, leafname, null, null, null, null, persist);
            persist.progressListener = download;
            persist.saveURI(uri, null, null, null, null, file);
        }
    } catch (e) { liberator.echoerr(e); }
};

// string
String.prototype.fromUTF8Octets = function(){
    return decodeURIComponent(
            this.replace(/[%\x80-\xFF]/g, function(c)'%' + c.charCodeAt(0).toString(16))
    );
};
EOM

変えたのは try の中身の部分です。skipPrompt を見て false なら nsIFilePicker インスタンスを作ってプロンプトを出すようにしました。

reference

*1Firefox 3.5.2、vimperator 2.1 です。

2009-06-30

選択範囲を Google Translate で英語に翻訳できるように map した

11:47 | はてなブックマーク - 選択範囲を Google Translate で英語に翻訳できるように map した - saitamanodorujiの日記

2009-07-13 追記

langpair=en だと Detect language してくれてなかったので、langpair=auto|en に書き直した。

map <silent> <Leader>mT :js content.window.open('http://www.google.com/translate_t?langpair=auto|en&text=' + window.content.window.getSelection().toString())<CR>

map <silent> <Leader>mT :js content.window.open('http://www.google.com/translate_t?langpair=en&text=' + window.content.window.getSelection().toString())<CR>

2009-06-13

2chのスレ見てるときに <Leader>mz でみみずんのログを開くように map してみた

09:50 | はてなブックマーク - 2chのスレ見てるときに <Leader>mz でみみずんのログを開くように map してみた - saitamanodorujiの日記

map <Leader>mz :js var u=content.location.href.replace(/http:\/\/(.*)\.2ch\.net\/test\/read\.cgi\/(.*)\/(\d{4})(\d{1})(\d{5})\/\d{0,4}/,"http://mimizun.com/search/perl/dattohtml.pl?http://mimizun.com/log/2ch/$2/$1.2ch.net/$2/kako/$3/$3$4/$3$4$5.dat");content.window.open(u)<CR>

URL末尾にオプションが付いてると使えなかったので修正

map <Leader>mz :js var u=content.location.href.replace(/http:\/\/(.*)\.2ch\.net\/test\/read\.cgi\/(.*)\/(\d{4})(\d{1})(\d{5})\/\d{0,4}[n-]{0,2}/,"http://mimizun.com/search/perl/dattohtml.pl?http://mimizun.com/log/2ch/$2/$1.2ch.net/$2/kako/$3/$3$4/$3$4$5.dat");content.window.open(u)<CR>

2009-07-23 追記

map <silent> <Leader>mz :js var u=content.location.href.replace(/http:\/\/(.*)\.2ch\.net\/test\/read\.cgi\/(.*)\/(\d{4})(\d{1})(\d{5})\/?l?\d{0,4}[n-]?\d{0,4}n?/,"http://mimizun.com/log/2ch/$2/$1.2ch.net/$2/kako/$3/$3$4/$3$4$5.dat");content.window.open(u)<CR>

2009-08-04 追記

map <silent> <Leader>mz :js var u=content.location.href.replace(/http:\/\/(.*)\.2ch\.net\/test\/read\.cgi\/(.*)\/(\d{4})(\d{1})(\d{5})\/?[ln]?\d{0,4}[n-]{0,2}\d{0,4}n?/,"http://mimizun.com/log/2ch/$2/$1.2ch.net/$2/kako/$3/$3$4/$3$4$5.html");content.window.open(u)<CR>
map <silent> <Leader>mx :js var u=content.location.href.replace(/http:\/\/(.*)\.2ch\.net\/test\/read\.cgi\/(.*)\/(\d{10})\/?[ln]?\d{0,4}[n-]{0,2}\d{0,4}n?/,"http://mimizun.com/log/2ch/$2/$1.2ch.net/$2/dat/$3.html");content.window.open(u)<CR>

はじめまして

09:47 | はてなブックマーク - はじめまして - saitamanodorujiの日記

vimperator使い始めて1ヶ月くらいです。

よろしくおねがいします。