blog にコードを貼り付けるとき、別のファイルからテキストをコピーして pre タグ内へ貼り付けている。html や xml ファイルをまるごと自分で書く場合には、<![CDATA[....]]> でくくれば良いが、少なくともここの blog のフォームからの投稿時にはそれが使えないようだった。
C++ の template のように、< や > を使いまくるテキストを投稿するためには、いちいち実体参照表記に変換してやる必要がある。テキストをフォームに貼り付けたら、この変換をやってくれる親切なページがあるが、それでもその操作が段々億劫になってくる。
幸いにも私が使うテキストエディタは emacs なので、テキストを選択してコマンドを実行したら、クリップボードに実体参照変換済みのテキストが乗っている、というようなコマンドは作れそうだ。
(defun copy-html-pre-tag-escaped (&optional st en)
(interactive "r")
"Copy text in the region. and replace meta characters for html pre tag."
(kill-new
(replace-regexp-in-string
"<" "<"
(replace-regexp-in-string
">" ">"
(replace-regexp-in-string
"&" "&"
(buffer-substring-no-properties st en)))))
)
文字列置換は別に正規表現で無くていいと思ったが、それらしい関数が探しきれなかった。 使い方はリージョンを選択してこのコマンドを呼ぶ(M-x copy-html-pre-tag-escaped)だけ。 実体参照変換後の文字列がクリップボードに乗っているので、それを paste すれば良い。
一応説明を書いておくと、buffer-substring-no-properties でリージョンにあるテキストを取得して、三種類の文字を対象に文字列変換する。 それを kill-new という物騒な名前の関数に渡せば kill-ring に入ると同時にクリップボードにもコピーされているという仕組み。
ググっている内に複数文字列を一挙に変換する関数をパッケージとして公開しているページを見つけた。面白そうなページなので、後でじっくり読んでみよう。
0 件のコメント:
コメントを投稿
スパムフィルタが機能しないようなので、コメント不可にしました。
注: コメントを投稿できるのは、このブログのメンバーだけです。