Hatena::Groupvimperator

Vimple Star Sprites RSSフィード

2012-02-01

IMEのon/off状態を取得してスタイリングするプラグイン

| 01:04 | IMEのon/off状態を取得してスタイリングするプラグイン - Vimple Star Sprites を含むブックマーク はてなブックマーク - IMEのon/off状態を取得してスタイリングするプラグイン - Vimple Star Sprites

ime_controller.js を使わずに style コマンドでの記事で

そうそう、bug 6380 – IMEの状態をJavascriptのコードから取得できるべきにあるように、将来的にはJavaScriptとから操作できるようになるかもよ。

と書いて放置していたのを思い出して、とりあえず状態取得からやってみた。

該当のBugはこちら。

おそらく、例によってLinuxでは無理だと思う。

何をやっているか。

  1. focusイベントからフォーカスされている要素を取得
  2. input, textarea 要素だったら、
    • IME状態を取って属性設定
    • keydown イベント取得設定
  3. keydownイベントで毎回IME設定を取得して属性設定

属性設定は、liberator:ime(http://vimperator.org/namespaces/liberatorの名前空間付きの属性)で、trueならIMEオンの状態。

デフォルトのスタイルは以下の様になっている。

textarea[liberator|ime=true],input[liberator|ime=true] {
  outline: thin solid red !important;
}
style -name ime-status * textarea[liberator|ime=true],input[liberator|ime=true] 好きなスタイル

とかでテキトウに変更可能。

追記

実装した中野さんに感謝を

トラックバック - http://vimperator.g.hatena.ne.jp/teramako/20120201

2012-01-10

ドットを含む文字をクォートで囲んで検索

| 21:31 | ドットを含む文字をクォートで囲んで検索 - Vimple Star Sprites を含むブックマーク はてなブックマーク - ドットを含む文字をクォートで囲んで検索 - Vimple Star Sprites

例えば、node.jsを:tabopen?や:open]コマンドで実行すると、ホスト名とみなされてしまう。

これは困るわけである。この問題はずっと前から認識していて、パッチを送ったこともある。送ったパッチはTLDを含むかどうかを長いswitch文で判断するものだったが、見事玉砕してしまい、それからというもの放置していた。

んで、上記 Issue が最近挙げられて根本解決になってない気もするけど悪くない案だし、ステータスがPatchNeededになったので早速コミットした。

これで、

:tabopen "node.js"

などとクォートで囲めば検索されるようになる。

トラックバック - http://vimperator.g.hatena.ne.jp/teramako/20120110

2012-01-06

:tabclose コマンドに -select オプションが追加された

| 21:02 | :tabclose コマンドに -select オプションが追加された - Vimple Star Sprites を含むブックマーク はてなブックマーク - :tabclose コマンドに -select オプションが追加された - Vimple Star Sprites

今まで、:tabclose?コマンドはタブ削除後に一つ左のタブを選択と固定だったのだが、-selectオプションが加わったことで、右側だったり、直前まで選択していたタブに戻ったりができるようになった。

Spec

:tabc[lose] [-select {left|right|lastactive}]
left
左側のタブを選択
right
右側のタブを選択
lastactive
直前まで選択してたタブに戻る。もし直前のタブが利用できない場合(既に削除された後だったりとか)はフォールバック的に右側を選択する

経緯

  1. [Vimperator] [PATCH] select previous tab when revmoe a tab(sorry for forgetting to add attachment)
    • ここから始まるスレッドで、タブ削除時にVimperator側で選択するタブを制御するのではなくFirefoxにお任せするパッチが投下される。
  2. が、オーナーのマーチンさんにリジェクトされる
  3. 僕が破壊的な提案をする(ぉ
  4. もちろん却下
  5. id:AmaiSaeta さんが穏当な提案
    • :tabclose?コマンドに -select オプションを追加してユーザが好きなように map すれば良いじゃない
  6. マーチンさん、了承。パッチ、プリーズ!
  7. 僕、パッチを投下
  8. マーチンさん、英語等を修正してコミット

若干の仕様変更

プラグインを書く人にとっては影響があるかもしれない(たぶんないけど)ので一応書いておく

  • tab.removeメソッドの引数に変更
    • 第3引数、今までは Boolean 型で true なら左側を選択、falseなら右側だった
    • これを Number 型に変更し、マイナス値なら左側、0 なら直前まで選択していたタブ、プラス値なら右側に

dDも合わせて既存の仕様となるように変更しているので、基本的な使用には影響はない。

つまり何が嬉しいの?

:nnormap d :tabc -select lastactive<CR>

今までは右側のタブが選択されるものが、前に選択してたタブに戻るようになるため、:tabopen?で開いてdでまた前のタブに戻ったりができるようになった。

RSSリーダー系のページからタブに開いて閉じてすぐ戻って...ができるわけだ。

(若干の)注意点

Vimperatorは一つ前に選択してたタブまでは記憶しているが、それ以降は持っていないので連続して戻ることは不可能。

まあこれはFirefoxもほぼ同様の仕様なので特に不満は出ないと思っているが...

あと、Firefoxでのabout:config値browser.tabs.selectOwnerOnCloseとも若干違う仕様である。Firefox側のそれは、タブに開いた後別タブを選択すると履歴は消えるが、Vimperatorは常に直前のタブを記憶する仕様になっている。

トラックバック - http://vimperator.g.hatena.ne.jp/teramako/20120106