2009年10月5日月曜日

ChromeをVim風にキーボード操作する拡張をGoogle Codeにアップ はてなブックマーク

Google Codeにアップしました


前回前々回と書いてきたChromeをVim風(またはFirefoxのVimperator風)に操作する拡張を、Google Codeにアップしました。

Vimlike Smooziee
http://code.google.com/p/vimlike-smooziee/
そのうちVimperatorの作者あたりがChrome向けにも作ってくれるんじゃないかなどと思いつつも、またいくつか改善しています。
とても便利になっていると思いますので、ぜひ使ってみてもらえればと思います。
現在のバージョンは0.0.3です。

※現在開発版のChrome4でしか動作確認していません。

追加、変更したこと


  1. j、kのスクロールにバグがあったので修正
  2. h、l(エル)キーでも左右にスムーズスクロール
  3. 0(ゼロ)で一番左へスクロール、$で一番右へスクロール
  4. ページの読み込み開始時に動作するように変更
  5. uで閉じたタブを開く(問題あり。後述)
  6. テキスト入力時にC-dでカーソルの後の1文字を削除、C-hで前の1文字を削除
  7. 自動アップデート


j、kキーのスクロールのバグについては、前エントリーのコメントで教えていただきました。ありがとうございます!
同時にh、lキーのスクロールも教えていただいたので、こちらもありがたく採用させていただきます。

4.については、今まではデフォルト設定でページの読み込みが完了してから動作するようになっていたため、少し操作するまで待たされるようになっていました。
今回の変更で読み込み開始時に動作するようになったので、より快適に使えるようになっています。

自動アップデートも設定しました。
chrome://extensions/ から更新ボタン("Update extensions now")をクリックすることで、今後更新がある場合には最新のバージョンにアップデートされます。(現状では有無を言わせずアップデートするようなので注意)

今回の変更分も合わせて、操作方法をまとめておきます。


操作方法まとめ


スクロール
  • j、kで上下にスムーズスクロール
  • h、l(エル)で左右にスムーズスクロール
  • ggでページトップへスクロール、Gでページ終わりへスクロール
  • 0(ゼロ)でページの一番左へスクロール、$でページの一番右へスクロール

履歴
  • H、Lでそれぞれ「戻る」「進む}

テキスト入力
  • giで最初のテキストボックスにフォーカス、Escでフォーカスを解除
  • テキストボックス内で、C-a、C-e でそれぞれ カーソルを先頭、末尾へ移動
  • テキストボックス内で、C-f、C-b でそれぞれ カーソルを1つ前へ、1つ後ろへ
  • テキストボックス内で、C-d、C-h でそれぞれ カーソルの1つ前を削除、1つ後ろを削除
  • テキストボックス内でカーソルが先頭にあるとき、C-aで全選択

タブ
  • rでリロード
  • dでタブを閉じる
  • uで閉じたタブを復元(タブ内の閲覧履歴は復元できず)

※ C-aは「Ctrl + a」、Gは「Shift + g」です。

※ uでは、そのタブ内での閲覧履歴は復元できません。履歴も復元したいときは本来のショートカットキーである「Ctrl+Shift+t」を使ってください。


今後ほしい機能

  • f、Fでクイックヒント
  • zi、zoでフォントの拡大、縮小

これができればとりあえず満足です。

前回も書いた、

C-pで前の(左の)タブに移動、C-nで次の(右の)タブに移動


については、一度実装してみたのですが、泣く泣くコメントアウトしました。
「新しいタブ」やchrome:// のページなどで動作が効かず、そこだけ元々のショートカットである印刷や新しいウィンドウの立ち上げが行われてしまい、煩わしいためです。

ただ、今後専用のAPIを用意するという投稿がGoogleグループにありましたので(リンク)、それができるのを待って実装する予定です。

ちなみにこのグループには、マウスやキーボードのイベントを扱う、より公式なAPIも用意するつもりだとの投稿もあるので、そちらも期待したいところ。

スクロール幅などをユーザーがカスタマイズできるようにしたいところですが、
先取り! Google Chrome Extensions 第4回 Chrome Extensionsのこれから
を見ると、どうもできるようになるようです。もう少しAPIが安定したら実装しようと思います。


実装についてのメモ


自動アップデートは、ここにあるように設定すれば、簡単に動きました。

ページの読み込み開始時に拡張が動作するようには、manifest.jsonのcontent_scriptsの項目で、
"run_at": "document_start"
と定義します。(ドキュメント

uで実装したタブを復活させるようなタブ操作は、Backgroud pageなどhtml側で行うようです。従ってContent scriptからBackgroud pageを呼び出す必要が出てきます。

そういうときは、Content script側でPortオブジェクトのportMessage()を使ってメッセージを送り、Backgroud page側ではそれを受けて連携するみたいです。(ドキュメント

uのタブ復元は、ソースを見てもらえればわかると思いますが、かなり無理をしている感じです。今後のAPI充実に期待です。

0 件のコメント:

コメントを投稿