[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
buffer-charset
From: |
Francesco Potorti` |
Subject: |
buffer-charset |
Date: |
Thu, 10 Oct 2002 15:34:24 +0200 |
Some time ago I advocated the use of buffer-charset.el (appended) to
ease users' problems when meeting strange characters in their buffers.
I was answered that this was not the right solution. However, unless
something better has come up in the meantme, I found it very useful in
the last month or so.
I'll give an example.
I take the file in
<ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-21.2.91.announce>
and save it into `ann'. Then
emacs -q
C-x m
C-c TAB ann RET
C-c C-c
I get a pop-up window proposing a bunch of "safe" coding systems.
Obviously I have no idea why ever I should change my coding system,
given that the file I included is apparently text only. So I do:
M-x load-library RET buffer-charset RET
M-x highlight-charset-characters RET
TAB
and I get a completion window with these possible charset to higlight:
ascii latin-iso8859-1
mule-unicode-0100-24ff
Obviously the last one is strange. So I select that to highlight, look
in the buffer and discover that there are two such characters, which I
can change or leave alone, if I know what I do (I don't).
In summary, I find this to be a really useful and comfortable user
interface for dealing with these problems, until a better one is
introduced.
===File ~/elisp/buffer-charset.el===========================
;;; buffer-charsets.el --- show usage of charsets in a buffer
;; Copyright (C) 2002 Joanna Pluta<address@hidden>.
;; Keywords: mule, hi-lock
;; This file is [not yet] part of GNU Emacs.
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; A copy of the GNU General Public License can be obtained from this
;; program's author (send electronic mail to <address@hidden>) or
;; from the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
;; MA 02139, USA.
;;; Commentary:
;; - display-buffer-charsets
;; Displays list of charsets used in current buffer.
;; - show-buffer-charset-characters C-x w c
;; Uses hi-lock-mode to highlight in current buffer characters
;; from chosen charset.
;; Creates and adds to local history (hi-lock-interactive-patterns)
;; regexpx matching characters from a given charset.
;; Characters from different charsets can be highlighted by
;; different colors according to chosen face.
;; - unhighlight-charset C-x w u
;; unhighlights characters from given charset
;;
;;; Code:
;;;
(require 'hi-lock)
(defun charset-chars-regexp (charset)
(let ((dim (charset-dimension charset))
(chars (charset-chars charset))
(plane (charset-iso-graphic-plane charset))
min
max)
(cond ((eq charset 'eight-bit-control)
(setq min 128 max 159))
((eq charset 'eight-bit-graphic)
(setq min 160 max 255))
(t
(if (= chars 94)
(setq min 33 max 126)
(setq min 32 max 127))
(or (= plane 0)
(setq min (+ min 128) max (+ max 128)))))
(if (= dim 1)
(format "[%c-%c]" (make-char charset min) (make-char charset max))
(format "[%c-%c]"
(make-char charset min min) (make-char charset max max)))))
(defun buffer-charsets ()
(find-charset-region (point-min) (point-max)))
(defun display-buffer-charsets ()
"Displays list of charsets used in current buffer"
(interactive)
(let ((charsets (buffer-charsets))
(curr-buf-name (current-buffer)))
(with-output-to-temp-buffer "*Buffer Charsets*"
(save-excursion
(set-buffer standard-output)
(insert
(format "Buffer %s uses the following charsets:\n" curr-buf-name))
(while charsets
(insert (symbol-name (car charsets)))
(insert "\n")
(setq charsets (cdr charsets)))))))
(defun charset-alist (charset-list)
(let ((l (charset-list))
charset-alist)
(while l
(setq charset-alist (cons (list (symbol-name (car l))) charset-alist))
(setq l (cdr l)))
charset-alist))
(defalias 'highlight-charset-characters 'show-buffer-charset-characters)
(defun show-buffer-charset-characters (charset face)
"Uses hi-lock-mode to highlight by face characters of charset."
(interactive
(let ((completion-ignore-case t))
(list
(completing-read "Charset:"
(charset-alist (buffer-charsets)) nil t nil nil)
(hi-lock-read-face-name))))
(highlight-regexp (charset-chars-regexp (intern charset)) face))
(defun unhighlight-charset (charset)
(interactive
(let ((completion-ignore-case t))
(list
(completing-read "Charset:"
(charset-alist (buffer-charsets)) nil t nil nil))))
(unhighlight-regexp (charset-chars-regexp (intern charset))))
(define-key hi-lock-map "\C-xwc" 'show-buffer-charset-characters)
(define-key hi-lock-map "\C-xwu" 'unhighlight-charset)
;;; mule-utils.el ends here
============================================================
- buffer-charset,
Francesco Potorti` <=