Hatena::Groupvimperator

vimpがあればなんでもできるっ! RSSフィード

 | 

2009ねん05がつ06にち、久しぶりのVimpプラグイン

複数行出力用バッファ(MOW)や補完リストの高さを制限したい場合

00:52 | 複数行出力用バッファ(MOW)や補完リストの高さを制限したい場合 - vimpがあればなんでもできるっ! を含むブックマーク はてなブックマーク - 複数行出力用バッファ(MOW)や補完リストの高さを制限したい場合 - vimpがあればなんでもできるっ!

multi_requester.jsでの検索結果で画面が埋まってしまうのをなんとかしたい(multi_requester.jsだけじゃないけど...)のでちょっと調べてみた。

多分、以下のような感じでいけてそう。

:js document.getElementById("liberator-multiline-output").parentNode.maxHeight="300px"

画面の半分までという風に制限したければ、以下のような感じで書けばよい

:js document.getElementById("liberator-multiline-output").parentNode.maxHeight=content.innerHeight/2 + "px"

補完候補のリストも同様にサイズ指定できるっぽい

:js document.getElementById("liberator-completions").parentNode.maxHeight="300px"

ui.jsを読んだら、他にもおもしろそうなのが見つかるかも...

追記

うーん... 補完リストはスクロール領域も合わせてサイズ調整しないと、画面からはみだして使い物にならなくなるなぁ...微妙。

キャレットブラウズモード+単語の自動選択みたいな独自のモードを追加するプラグインをリリース

| 20:08 | キャレットブラウズモード+単語の自動選択みたいな独自のモードを追加するプラグインをリリース - vimpがあればなんでもできるっ! を含むブックマーク はてなブックマーク - キャレットブラウズモード+単語の自動選択みたいな独自のモードを追加するプラグインをリリース - vimpがあればなんでもできるっ!

動機

英語のサイトを読むときのお供として、最近、multi_requester.jsの'alc'サブコマンドが気に入っている。

ただ、何度も検索かけたいときに、単語を選択→検索, 単語を選択→検索... という操作がダルくなってきたので、いっそ、キャレットブラウズ時に自動的に単語を選択してくれるようなモードがあればいいのでは?と思いプラグインを作ってみた。

簡単な説明

このプラグインをpluginフォルダに突っ込むと、AUTO_WORD_SELECTという新しいモードが追加されます。

IキーでAUTO_WORD_SELECTモードに移行します。このモードを抜ける場合はもう一度Iキーを押してください。

AUTO_WORD_SELECTモードでは常に単語が選択されている状態になります。

hjklでのキャレットの移動も単語ごとの移動になります。

このモード用のキーマップの定義

このモード用のキーマップを定義する場合は、以下のようなコードを.vimperatorrcなどに記述します。

下記は、選択されている単語をmulti_requester.jsを使用して、英辞郎 on the Web で検索するためのキーマップです。

js <<EOM
liberator.registerObserver("enter", function() {
  // for auto_word_select.js
  mappings.addUserMap(
    [modes.AUTO_WORD_SELECT],
    ["s"],
    "Translate selected word by multi_requester.js.",
    function() {
      // FIXME:
      // A present mode is preserved in the stack beforehand by the push() method
      // because it doesn't return to AUTO_WORD_SELECT mode before that when
      // returning from the OUTPUT_MULTILINE mode.
      modes.push(modes.AUTO_WORD_SELECT, null, true);

      var selText = content.getSelection().toString();
      var pattern = /[a-zA-Z]+/;
      selText = pattern.test(selText) ? pattern.exec(selText) : selText;
      events.feedkeys(":mr alc " + selText + "<CR>", true, true);
    }
  );
});
EOM

プラグインを読み込んだ後に実行する必要があるため、registerObserver()で"enter"のタイミングで処理を行うようにしています。

http://gyazo.com/f960300ab52a6ddc335a32745614d7de.png

プラグイン作るにあたって苦労した点など...

どうでもいいけど、モードの遷移まわりのコードとか、events.jsのonKeyPressあたりのコードがけっこうゴチャゴチャしてて、ひじょーに読みにくかった><。

今回は、そのあたりの解読に時間を多く割かれてしまったかも。

このプラグインを作るにあたっては、vimpのソースを久しぶりにガッツリ読んだので、それに関する内容忘れないようにWikiに反映させておいたので、皆さんのご参考に...

Vimperator - livedoor Wiki(ウィキ)

あと、気が向いた方は記述内容の修正/追加もよろしくお願いしますー。

追記:2009.5.18

たまに、引っかかって上下に移動できなくなってしまう。なんとなく理由はわかるんだけど、うまいかいひ

 |