朝顔日記

続マクアプ用 lisp

2005-04-06

以前 マクアプ用 lisp でご紹介した xyzzy を使って、カーソル行をタグで括る lisp ですが、インデントしている行なんかだとおもしろくなかったりしてやや不便に思っていました。自分で html を書くときはインデントは使わないので問題ないのですが、人の作ったものをいじる場合なんかもあるので。ちょっとだけ lisp が読めるようになってきたので、調子に乗って改造してみるかと思い立ちました。

元々の lisp は、行末へ行って閉じタグを挿入、その後行頭へ行って開始タグを挿入というような動作になっているので、行頭へ行ったときにカーソル位置の文字コードを判定してタブやスペースだったら一文字進めるというようなルーチンを追加してやればいいのかなぁとか考えながら、xyzzy本 をパラパラ眺めていたら skip-white-forward なんていう便利関数がすでに装備されていることが判明。リファレンス にもちゃんと載っていました。ということで、(skip-white-forward) という1行を追加しただけで目的は達成されました。一応以下に載せておきます。


;;カーソル行をタグで括る(インデント対応)
(defun quote-line-by-tag (&optional (quotetag ""))
  (interactive "*sTag: ") ; s => 文字入力を指示する。
  ; 入力された文字列は quotetag に割り当てられる。
  (setq starttag (string-trim "<>" quotetag))
  (setq endtag (substitute-string starttag " .*" ""))
  (save-excursion
    (goto-eol)
    (insert "</" endtag ">")
    (goto-bol)
    (skip-white-forward)
    (insert "<" starttag ">")))
(require "html+-mode")
(define-key ed::*html+-mode-map* '(#\M-b) 'quote-line-by-tag)

「続マクアプ用 lisp」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/04/diary_050406a.html