平衡点
2007/02/05
_ 文字コードチェック
大した事じゃないけど, バッファーに貼り付けた時に, 文字コードが異なる場所を色付するための関数.
;;;===========================================================================
;;; 文字コードのチェック
(defun my-check-encode-able (beg end)
(interactive "r")
(save-excursion
(let* (
(mycodingsystem buffer-file-coding-system)
mychar
mycharname
(mycount 0)
(mycharsetlist (coding-system-get mycodingsystem 'safe-charsets))
)
(goto-char beg) ;;;リージョンの先頭に移動
(while (< (point) end) ;;;リージョン内を順に調べる
(setq mychar (following-char))
(setq mycharsetname (char-charset mychar))
(if (equal 'composition mycharsetname)
(setq mycharsetname
(char-charset (string-to-char
(decompose-string (char-to-string mychar))))))
;;encode できない文字だったら色をつける
(if (or (equal mycharsetlist t) (member mycharsetname mycharsetlist))
nil ;;;encode できる時は何もしない。 encode できない時↓
(overlay-put (make-overlay (point) (1+ (point))) 'face 'region)
(setq mycount (1+ mycount)))
(forward-char) ;;;次の文字へ
)
;;結果の表示
(if (< 0 mycount)
(message "%s で encode できない文字が%d 個ありました。"
mycodingsystem mycount))
(if transient-mark-mode
(setq deactivate-mark t)) ;;;region を色つけしている時、色を解除
)))
みたいなの. どこで見つけたのか忘れたけど, Meadow memo かな?
[ツッコミを入れる]