2009年9月19日土曜日

ChromeをVim風にキーボード操作する拡張 その2 はてなブックマーク

※最新版をGoogle Codeにアップしました。今後はこちらで更新する予定です
http://code.google.com/p/vimlike-smooziee/




前回のエントリーは、思ってもみないほど多くの人に見ていただけたようで驚きました。(といってもあくまでこのブログ基準です。)
やはりというべきか、ChromeでVimのように操作したいという需要は大きいんですね。

また変更を加えて、非常に快適な動作をするようになったので、公開してみます。

インストール


Vimlike_smooziee 0.0.2 (インストール)(ソース

※削除しました。こちらから最新のものをインストールしてください。

Vimperatorの_smoooziee.jsというj、kキーのスクロールをスムーズにする僕の愛用プラグインがあるのですが、今回はその動作も組み込んで、かなり自分好みにパッケージしています。

もし従来の動作がいいという場合は、ソースのコメントアウトしてるところを使ってもらえばすぐに動かせると思います。
smoozieeの動作も、ソース上部のinterval(スクロールの速度)やmoment(スクロール幅)を調整して好みの動作にすることもできます。(本当は外部ファイルで設定できればいいと思うのですが、やり方がわからないので。)

※もし前回のVimlike-0.0.1を入れてもらった人がいたら、一度chrome://extensions/からuninstallしてもらったほうがいいかもしれません。次回もし公開する場合は、配布方法も調べてもう少しちゃんとしようと思ってます。Vimlikeという名前も、前回参照したソースの名前をそのまま使ってしまっているので、変えるかもしれません。

前回からの変更点



  • j、kキーでスムーズスクロール。

  • 「戻る」「進む」をz、xからH、Lに変更。

  • ggでページトップへスクロール。Gでページ終わりへスクロール。

  • giで最初のテキストボックスにフォーカス。Escでフォーカスを解除。

  • テキストボックス内で、C-a、C-e、C-f、C-bでそれぞれ先頭、末尾、1つ進む、1つ戻る


C-aは、先頭に移動したあとで再度C-aを押すと、テキストの全選択となります。
そのほかrでリロード、dでタブを閉じる動作は変わりありません。

今後ほしい機能



  1. Hit-a-Hint

  2. uで閉じたタブを復活

  3. アドレスバーで入力補完の際、カーソルキーではなくTabキーで選択したい(できる?)

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

  5. ziでフォント拡大、zoでフォント縮小

などなど。
特に1はキーボード操作で完結するためには必須で、これがないとはじまらないというくらいのもの。下記の参考サイトでも書かれているようなので、早めに組み込みたいです。
4のC-p、C-nはもともと、それぞれ印刷と新しいウィンドウを開く機能が割り当てられてるのですが、みんな使ってるんですかね。自分はあまり使っていないので上書きしてしまおうかなと。

参考にしたサイト


前回Extensionの作り方で参考にしたブログ筆者の記事。すごくわかりやすい。
先取り! Google Chrome Extensions(第2回 Chrome Extensionsの作り方#1

キーイベントをとる部分は、以下を参考にさせて(使わせて)いただきました。
はじめてのGoogle Chrome拡張、オレオレChromeKeyconfig
SafariとChromeではkeyIdentifierが使えるので素晴らしすぎます

おかげでChromeが快適でメインブラウザになる日も近いんじゃないかというくらいです。ありがとうございます。

最初の技評の記事で紹介されていた本家ドキュメント。あとでゆっくり読まないと。
Google Chrome Extensions: Developer Documentation

このChrome拡張のために必要にせまられてjavascriptをさわっていますが、どうもJavascriptは苦手というかよくわからないです。一度じっくり腰をすえて勉強しないといけないなあ。

5 件のコメント:

  1. 勉強になりました
    ぜひ使わせていただきたいと思います。

    現状では
    function smoothScroll
    の部分でreturnされていないので
    j、kでスクロールした後の
    横移動、矢印キーでの移動に不備があるようです

    以下のようにしてみたところ
    おそらく正常に繰り返し部分が止まっているかと思います
    (h、lでの左右スクロールも追加してみました)

    var flg;

    function smoothScrollDown(){
    flg = 'vertical';
    smoothScrollBy(moment);
    }

    function smoothScrollUp(){
    flg = 'vertical';
    smoothScrollBy(-moment);
    }

    function smoothScrollRight(){
    flg = 'horizontal';
    smoothScrollBy(moment);
    }

    function smoothScrollLeft(){
    flg = 'horizontal';
    smoothScrollBy(-moment);
    }

    function smoothScrollBy(moment){
    clearTimeout(next);
    smoothScroll(moment);
    }

    function smoothScroll(moment){
    if (moment > 0)
    moment = Math.floor(moment / 2);
    else
    moment = Math.ceil(moment / 2);
    scrollFunc(moment);

    if (Math.abs(moment) < 1) {
    setTimeout(function() {scrollFunc(moment)});
    return;
    }

    next = setTimeout(function() {smoothScroll(moment)}, interval);
    }

    function scrollFunc(moment) {
    if (flg == 'vertical') {
    scrollBy(0, moment);
    } else if (flg == 'horizontal') {
    scrollBy(moment, 0);
    }
    }

    また更新なされた際は参考にさせてください><

    返信削除
  2. 確かに動かなくなりますね。教えていただき、ありがとございます!

    さらに横スクロールまで、ありがとうございます。差し支えなければぜひ使わせていただきたくお願いいたしますm(__)m

    返信削除
  3. 「Vimlike Smooziee」使わせてもらっています。

    以前、firefoxで「vimperator」を使っていたのですが、chrome版が探していたところ、このアドオンを見つることができました。

    「AutoPatchWork」+「Vimlike Smooziee」の組み合わせは最強ですね
    一気にストレスが解消できました。ありがとうございます

    出来れば今後、vimperatorで実装されていたような、「:」でコマンドが使用できるようになればいいなと思います

    不躾なお願いですが、検討お願いします

    返信削除
  4. このコメントは投稿者によって削除されました。

    返信削除
  5. 今更ですが…

    ありがとうございます。
    コマンド、あるといいなあとは思うのですが、拡張からはとんと遠のいてしまって…。

    最近はいくつかVim系の拡張があるようですが、コマンド対応のものもあったりするのかな。

    返信削除