2020年8月5日水曜日

テキストエディタMeryでEmacsキーバインド (2)

以前、「テキストエディタMeryでEmacsキーバインド」でMeryでEmacsキーバインドを実現するマクロ集を公開しました。今回、新たにいくつかEmacsコマンドを追加して、v1.1を公開しました。

ダウンロードはこちらから。

追加したのは以下のコマンドです。
  • write-file
  • save-buffer
  • search (検索ウィンドウを開くだけ)
  • cancel-command (C-x入力をキャンセルするだけ)
  • kill-mery
  • unindent
  • scroll-down
  • scroll-up
  • find-file

力業ですが、前回は断念した、2ストロークキーバインドも対応しています。

というのも、「C-x C-s (save-buffer)」ではまったためです。C-f などでカーソル移動していると、どうも手がEmacs気分になってしまい、保存しようとして C-x C-s を押してしまうんです。で、何が起きるかというと、カーソル行が消去されて上書き保存。よそ見をしていたりすると、気づかないうちに一行なくなっていて…

C-x C-s だけだったら、C-x のキーアサインを消してしまえばいいんですけど、せっかくなので、Meryを閉じる(C-x C-c)とかも欲しいなということでやってみました。

2ストロークキーは、少しトリッキーなので、最後の注意事項も見ておいてください。

個人的には、これでだいぶ快適にMeryが使えるようになりました。


Emacsキーバインド用マクロ

v1.0のものも含めて、同梱しているマクロとキーアサイン例をまとめます。キーアサインのしかたは、前回のブログポスト「テキストエディタMeryでEmacsキーバインド」を確認してください。太字がv1.1で追加したマクロです。

マクロ
動作
キーアサイン例
ctrl-x.js
内部的にC-xが押されたフラグを立てます。これを見て次のコマンドの動作が変わります。
C-x
cancel-command.js
C-xの内部フラグをクリア
C-g
beginning-of-line.js
行頭にカーソルを移動
C-a
end-of-line.js
行末にカーソルを移動
C-e
forward-char.js
一文字右にカーソルを移動
C-f
find-file-and-forward-char.js
[C-xが押された後の場合]
ファイルを開く

[C-xが押されていない場合]
forward-char.jsの動作
C-f
backward-char.js
一文字左にカーソルを移動
C-b
next-line.js
次の行にカーソルを移動
C-n
previous-line.js
前の行にカーソルを移動
C-p
kill-line.js
カーソル位置から行末までをカット
C-k
delete-char.js
カーソル右を一文字削除
C-d
delete-backward-char.js
カーソル左を一文字削除
C-h
set-mark-command.js
カーソル位置をマーク
C-SPACE
kill-region.js
マークからカーソル位置までをカット。範囲選択している場合は、その部分をカット。
C-w
write-file-and-kill-region.js
[C-xが押された後の場合]
名前を付けて保存

[C-xが押されていない場合]
kill-region.jsの動作
C-w
kill-ring-save.js
マークからカーソル位置までをコピー。範囲選択している場合は、その部分をコピー。
Alt-w
beginning-of-buffer.js
バッファ(現在のタブ)の先頭にカーソルを移動
Alt-<
(Alt-Shift-,)
end-of-buffer.js
バッファ(現在のタブ)の末尾にカーソルを移動
Alt->
(Alt-Shift-.)
yank.js
ペースト
C-y
undo.js
アンドゥ
C-/
save-buffer-and-search.js
[C-xが押された後の場合]
上書き保存

[C-xが押されていない場合]
検索ウィンドウを開く。ウィンドウを開くだけで、EmacsのようにC-s/C-rを押して次の検索はできません。
C-s
kill-mery-and-copy.js
[C-xが押された後の場合]
Meryを終了。保存していないファイルがある場合は確認する。

[C-xが押されていない場合]
コピー。Emacsのキーバインドではないですが、つぶすのももったいないので残しました。
C-c
unindent.js
インデントを1つ分戻す。Emacsのキーバインドではないですが、欲しかったので作りました。
Shift+Tab
scroll-up.js
一画面順方向に送る
C-v
scroll-down.js
一画面逆方向に送る
Alt-v


注意事項

[キーアサイン]
上記の表で、C-f と C-w は重複しています。C-xと組み合わせて使いたいかどうかで、どちらのマクロを登録するか決めてください。

例えば、C-x C-f でファイルを開きたい場合は find-file-and-forward.js を、C-f でのカーソル移動だけがほしい場合は forward-char.js を、C-f に登録してください。

[C-x キー]
C-xは、そのあとに対応していないキーを入力すると、内部フラグが残ったままになってしまいます。

例えば、ファイルを挿入しようと思って C-x i と打つと、単に「i」が入力されます。そのあと、カーソル移動しようとして C-f を打つと、最初の C-x が残っていて、C-x C-f となってファイルを開きに行ってしまいます。間違えて C-x を押してしまった場合は、cancel-command.js (C-g) でキャンセルしてください。

対応するコマンドを打った場合は、自動で C-x フラグはクリアされます。なので、上記の例で、間違ってファイルを開くウィンドウを開いた後は、正常に戻ります。

C-x を使った2ストロークキーはMery 3.0.0以上が必要です。

[v1.0とv1.1の差分]
v1.1は上記表の太字のマクロを追加しただけで、v1.0からあったものは変わっていません。



0 件のコメント:

人気の投稿(過去7日間)