朝顔日記

マクアプ用 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」へコメントをつける

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

この記事へのツッコミ

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