Joe's Own Editor (joe) に行コピーと行複製を追加する
Joe's Own Editor (joe) に、行コピーと行複製のキーシークエンスを追加する方法について。
Symptom
発端はエディタ上で日々 C-k
(kill-line) + C-y
(yank) を叩いていることに気づいたから。カーソル行をコピー(もしくは複製)するという操作は意外と多いが、そのために一度行を消したり、あるいはMarkを付けなければならないのは非効率だ。
そうして考えてみると C-w
に対する M-w
のように、 M-k
相当のコマンドがないというのは意外な話だ。同じ事を考えている人は多いようで、 emacs の場合はこちらに copy-line-as-kill
相当の関数と duplicate-line
関数を定義する方法が示されている: https://www.emacswiki.org/emacs/CopyingWholeLines
というわけで joe (jmacs) にも実装してみよう。
Resolution
私は emacs-like なモードである jmacs を利用しているので、 ~/.jmacsrc
を編集することになる。まだ作成したことのない場合は、最初に /etc/joe/jmacsrc
をコピーして用意する必要がある。
cp /etc/joe/jmacsrc ~/.jmacsrc
このファイルは単なる設定ファイルというよりも、キーシークエンスに対するマクロの定義が全て記載されているファイルという方が正しい。このファイルの :main
セクションの中に以下のようなマクロを追加すればいい。
:main Text editing window :inherit windows : # (snip) delch .kD Delete character delch ^D deleol ^K Delete to end of line markl,copy,nmark ^[ k Copy line # これを追加 (M-k) markl,copy,nmark,bol,yank ^[ K Duplicate line # これを追加 (M-K) delw ^[ d Delete word delw ^[ D Delete word dnarw .kd Go down
コマンド、キーシークエンス、コメントは タブ区切り でなければいけないことに注意。
上記の記載はスペースに変換されてしまっているので修正が必要になる。
Detail
文法としては、コマンドを追加したいセクションに対して、タブ区切りで以下の内容を記述する。
- joe が認識できるコマンド列(カンマ区切りで実行順に並べる)
- キーシークエンス
- コメント
今回追加したキーシークエンスのうち、後者を具体的に解説すれば以下のようになる。
markl,copy,nmark,bol,yank ^[ K Duplicate line ------------------------------------------------------- markl : カーソル行をマーク copy : コピー nmark : マーク解除 bol : 行頭 (beginning of line) にカーソルを移動 yank : ペースト ^[ K : マクロを割り当てるキーシークエンス (M-K) Duplicate line : コメント
このコマンド列は M-x のミニバッファに直接入力するものと同等だ。試したいときも M-x で入力すればいい。
というか最近 joe (jmacs) に構い過ぎな気がする。