Home > Tags > Vimperator

Vimperator

vimperatorのlookupDictionary.jsがgoo辞書で文字化けしていたので修正

追記:パッチ1カ所ミスってました。パッチを当てた後の163行目は不要です。
URLエンコードアリの場合の↓の処理です。

url = dictionary.url.replace(/%s/g,encodeURIComponent(arg));

下のパッチの方も修正しておきました。


lookupdictionary.js のバグフィックス - hogehoge

さっき気づいたんですが、lookupDictionary.jsの:gooが文字化けしまくっています。
バグフィックスはされているとのことですが、相変わらず文字化けするのは私の環境がVimperator2.0preだからでしょうか。

ひとまず自分で出来ることはしようと思い、色々調べてみました。

その結果、goo辞書が返す文字コードが問答無用でEUC-jpになっていることが原因のようです。
lookupDictionary.jsの方にエンコード処理が入っていたので、EUC-jpを明示的に指定するようにしてみました。

それと文字化けではありませんが、日本語が含まれる検索をする場合(国語辞書など)のエンコードがUTF-8でないとダメなようです。
なんでやねん!という感じですが、EUC-jpでエンコードして辞書を引くと該当無しになってしまうので、そういうものだと思うしかありません。
lookupDictionary.jsの中では先のエンコードと同じものを使うようになっていたので、返ってくるHTMLの文字コードとURLの文字コードをそれぞれ指定できるようにしました。

