:mr freedictionary-acronym hoge
で出る。
やたら充実してて 2 文字で検索すると 100 個くらいズラっと出てくる。"java" でも 5 つくらい出るし "aho" って入れると Ayumi Hamasaki Online とかが出る。"unko" はさすがになかった。
;p : 保存先指定プロンプトなし
;P : 保存先指定プロンプトあり
g:vimperator:id:blue_ring さんの作ったこのヒントモードがすごく便利なんですけど、自分のところではなぜか ;P を使ってもプロンプトが出なくて、Firefox のオプションで「一般」の「ダウンロード」のところと、「プログラム」の「ファイルの種類」と「取り扱い方法」のところをいろいろ変えてみたけどちょっとうまくいきませんでした*1。保存先指定無しの一発保存だけでも十分に便利だしいいかなって思ったけどやっぱり気になったので調べると、MDC に XPCOM の 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 インスタンスを作ってプロンプトを出すようにしました。
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>
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>
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>
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>
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>