続・よく使う置換をダイアログから
2003-12-22
20日の「よく使う置換をダイアログから」の lisp がバージョンアップして、複数文字列の置換に対応しました。multiple-replace の機能を利用するので、multiple-replace が必要です。もっとも、昨夜、multiple-replace 自体バージョンアップして multiple-replace 単体でも検索文字列、置換文字列のセットの設定を保存できるようになっています。xyzzyの使い方が分からぬやし 励ましあえ その3(793〜796) あたりがそれ。
こういう有用なものは2ちゃんの外にも保存しておいたほうがいいと思うので、自分用にlispファイルに仕立てたものをここにも書いておきます。以下、myreplace.l
;;; -*- Mode: Lisp; Package: User -*-
;;置換リスト
;;http://pc2.2ch.net/test/read.cgi/software/1063367821/ 793番さん
(require "multiple-replace")
(defvar *replace-dialog-list-replace-list* nil)
(define-history-variable *replace-dialog-list-replace-selection* nil)
(defun replace-dialog-list-replace (&optional (replace-list *replace-dialog-list-replace-list*)
&key (interactive-p t) noerror)
(interactive)
(multiple-value-bind (result data)
(dialog-box `(dialog 5 5 219 450
(:caption "置換")
(:font 10 "MS Pゴシック")
(:control
(:static nil "置換リスト(&L)" #x50020000 7 5 113 10)
(:listbox list nil #x50a10111 7 15 200 264)
(:button whole "バッファの先頭から(&O)" #x50010003 22 284 113 14)
(:button selection "セレクション内(&S)" #x50010003 22 301 113 14)
(:button query "確認あり(&Q)" #x50010000 152 284 50 14)
(:button all "全て置換(&A)" #x50010000 152 301 50 14)
(:button IDCANCEL "&Cancel" #x50010000 152 318 50 14)))
`((list . ,replace-list)
(list . ,(car replace-list))
(whole . ,ed::*replace-whole-buffer*)
(selection . ,*replace-dialog-list-replace-selection*))
`((selection :disable (whole))))
(when (and result data)
(let ((replace-list (nth 2 (assoc 'list data)))
(regexp (nth 3 (assoc 'list data)))
(whole (cdr (assoc 'whole data)))
(selection (cdr (assoc 'selection data))))
(setq ed::*replace-whole-buffer* whole
*replace-dialog-list-replace-selection* selection)
(when *replace-whole-buffer* (goto-char (point-min)))
(cond (*replace-dialog-list-replace-selection*
(ed::map-selection #'(lambda (start end)
(goto-char (point-min))
(ed::perform-multiple-replace replace-list
(eq result 'query)
regexp
interactive-p
noerror))))
(t (ed::perform-multiple-replace replace-list
(eq result 'query)
regexp
interactive-p
noerror)))))))
(define-key *global-keymap* #\M-R 'replace-dialog-list-replace);Alt+Shift+R
こういうファイルを仕立てて、Siteinit.l に
(require "myreplace")
として、.xyzzy によく使う置換のリストを以下のような感じで書いておきます。
;;置換リスト
(setq *replace-dialog-list-replace-list*
'(;("表示名" ("置換リスト(alist)") regexp(nil以外で正規表現を使う))
("実体参照化" (("&"."&") ("<"."<") (">".">")) nil)
("改行のみの行を削除" (("^\n" . "")) t)
("インデント解除" (("^[ \t]+" . "")) t)
("行末空白文字削除" (("[ \t]+$" . "")) t)
))
あらかじめ、multiple-replace を導入しておく必要がありますが、multiple-replace は今回のバージョンアップで NetInstaller 対応になったので導入も楽チンです。:-)
Alt+Shift+R すると、以下のスクリーンキャプチャのようなダイアログが出て、手軽に常用する置換が使えます。
OHKUBO Hiroshi さん、793さん、ありがとうございます。
「続・よく使う置換をダイアログから」へコメントをつける
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2003/12/diary_031222a.html