[xyzzy:01733] Re: テキストのオートインデントについて
- Subject: [xyzzy:01733] Re: テキストのオートインデントについて
- From: Seiya Suda <EZU11330@xxxxxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
大橋さん、こんにちは。須田です。
Thu, 28 Jan 1999 16:26:26 +0900 の
[xyzzy:01720] Re: テキストのオートインデントについて
への返事です。
> ところで、elispとklisp(すいません、呼び方がわからないのでlispに亀井さんのK
> をつけちゃいました)では、エディタの拡張言語としてはどちらが簡単なんでしょう
> か。MuleのLispコードは、hookとかkey-mapとか難しそうでしたが。
どっちも同じくらい難しいです。ただ、common lisp ふう(? そのもの?)なのは xyzzy
のほうが多くて、エディター拡張用の関数は、残念ながら elisp のほうが多いような
気がします(気のせいか?)。
以前亀井さんの助けを借りて、text-newline-midashi-and-create-spaces というグロ
テスクで重いコマンドを作ったことがあります。今回それを改造して、text-newline-
and-indent なる関数をでっちあげました。以下のとおりです(どっかおかしかったら、
指摘して下さい > 亀井さん)。
(defun text-newline-and-indent (&optional (arg 1))
(interactive "*p")
(let ((current-space
(save-excursion
(goto-bol)
(and (looking-at "^[ \t]")
(following-char)))))
(insert #\LFD)
(if (eq *last-command-char* #\F20)
(let ((current-gyoto
(save-excursion
(scan-buffer *gyoto-mark* :regexp t :reverse t :tail nil)
(following-char))))
(insert current-gyoto))
(when current-space
(insert current-space arg)))))
これもですね、かなりグロかなー。どういうのかというと、現在の行頭のスペースを見
にいって、その種類を得、改行してからそれを入れます。このコマンドをテキストモー
ドのキーマップの #\RET に割り付けておくと、M-5 #\RET で、半角なり全角なりのス
ペースが5個入力されます。M-* というのをやらなければ1個です。
それからこのコマンドをテキストモードのキーマップの #\F20 に割り付けておくと、
#\C-RET で、現在の行頭マークを探して、それを入れます。行頭マークは
(defvar *gyoto-mark* "^[■□◇◆●◎○]")
というような具合にしてどっかに書いておいて下さい(.xyzzyとかに)。こんな具合にす
ると、もしかしたらワードでやらなくてむすむようになるかも知れません。
なお、F20 というのは
(set-extended-key-translate-table exkey-C-return #\F20)
というのをどこかに書いておくと、#\C-RET が F20 になるという魔術です。
単にリターンで済むところを上のように複雑にするわけですから、xyzzy が word
なみに重くなっちゃいます(ウソウソ)。
--------
須田誠也
EZU11330@xxxxxxxxxxx