From: Leo Liu Date: Tue, 22 Mar 2011 15:38:40 +0000 (+0800) Subject: Use utf-8 if safe for writing to abbrev file X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~517 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4b978a677c2f684d7988cdd2dccb73d109c6bb1e;p=emacs.git Use utf-8 if safe for writing to abbrev file and fall back on emacs-mule or utf-8-emacs. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c90d4e5e3ba..6b7dd5a0463 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-03-22 Leo Liu + + * abbrev.el (write-abbrev-file): Use utf-8 for writing if it can + encode all chars in abbrevs; otherwise use emacs-mule or + utf-8-emacs. (Bug#8308) + 2011-03-22 Juanma Barranquero * simple.el (backward-delete-char-untabify): diff --git a/lisp/abbrev.el b/lisp/abbrev.el index fbca214a649..3b383a5f5b8 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -225,21 +225,29 @@ specified in `abbrev-file-name' is used." abbrev-file-name))) (or (and file (> (length file) 0)) (setq file abbrev-file-name)) - (let ((coding-system-for-write 'emacs-mule)) - (with-temp-file file - (insert ";;-*-coding: emacs-mule;-*-\n") + (let ((coding-system-for-write 'utf-8)) + (with-temp-buffer (dolist (table - ;; We sort the table in order to ease the automatic - ;; merging of different versions of the user's abbrevs - ;; file. This is useful, for example, for when the - ;; user keeps their home directory in a revision - ;; control system, and is therefore keeping multiple - ;; slightly-differing copies loosely synchronized. - (sort (copy-sequence abbrev-table-name-list) - (lambda (s1 s2) - (string< (symbol-name s1) - (symbol-name s2))))) - (insert-abbrev-table-description table nil))))) + ;; We sort the table in order to ease the automatic + ;; merging of different versions of the user's abbrevs + ;; file. This is useful, for example, for when the + ;; user keeps their home directory in a revision + ;; control system, and is therefore keeping multiple + ;; slightly-differing copies loosely synchronized. + (sort (copy-sequence abbrev-table-name-list) + (lambda (s1 s2) + (string< (symbol-name s1) + (symbol-name s2))))) + (insert-abbrev-table-description table nil)) + (when (unencodable-char-position (point-min) (point-max) 'utf-8) + (setq coding-system-for-write + (if (> emacs-major-version 24) + 'utf-8-emacs + ;; For compatibility with Emacs 22 (See Bug#8308) + 'emacs-mule))) + (goto-char (point-min)) + (insert (format ";;-*-coding: %s;-*-\n" coding-system-for-write)) + (write-region nil nil file nil 0)))) (defun add-mode-abbrev (arg) "Define mode-specific abbrev for last word(s) before point.