Hatena::ブログ(Diary)

mooz deceives you

(about 'mooz) ; => "See http://mooz.github.com/index-ja.html"

 

March 06 (Sat), 2010

KeySnail グループ発足 & 今後について

ずいぶん前のことになりますが KeySnail グループ というものを作って頂きました。アナウンスが遅れてしまい、申し訳ないです。

はてなのアカウントを持っている方であれば、どなたでも参加できるようです。現在メンバー数が 3 人と大変さびしい状況ですので、よろしければ入ってやって下さい。

さて、この KeySnail グループが利用している「はてなグループ」ですが、グループ内の日記や掲示板機能、共有キーワードなど、色々と便利な機能を持っているようです。僕のほうでもひとつ、日記を書くスペースを頂くことが出来ました。

きすねた(ん) - keysnailグループ

今後 KeySnail 関係のネタについては、グループの日記でやっていきたいと考えています。アップデート情報やプラグインのリリースなど、様々なアナウンスについても同様です。(色々と好き勝手やらせて頂きます)

それでは、これからも KeySnail をよろしくお願いいたします。

February 11 (Thu), 2010

あの Dynamic Macro が KeySnail プラグインに

Here comes dmacro.el

あの dmacro.el が KeySnail のプラグインになりました。インストールは以下のプラグイン名をクリックし、「このプラグインをインストール」より行えます。

Dynamic Macro 繰り返しを検出し、簡単に再実行

KeySnail については no title を参照してください。

Dynamic Macro とは?

Dynamic Macro は、ユーザが繰り返した同じような操作を検出し、検出されたその動作をワンキーで再実行してくれる機能です。

エディタで同じ操作を何度も繰り返すのに疲れたことはありませんか? GNU Emacs で動作する Dynamic Macro (dmacro.el) を使うと、同じ操作を二度実行した後で "繰り返しキー" を押すだけで、その操作を何度も再実行させることができます。

http://www.pitecan.com/DynamicMacro/

詳しくは本家サイト Dynamic Macro を参照してください。

僕はこのプラグインを作成する為に先日初めて Dynamic Macro を体験したのですが、もうこの動作に病みつきです。

デモ動画

本家サイトに掲載されていた例を Firefox + KeySnail + dmacro.ks.js で再現してみました。動画へのリンクを以下に掲載しておきます。

Dynamic Macro on KeySnail on Vimeo

もうこうなると Firefox も立派なエディタと言えてしまうかもしれません。アンドゥ、キルリング、その他諸々。動画中では KeySnail の矩形置換機能もおまけで使用しています。

設定

次のような設定を .keysnail.js の末尾へ貼り付けておきます。

key.setEditKey('M-@', function (ev) {
    ext.exec("dmacro-exec");
}, 'Dynamic macro');

ここでは M-@ といったキーへ「再実行」コマンドを割り当てています。

設定が終了したら、テキストエリアで適当な操作を行い、今割り当てたキーを入力してみましょう。繰り返しが自動で検出され、なかなかうまい具合に動作が再実行されるのがお分かりになるかと思います。

繰り返しの誤爆が大きいな、と感じる方は .keysnail.js の PRESERVE エリアへ次のような設定を行っておくと良いでしょう。

plugins.options["dmacro.predicate_length"] = 20;

これは「次の動作を予測した繰り返し」において「操作の単位」とみなすキー入力数の上限を意味します。デフォルト値は 30 です。

終わりに

まずい動作など見つけられた方はご連絡下さい。

February 10 (Wed), 2010

kungfloo で KeySnail から Tombloo を操作

kungfloo

最近 Tumblr もとい Tombloo を使い始めたので、どうせならと keysnail から Tombloo を操作することが可能となるプラグインを書きました。インストールは以下のプラグイン名を右クリックし、「このプラグインをインストール」からどうぞ。

kungfloo keysnail から tombloo を操作

今のところ、次のような Reblog 方法が用意されています。

  • キーを押し、それらしい Reblog 先を Tombloo に判断させてポスト
  • キーを押し Reblog 先を選んで (範囲が選択されていれば Quote もして) ポスト
  • HoK の拡張ヒントモードを用い、画像を選択してポスト
  • HoK の拡張ヒントモードを用い、様々な要素を選択してポスト

使用例

r キーに reblog コマンドを割り当てているとします。

まず Google Reader で r を押すと、次のようにアクション一覧が開きます。

f:id:mooz:20100210234025p:image

矢印キーや j/k などを使ってアクションを選択し Enter, r, R といったキーを入力することによりポストを行うことが可能です。

  1. Enter / r を入力
    • 即座に reblog が行われます。
  2. R を入力
    • Tombloo のダイアログが開きます。

rr と押すだけで閲覧中のアイテムを reblog することができる。非常に快適ですね。

ちなみに「rr と入力のも面倒だ。ポスト先は固定で良いから r で reblog できるようにしたい」という方向けの設定も用意されています。プラグインマネージャでのヘルプを参照してください。

動画

Google Reader で使用している場面を撮り忘れてしまった為いまひとつ便利さが伝わってこない動画となっているのですが、アップロードにかなり時間をとられて悔しい思いをしたので、載せておくことにします。

kungfloo - keysnail meets tombloo on Vimeo

設定

次のような設定を .keysnail.js の末尾へ。

key.defineKey([key.modes.VIEW, key.modes.CARET], 'r', function (ev, arg) {
    ext.exec("kungfloo-reblog", arg, ev);
}, 'kungfloo - Reblog', true);

Site local keymap プラグインを使って Google Reader 専用の reblog キーバインドを定義しておくと便利です。僕はもっぱらこれを使っています。

local["^http://www.google.(co.jp|com)/reader/view/"] = [
    // 略
    ["r", function () {
         let link = content.document.querySelector("#current-entry a.entry-title-link");
         if (link && plugins.kungfloo)
             plugins.kungfloo.reblog(link, false, false, ["FFFFOUND", "Flickr", "Tumblr"]);
     }]
];

画像のポスト

HoK と連携し、なかなか軽快に画像をポストすることも可能です。詳しくはプラグインマネージャのヘルプを参照してください。

謝辞

Vimperator 用のプラグイン tombloo.jsソースコードを参考にさせて頂きました。感謝します。

February 06 (Sat), 2010

HTML の select 要素選択を anything.el ライクに行う

HTML の select 要素をキーボードで選択しようと思ったら Alt + <down> や Alt + <up> を入力するわけですが、これがすこぶる使い辛い。結局マウスまで手を伸ばしてしまうこともしばしばです。

f:id:mooz:20100206153738p:image

先程もこういった select 要素を操作する機会がありイライラとしていたのですが、ふと keysnail には prompt.selector() という anything.el ライクな候補選択インタフェースが用意されていることを思い出しました (説明口調でスミマセン)。これは使えるんじゃないかと。

そこで、以下のようなスクリプトを書いてみました。こいつを .keysnail.js の末尾へ張り付けておきます。すぐに試したいという方は M-: などのキーから command.interpreter() を呼び出し、以下のコードを eval してやって下さい。

この設定を行った後に select 要素の上で Alt + <down> や Alt + <up> を入力すると、次のようにして prompt.selector が開きます。

f:id:mooz:20100206153639p:image

後は十字キーや C-n / C-p, C-v / M-v, Migemo マッチング (with XUL/Migemo) などを使って選択したい候補を絞り込み、

f:id:mooz:20100206153638p:image

Enter を押せばその要素が選択されてくれます。こいつは楽ですね。

f:id:mooz:20100206153636p:image

万が一デフォルトの選択インタフェースを使いたくなった場合は C-q Alt-<down> のようにして、エスケープキーへ続けて Alt-<down>, Alt-<up> を入力して下さい。

Happy mouseless browsing with keysnail!

January 16 (Sat), 2010

コンテンツへフォーカス (テキストエリアから抜ける) コマンド Firefox 3.6 対応版

Firefox を 3.6 にあげたら、下記のコンテンツへフォーカスするコマンドが効かなくなってしまった。

どうも調べて見たところ、次のような動作となっている様子。

  1. 現在フォーカスがコンテンツ外 (ロケーションバーなど) にある
    • この場合はこれまで同様にコンテンツへフォーカスがあたる
  2. 現在フォーカスがコンテンツの「テキストボックス」にある
    • この場合、これまでのようにテキストボックスから抜けることができない

これはつまり「コンテンツ内の要素にフォーカスが当たっていた場合、そこから blur したことになってくれない」というものだったので、次のようなコマンドへと変更してしのぐことにした。

key.setGlobalKey(['C-c', 'b'], function (ev, arg) {
    let elem = document.commandDispatcher.focusedElement;
    if (elem) elem.blur();

    gBrowser.focus();
    _content.focus();
}, 'コンテンツにフォーカス', true);

同様にして C-g へのフックも修正。

この gBrowser.focus(); _content.focus() という組み合わせは至る所で使われているので (元ネタはどなたかの keyconfig 用設定だし)、「テキストボックスから抜ける」目的で使用していた人は参考までにどうぞ。