トップ «前の日記(2009-12-14) 最新 次の日記(2009-12-29)» 編集

Ussy Diary


2009-12-22

[KeySnail]KeySnail でひとつ前のパス区切り文字まで削除する

zsh, Emacs を使うひとつの理由に、ひとつ前のパス区切り文字まで削除する機能があることが個人的にあります。 例えば zsh の場合 .zshrc に以下の設定を行うことで C-w を入力するごとにひとつ前のパス区切り文字まで削除することができます。(元の WORDCHARS 変数から / を抜き取ったもの)

WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'

どういう動きかをすごく大ざっぱに言うと

$ cd /opt/local/bin

ここで C-w を入力すると下のようにひとつ上のディレクトリまで削除してくれます。実際に自分で動作させたほうが分かりやすいです。

$ cd /opt/local/

bash では C-w を入力すると単語単位、すなわちパスすべてを削除してしまいます。

Emacs でも .emacs に以下の設定を行うことで、 minibuffer 上で C-w を入力するごとにひとつ前のパス区切り文字まで削除することができます。 Dired を利用するので、ひとつ上のディレクトリに移動できるこの設定も重宝しています。

(define-key minibuffer-local-completion-map "\C-w" 'backward-kill-word)

ブラウザでもひとつ上のディレクトリに移動したいことがよくあります。 KeySnail にひとつ上の階層に移動する JavaScript(Bookmarklet) をキーに割り当ててももちろんよいのですが、テキストを編集しているときにもできると色々楽ができそうだと思いスクリプトを書いてみました。

function (aEvent) {
  if (command.marked(aEvent)) {
    goDoCommand("cmd_copy");
    goDoCommand("cmd_delete");
    command.resetMark(aEvent);
  } else {
    var value = aEvent.originalTarget.value;
    aEvent.originalTarget.value = value.replace(/(.*)?\/.+$/, function() {
      return arguments[1] + "/";
    });
  }
}

自分の場合 zsh, Emacs で C-w を利用しているので、 KeySnail でも C-w を利用すべく「リージョンをカット」のコードを編集しています。選択中であれば、リージョンをカット、そうでなければひとつ上の階層までカットするようにしています。

これでロケーションバー、テキストエリアなどの編集するところで、 zsh, Emacs 同様ひとつ上のパス区切り文字まで削除できるようになりました。