From: Lars Magne Ingebrigtsen Date: Fri, 5 Nov 2010 14:17:46 +0000 (+0100) Subject: Decode utf-8 strings in mixed environments by default. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~45^2~373 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5c0c0f77b0b3af28653a6a8e798f69d132425c0e;p=emacs.git Decode utf-8 strings in mixed environments by default. Done via the new `erc-coding-system-precedence' variable. --- diff --git a/etc/NEWS b/etc/NEWS index b0f6a76cc2f..2acca998e3a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -303,6 +303,11 @@ successful NickServ identification, or after `erc-autojoin-delay' seconds. The default value, 'ident, means to autojoin immediately after connecting. +*** New variable `erc-coding-system-precedence': If we use `undecided' +as the server coding system, this variable will then be consulted. +The default is to decode strings that can be decoded as utf-8 as +utf-8, and do the normal `undecided' decoding for the rest. + ** In ido-mode, C-v is no longer bound to ido-toggle-vc. The reason is that this interferes with cua-mode. diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 49f039c51b9..1f27dbdb7f7 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2010-11-05 Lars Magne Ingebrigtsen + + * erc-backend.el (erc-coding-system-precedence): New variable. + (erc-decode-string-from-target): Use it. + 2010-10-24 Julien Danjou * erc-backend.el (erc-server-JOIN): Set the correct target list on join. diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 46e9d6c8c2c..3bc56989f4f 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -324,6 +324,13 @@ Good luck." :type 'integer :group 'erc-server) +(defcustom erc-coding-system-precedence '(utf-8 undecided) + "List of coding systems to be preferred when receiving a string from the server. +This will only be consulted if the coding system in +`erc-server-coding-system' is `undecided'." + :group 'erc-server + :type '(repeat coding-system)) + (defcustom erc-server-coding-system (if (and (fboundp 'coding-system-p) (coding-system-p 'undecided) (coding-system-p 'utf-8)) @@ -334,7 +341,9 @@ This is either a coding system, a cons, a function, or nil. If a cons, the encoding system for outgoing text is in the car and the decoding system for incoming text is in the cdr. The most -interesting use for this is to put `undecided' in the cdr. +interesting use for this is to put `undecided' in the cdr. This +means that `erc-coding-system-precedence' will be consulted, and the +first match there will be used. If a function, it is called with the argument `target' and should return a coding system or a cons as described above. @@ -705,6 +714,14 @@ This is indicated by `erc-encoding-coding-alist', defaulting to the value of (let ((coding (erc-coding-system-for-target target))) (when (consp coding) (setq coding (cdr coding))) + (when (eq coding 'undecided) + (let ((codings (detect-coding-string str)) + (precedence erc-coding-system-precedence)) + (while (and precedence + (not (memq (car precedence) codings))) + (pop precedence)) + (when precedence + (setq coding (car precedence))))) (erc-decode-coding-string str coding))) ;; proposed name, not used by anything yet