マクアプ用 lisp
2004-06-21
以前紹介したとばかり思っていたのですが、実は気のせいだったということがわかったので、日ごろ私が使っている xyzzy 用の lisp をご紹介。
元々は、リージョン・セレクションををタグで囲む という lisp なんですが、リージョンとかセレクション作るのも面倒なんで、カーソル行を一気にマクアプしたいからなんとかなりませんかと、xyzzyでタグ打ってる人の数 → で相談してどなたかに書いていただいたものです。起動するとミニバッファで何か聞いてくるので、何かいってやるとカーソル行をマクアプしてくれます。履歴も効きますので、[↑] キーとか押してみても便利です。数文字打ってからやってみたり。
一応セットで使うと便利なので、両方載せておきます。
;;カーソル行をタグで括る
(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)
(insert "<" starttag ">")))
(define-key ed::*html+-mode-map* '(#\M-b) 'quote-line-by-tag)
;;リージョン・セレクションををタグで囲む
(defun quote-region-by-tag (&optional (quotetag ""))
(interactive "*sTag: ") ; s => 文字入力を指示する。
; 入力された文字列は quotetag に割り当てられる。
(setq starttag (string-trim "<>" quotetag))
(setq endtag (substitute-string starttag " .*" ""))
(case (get-selection-type)
((1 2)
(exchange-region-and-selection)))
(let ((begin (mark))
(end (point)))
(when (> begin end)
(let ((tmp begin))
(setq begin end
end tmp)))
(save-excursion
(goto-char end)
(insert "</" endtag ">")
(goto-char begin)
(insert "<" starttag ">"))))
(define-key ed::*html+-mode-map* '(#\C-t) 'quote-region-by-tag)
私の設定では、M-b でカーソル行を、C-t で、リージョンもしくはセレクションをマクアップしてくれます。.xyzzy に直接貼り付けたり、siteinit.l に書いて、普通にダンプファイルを作り直してたりすれば使えます。ぜひお試しを。結構便利です。どうもありがとうございました。>某スレの皆様
- 追記
- kyokusho news [2004/06/22 18:19]を見て、汗った。Han's Room / xyzzy-lisp にある リージョンとセレクションをトグルで変換してくれる exchange-region-and-selection が必要です。導入の仕方は exchange-region-and-selection.l 内部に書いてありますし、netinstaller にも対応していますので、そっちで導入されてもいいです。
「マクアプ用 lisp」へコメントをつける
この記事へのツッコミ
- 1: tomoya (2004-06-22T22:57:20+09:00)
- 情けない質問なのですが、早速導入しようと思ってみたものの、『変数が定義されていません editor::*html+-mode-map*』と言われてしまったのですが、どうしたらよいでしょうか(泣)?
- 2: のり (2004-06-22T23:17:42+09:00)
- えーと、もしかすると html+-mode 導入していませんか? 実は、そっちも必要です。もし、html+-mode でなくて、xml-mode などお使いでしたら、件の lisp の該当個所を xml-mode-map とかに書き換えれば、xml-mode の時に使うことができるようになると思います。多分。:p)
- 3: nabeso (2004-06-23T18:59:54+09:00)
- html+-modeのそこに放り込んでも動いてくれますね。便利です
- 4: のり (2005-04-04T19:18:58+09:00)
- 大変遅くなりましたが。:p)
(define-key ed::*html+-mode-map* '(#\M-b) 'quote-line-by-tag)
の前あたりに、
(require "html+-mode")
を書いておくとよさげです。>tomoya さん
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2004/06/diary_040621a.html