日記書いたりメモ書いたり
text-adjust.el最近は全角文字と半角文字の間には半角スペースを入れるようにしている (例外もある) が、この作業はかなり面倒くさい。例えば、1にちと入力して変換すると 1日となるが、変換確定後にわざわざ戻ってから入力モードを直接入力にして、半角スペースを打ち込まなければならない。他にも、小括弧とかの非全角文字を打つときも同様だ。こんな作業は自動でできないものかと思っていたら、それを実現してくれる拡張 ELisp があった。text-adjust.el というものだ。主な機能を引用してみる。
- 半角カナ, 規格外文字を「〓」に置き換える
- 全角英数を半角にする
- 句読点を置き換える
- 全角文字と半角文字の間に空白を入れる
この拡張 ELisp、特に問題はなさそうだが、実は結構重大な問題があった。それは、句読点と小括弧などが隣接しているときにも半角スペースを挿入してしまうというものと、全角文字と半角文字が HTML タグに挟まれている場合に空白がうまく入らないというものだ。というわけで、いろいろいじくり回して実現してみた。いやあ、Emacs の正規表現は見にくくてたいへんだった。とりあえず、設定ファイルに書いた内容を書いておく。
;; text-adjust(load "text-adjust")(setq adaptive-fill-regexp "[ \t]*")(setq adaptive-fill-mode t)(setq text-adjust-rule-kutouten text-adjust-rule-kutouten-zkuten)(setq text-adjust-rule-space '( (("[])}\"'!?0-9a-zA-Z+]" " ?" "[、。,.!?」』】》’”]}〉)〕]") "") (("[、。,.「『【《‘“[{〈(〔]" " ?" "[[({\"'0-9a-zA-Z+]") "") (("\cj\|)\|\]\\|}" "" "[[{(\"'/!?0-9a-zA-Z+]") " ") (("[]})\"'/!?0-9a-zA-Z+]" "" "(\\|{\\|\\[\\|\\cj") " ") ))
(defvar text-adjust-mode-html-rule '( (("</[^>]*>" " ?" "[、。,.!?」』】》’”]}〉)〕]") "") (("[、。,.!?「『【《‘“[{〈(〔]" " ?" "<[^/>]*>") "") (("\\cj\\|)\\|\\]\\|}" "<[^/>]*>" "[[{(\"'0-9a-zA-Z+]") " {2}") (("\\cj\\|)\\|\\]\\|}" "</[^>]*>" "[[{(\"'!?0-9a-zA-Z+]") "{2} ") (("[]})/!?0-9a-zA-Z+]" "<[^/>]*>" "(\\|{\\|\\[\\|\\cj") " {2}") (("[]})\"'/0-9a-zA-Z+]" "</[^>]*>" "(\\|{\\|\\[\\|\\cj") "{2} ") ))
(setq text-adjust-mode-skip-rule (list (append '(sgml-mode) text-adjust-mode-html-rule) (append '(html-mode) text-adjust-mode-html-rule) (append '(xml-mode) text-adjust-mode-html-rule) (append '(nxml-mode) text-adjust-mode-html-rule) (append '(nxhtml-mode) text-adjust-mode-html-rule) (append '(mapae-mode) text-adjust-mode-html-rule) ))実は、この設定をする際、text-adjust-mode-skip-rule 内で HTML や XML を編集するモードでの設定を変数にして、いっぺんに設定しようとしたんだが、はまってしまった。それもたった一文字のミス。 text-adjust-mode-skip-rule にリストを与える際に、quote してしまっていたおかげで、append とかの関数が実行されないでいた。アポストロフィを消したら想像通りの動作になったorz このミスのせいでたぶん何時間もむだになった。まあ、こうやって調べてるときが楽しいのだが。こんなことも調べまくっていたから、Lisp についてそこそこ理解できた。いつもよくわからないでコードを見ていたけど、今は少しは理解できる。
前々から気づいていた点を反映したコードに直しておいた。
自分で使っていてミスに気づいて修正した。完璧にはできないな、こりゃ。個々人の中での規則が違うわけだから当然といえば当然なんだが。
コメント - 0 件
まだコメントは寄せられていません。
この記事につっこむ