TEXT:
  1. --- lookupDictionary.js Sat Oct 25 04:17:41 2008
  2. +++ lookupDictionary2.js    Fri Nov 14 15:54:30 2008
  3. @@ -21,7 +21,9 @@
  4.      shortHelp: 'goo 辞書',
  5.      xpath: 'id("incontents")/*[@class="ch04" or @class="fs14" or contains(@class,"diclst")]',
  6.      multi: true,
  7. -    dictionary: 'en-US'
  8. +    dictionary: 'en-US',
  9. +    srcEncode: 'EUC-jp',
  10. +    urlEncode: 'UTF-8'
  11.  },{
  12.      names: ['answers'],
  13.      url: 'http://www.answers.com/%s',
  14. @@ -154,10 +156,11 @@
  15.              if (special && sel) arg = sel;
  16.              if (!arg) return;
  17.              var url;
  18. -            if (dictionary.encode) {
  19. +            if (dictionary.urlEncode) {
  20.                  let ttbu = Components.classes['@mozilla.org/intl/texttosuburi;1']
  21.                                       .getService( Components.interfaces.nsITextToSubURI);
  22. -                url = dictionary.url.replace(/%s/g, ttbu.ConvertAndEscape(dictionary.encode, arg));
  23. +                url = dictionary.url.replace(/%s/g, ttbu.ConvertAndEscape(dictionary.urlEncode, arg));
  24.              } else {
  25.                  url = dictionary.url.replace(/%s/g,encodeURIComponent(arg));
  26.              }
  27. @@ -171,7 +174,7 @@
  28.                  }
  29.                  var xs = new XMLSerializer();
  30.                  liberator.echo(new XMLList('<div style="white-space:normal;"><base href="' + util.escapeHTML(url) + '"/>' + xs.serializeToString( result ).replace(/<[^>]+>/g,function (all) all.toLowerCase() ) + '</div>'), true);
  31. -            }, dictionary.encode ? dictionary.encode : null);
  32. +            }, dictionary.srcEncode ? dictionary.srcEncode : null);
  33.          },
  34.          {
  35.              completer: function (arg) {

vimperator2.0preに移行中、修正点をいくつか

vimperator2.0preもそろそろこなれてきたのかな?と勝手に思い、1.2からの移行を決行しました。

名前空間の変更があるのでなかなか面倒ですが、基本的にliberator.を削除してその上で動かない箇所(echoとか)を個別対応すれば大抵動きました。

で、いくつかまだ不都合(不具合?)のある箇所があるんですが、ひとまず直した部分だけ書いておきます。
JavaScriptとかよく知らないんで(殴 何かありましたら指摘して下さると幸いです。

しばらくして問題なさそうなら、また.vimperatorrcの方も晒します。

# そういえばCodeReposのコミッター権を1週間ほど前に申請したんですがどうなったんだろう・・・すっかり忘れてた(殴

C-cをコピーと読み込み停止で協調して使うヤツ

文字列を全く選択していない場合にgetCurrentWord()が呼び出されるとエラーが出ていたので、getSelection()に変更。
ついでに名前空間の方も変更。

TEXT:
  1. " `C-c'をコピーと読み込み停止の両方で協調して使う
  2. javascript <<EOM
  3. mappings.addUserMap([modes.NORMAL], ['<C-c>'],
  4.     'Copy selected text or ',
  5.         function () {
  6.                 var sel = window.content.document.getSelection();
  7.                 if (sel) {
  8.                         util.copyToClipboard(sel, true);
  9.                         liberator.echo('Yanked: ' + util.escapeHTML(sel) );
  10.                 } else {
  11.                         BrowserStop();
  12.                         liberator.echo('Stopped loading !');
  13.                 }
  14.         } , {}
  15. );
  16. EOM

hatenabookmark_show.jsの修正

名前空間の修正の他に、argが空っぽでも何かのオブジェクトが入っているようだったので、文字列に変換してから使うようにしてみました。
(全部貼ると長いのでdiffにしましたスイマセン)

TEXT:
  1. --- hatenabookmark_show.js  Sat May 10 05:37:47 2008
  2. +++ hatenabookmark_show.for2.0pre.js    Fri Nov 14 14:23:45 2008
  3. @@ -26,17 +26,18 @@
  4.              showString += tagString + (bookmark.tags.length> 0 && bookmark.comment ? "<br/> ":"") + bookmark.comment + "</dd>";
  5.          });
  6.          showString += "</dl></div>";
  7. -        liberator.commandline.echo(showString, liberator.commandline.HL_NORMAL, liberator.commandline.FORCE_MULTILINE);
  8. +        commandline.echo(showString, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
  9.      }
  10. -    liberator.commands.addUserCommand(["hbinfo"], "show hatena bookmark comments",
  11. +    commands.addUserCommand(["hbinfo"], "show hatena bookmark comments",
  12.          function(arg,special){
  13.              var clipboard = readFromClipboard();
  14. +            arg = arg.string;
  15.              if(special)
  16.                  arg = window.content.document.getSelection() || clipboard;
  17. -            showComments(arg?encodeURIComponent(arg):liberator.buffer.URL);
  18. -        },{ completer: liberator.completion.url }
  19. +            showComments(arg?encodeURIComponent(arg):buffer.URL);
  20. +        },{ completer: completion.url }
  21.      );
  22. -    liberator.mappings.addUserMap([liberator.modes.VISUAL], [",h"], "show hatena bookmark comments",
  23. +    mappings.addUserMap([modes.VISUAL], [",h"], "show hatena bookmark comments",
  24.          function(count){
  25.              showComments(window.content.document.getSelection());
  26.          },{ noremap: true }

direct_hb.jsの修正

追記。
さっき使ったら動かなかったのでこちらも修正。
修正方法は上に同じ。

TEXT:
  1. --- direct_hb.js    Mon Oct 27 15:58:50 2008
  2. +++ direct_hb.for2.0pre.js  Fri Nov 14 15:21:47 2008
  3. @@ -144,13 +144,13 @@
  4.      }
  5.  
  6.      function getTags(arg){
  7. -        liberator.plugins.hatena_tags = [];
  8. +        plugins.hatena_tags = [];
  9.          httpGET("http://b.hatena.ne.jp/my",
  10.                  function(mypage_text){
  11.                      var mypage_html = parseHTML(mypage_text);
  12.                      var tags = getElementsByXPath("//ul[@id=\"taglist\"]/li/a",mypage_html);
  13.                      tags.forEach(function(tag){
  14. -                        liberator.plugins.hatena_tags.push(tag.innerHTML);
  15. +                        plugins.hatena_tags.push(tag.innerHTML);
  16.                      });
  17.                      liberator.echo("HatenaBookmark: Tag parsing is finished. Taglist length: " + tags.length);
  18.                  });
  19. @@ -196,7 +196,8 @@
  20.              }
  21.              catch(ex){
  22.              }
  23. -            addHatenaBookmarks(hatenaUser,hatenaPassword,liberator.buffer.URL,arg,isNormalize);
  24. +            arg = arg.string;
  25. +            addHatenaBookmarks(hatenaUser,hatenaPassword,buffer.URL,arg,isNormalize);
  26.          },{
  27.              completer: function(filter){
  28.                  //var match_result = filter.match(/(.*)\[(\w*)$/); //[all, commited, now inputting]
  29. @@ -204,7 +205,7 @@
  30.                  //var m = new RegExp("^" + match_result[2]);
  31.                  var m = new RegExp(XMigemoCore ? "^(" + XMigemoCore.getRegExp(match_result[2]) + ")" : "^" + match_result[2],'i');
  32.                  var completionList = [];
  33. -                liberator.plugins.hatena_tags.forEach(function(tag){
  34. +                plugins.hatena_tags.forEach(function(tag){
  35.                      if(m.test(tag)){
  36.                          completionList.push([(match_result[1] || "") + "[" + tag + "]","Tag"]);
  37.                      }

Firefox3.0.3にしたらグリモンとかVimperatorとかの調子が悪くなった(解決済み)

今日になってどうもVimperatorの挙動がおかしいと思ったら、Firefox3.0.3にアップデートしたのが原因っぽい気がしてきました。

幸いにもアップデート前の環境があったのでそちらで試したら問題なく使え、その後3.0.3にアップデートしたら使えなくなりました。

具体的には、GreasemonkeyでLDRize以降に設定されているスクリプトが動きません。
あと、ldrize_cooperation.jsもmapしたキーの挙動がおかしかったりして、様子がおかしい感じです。

ひとまずLDRizeはGreasemonkeyの一番最後(下)に設定し、ldrize_cooperation.jsは無効にしておきました。
こうすればLDRizeは使えませんが、他はおそらく問題なく動いているっぽいです。

後でちゃんとググって調べねば。

以下を参考にパッチあてて動くようになりました。多謝!
駄目くさい - 地獄の猫日記

Vimperator pluginをwgetで一括アップデート

ふとCodeReposを見てみると、Vimpereatorのプラグイン類が結構アップデートされているようだったので、wgetで一括アップデート出来るよう設定してみました。

wgetの導入

私の環境はWindowsなので、まずwgetを導入します。
以下のサイトを参考にしました。
Windows で wget を使う方法

ダウンロードするパッケージは以下が楽で良いです。
ftp://sunsite.dk/projects/wget/windows/wget-complete-stable.zip

LinuxやMacOSXをお使いの方は適当にググってください。

インストール先はどこでも良いんですが、私はvimperatorフォルダに直接置いてしまいました。

Vimperator pluginのURLをテキストに書き出す

おおかたのプラグインはCodeReposにありますので、そちらのURLを書き出します。

CodeRepos::Share – Trac

ここでちょっとコツがあるんですが、ブラウザで開いた以下のようなURLがあったとします。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/copy.js

これをそのままダウンロードしてもHTMLが落ちてくるだけなので、ちょこっと書き換えます。

この部分を

http://coderepos.org/share/browser/

こんな感じにします。

http://coderepos.org/share/export/latest/

そうするとこんな感じになって、最新版ソースをオリジナルフォーマットでダウンロード出来ます。
http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/copy.js

そんなわけで、私のURLリストはこんな感じになりました。
これをplugins_list.txtとしてvimperatorフォルダに保存します。

CODE:
  1. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/copy.js
  2. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/direct_hb.js
  3. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/feedSomeKeys.js
  4. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/googlesuggest.js
  5. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/hatenabookmark_show.js
  6. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/ime_controller.js
  7. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/migemo_hint.js
  8. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/tombloo.js
  9. http://coderepos.org/share/export/latest/lang/javascript/vimperator-plugins/trunk/ubiquity.js

wget起動の為のバッチ作成

フォルダ構成によって適当に読み替えて欲しいですが、ウチの環境だとこんな感じになります。

CODE:
  1. cd plugin
  2. ..\wget\wget.exe -i ..\plugins_list.txt -N
  3. cd ..

iオプションでURLリストを指定するのと、Nオプションでローカルよりサーバー(CodeRepos)の方のファイルが新しかったら上書きするところがポイントです。

私はこれをvimperator_plugin_update.batというファイル名でvimperatorフォルダに置きました。

これまで説明してきたファイル構成をまとめるとこんな感じになります。

プラグインURLリストとバッチファイルも一応アップしときます。
vimperatorプラグインアップデートバッチ

いざアップデート!

vimperator_plugin_update.batをダブルクリックするだけで最新版にアップデートされます。
特にログを出力するようなオプションは指定していませんので、確認はファイルの更新時間を見て下さい。

あと、当然ながらアップデート後はFirefoxを再起動してくださいね。

Vimperatorの設定が良い感じになってきたので晒してみる

数日前からVimperatorを弄くってます。

ようやく形になってきたので、vimperatorrcなどを公開しますね。

まず最初に、入れるべきアドオンから。

まぁこの二つは無いと始まらないので説明は省きますが、stableである1.1よりは1.2preの方がどうやら良さげです。

Bookmarks UI ConsolidatorはブックマークツールバーにAlt+Bでアクセスできるブックマークメニューを追加する拡張です。
どうもブックマークへのアクセスがVimperatorだと苦手だと感じたので、入れてみました。

よく使うサイトなら、:t ldrとか入力してからtab押して開いてますけどね。

あと、ツリー型タブは超おすすめ。画面が広く使え、しかもタブも大量に開いても状況を把握しやすいです。

次に、Vimperatorプラグイン。

最初はldrize_cooperation.jsとかautoIgnoreKey.jsも入れてたんですが、サイトを開いたときの初期状態はlivedoor readerとGmailを除きVimperatorに準拠しよう、というポリシーを決め、それらプラグインは外しました。

その他、設定上の注意点など。

  • All-in-One Sidebarはブックマークサイドバーがキーボードで使いづらいのでアンインストールした
  • FireGesturesの「ロッカージェスチャー」はクイックリンクが効かなくなるので、その機能だけ切ること(アンインストールはしなくてもOK)
  • vimperatorrcでset showtabline=0を設定すると、ツリー型タブが表示されなくなるので注意
  • デフォルトの状態だとステータスバーが黒で、乗っかってるアドオンのアイコンなどが見づらいので、userChrome.cssも変更すること

以上の設定により、こんな感じになりました。超スッキリ!

あと最後に一点お詫びです。

下記設定ファイルを作成するにあたり多くのサイトを参考にさせていただきました。
しかし、あちこちコピペしているうちにコピペ元が分からなくなってしまいました。
ゴメンナサイ!


設定をちょこっと弄くりました。
コメントで教えて貰った設定の追加と、direct_hb.jsプラグインの追加、あとlivedoor readerでgとoのキーがスルーされるようにしました。
(gは本文取得のためのLDR Full FeedってGreasemonkeyスクリプトで使ってます)

以下コピペすると意図しない文字に置き換わったりするので、オリジナルのファイルも置いておきます。
_vimperatorrc

_vimperatorrc

" 1.2pre (created: 2008/07/04 07:30:07)
" by fifnel

"------------------------------------------------------------------------------
" 必要なFirefoxアドオン
"  Vimperator 1.2pre
"  Vimperator日本語ヘルプ1.0
"  Bookmarks UI Consolidator
"  ツリー型タブ

"------------------------------------------------------------------------------
" 必要なVimperatorプラグイン
"  copy.js
"  feedSomeKeys.js
"  hatenabookmark_show.js
"  ime_controller.js
"  migemo_hint.js
"  googlesuggest.js
"  direct_hb.js

"------------------------------------------------------------------------------
" その他注意点
" ・All-in-One Sidebarはブックマークサイドバーがキーボードで使いづらいので入れない
" ・FireGesturesの「ロッカージェスチャー」はクイックリンクが効かなくなるので、その機能だけ切ること
" ・set showtabline=0を設定すると、ツリー型タブが表示されなくなるので注意

"------------------------------------------------------------------------------
" Mappings

" j/kの移動量を6倍に
map j 6<C-e>
map k 6<C-y>

" Sleipnir風タブ移動
map <F3> gt
map <F2> gT

" キースルーをちょっとでも楽に
map q <C-q>

" Firefoxオリジナルのキーバインド
map <C-w> d
map <BS> H
noremap <C-b> :normal! C-b<CR>

" Alt+↑/↓でメニューの表示/非表示
map <A-Down> :set guioptions+=mT<CR>
map <A-Up> :set guioptions-=mT<CR>

" . でタブリストを表示/非表示
map . :ls!<CR>

" はてぶコメント表示(hatenabookmark_show.js)
map b :hbinfo<CR>

" <S-b>ではてブ(direct_hb.js)
noremap B :hb<space>

" googleサジェスト検索(googlesuggest.js)
map s :google<Space>

" <C-S-c>でタイトルとURLをコピー(copy.js)
map <C-C> :copy titleAndURL<CR>

" cでURLだけをコピー(copy.js)
map c :copy URL<CR>

"------------------------------------------------------------------------------
" Options

" ツールバーとかの表示関係
set guioptions+=b

" クイックリンクのフォントサイズ
set hintstyle += font-size:16px;

" ビープもベルもウザいので消す
set visualbell
set visualbellstyle=display:none;

" INSERTモードとTEXTEREAモードで<C-i> を押した時のエディタ
"set editor=C:\Tools\Vim\vim71\gvim.exe -f
set editor=C:\Tools\xyzzy\xyzzy.exe
" set editor=C:\Program Files\sakura\sakura.exe

" ブラウザタイトルの変更
set titlestring=Firefox

" migemo_hint.js
set hintmatching=custom

" その他
set history=1000
set verbose=9
set wildoptions=auto
set complete=l

"------------------------------------------------------------------------------
" Abbreviations

" ime_controller.js
let g:ex_ime_mode = "inactive"
let g:textarea_ime_mode = "inactive" 

" copy.js
javascript <<EOM
liberator.globalVariables.copy_templates = [
   { label: 'titleAndURL',    value: '%TITLE% %URL%' },
   { label: 'URL',            value: '%URL%' },
   { label: 'title',          value: '%TITLE%' },
   { label: 'hatena',         value: '[%URL%:title=%TITLE%]' },
   { label: 'hatenacite',     value: '>%URL%:title=%TITLE%>\n%SEL%\n<<' },
   { label: 'markdown',       value: '[%SEL%](%URL% "%TITLE%")' },
   { label: 'htmlblockquote', value: '<blockquote cite="%URL%" title="%TITLE%">%HTMLSEL%</blockquote>' }
];
EOM

" feedSomeKeys.js(Gmail)
autocmd LocationChange .* :fmapc
js <<EOF
autocommands.add('LocationChange',/mail\.google\.com\/(mail|a)\//,[
  'js plugins.feedKey.setup(',
  '"c / y j k n p o u e x s r a # [ ] z ? gi gs gt gd ga gc".split(/ +/).map(function(i) [i, "4" + i])',
  ');'
].join(''));
EOF

" feedSomeKeys.js(livedoor reader)
js <<EOF
autocommands.add('LocationChange',/reader\.livedoor\.com\/reader\//,
  'js plugins.feedKey.setup("j k s ? r a p v c <Space> <S-Space> z Z < > q w b i o g".split(/ +/));');
EOF
autocmd LocationChange http://reader\.livedoor\.com/reader/ :fmap J <Space>
autocmd LocationChange http://reader\.livedoor\.com/reader/ :fmap K <S-Space>

" Add Mapping `C-c' copy or stop loading
javascript <<EOM
liberator.mappings.addUserMap([liberator.modes.NORMAL], ['<C-c>'],
    'Copy selected text or ',
        function () {
                var sel = liberator.buffer.getCurrentWord();
                if (sel) {
                        liberator.copyToClipboard(sel, true);
                        echo('Yanked: ' + liberator.util.escapeHTML(sel) );
                } else {
                        BrowserStop();
                        liberator.echo('Stopped loading !');
                }
        } , {}
);
EOM

" ステータスバーにfeedボタンを表示
" http://d.hatena.ne.jp/teramako/20071205/p1
js <<EOM
(function(){
 var feedPanel = document.createElement('statusbarpanel');
 var feedButton = document.getElementById('feed-button');
 feedPanel.setAttribute('id','feed-panel-clone');
 feedPanel.appendChild(feedButton.cloneNode(true));
 feedButton.parentNode.removeChild(feedButton);
 document.getElementById('status-bar').insertBefore(feedPanel,document.getElementById('security-button'));
})();
EOM

source! ~/_vimperatorrc.local

" vim: set ft=vimperator:

userChrome.css

/* bufferwindow style */
#liberator-container{
    color: blue !important; /* 指定しないとbufferwindowでcolorが利かない */
}
#liberator-bufferwindow, #liberator-completion, #liberator-previewwindow {
    color: blue !important;
    background-color: #eee !important;
}

/* commandline style */
#liberator-commandline{
    /*font-family:"Luxi Mono", monospace !important; // <-- フォントを指定するなら  */
    background-color: #222 !important;
    color: #fff !important;
    font-weight: normal !important;
    font-size: 10pt !important;
}

/* statusline style */
#liberator-statusline {
    /*font-family:"Luxi Mono", monospace !important; // <-- フォントを指定するなら  */
    font-weight: normal !important;
    font-size: 10pt !important;
    padding:3px 0 !important;
}

/* normal page statusline */
.hl-StatusLine {
     background-color: #ddd !important;
     color: #222 !important;
}

/* secure(ssl) page statusline */
.hl-StatusLineSecure {
     background-color: #B0FF00 !important; /* light green */
     color: black !important;
}

/* for ls command */
#liberator-multiline-output {
    overflow: hidden;
    background-color: #eee;
    color: #151;
}

Home > Tags > Vimperator

その他諸々

あわせて読みたい

  • 個人的リンク集
  • mixi
  • twitter
  • track feed
  • ページランク

Return to page top