]> git.eshelyaron.com Git - emacs.git/commitdiff
Decode utf-8 strings in mixed environments by default.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 5 Nov 2010 14:17:46 +0000 (15:17 +0100)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 5 Nov 2010 14:17:46 +0000 (15:17 +0100)
Done via the new `erc-coding-system-precedence' variable.

etc/NEWS
lisp/erc/ChangeLog
lisp/erc/erc-backend.el

index b0f6a76cc2f12edf7fde0d7f853ad0185bb6a493..2acca998e3af017fa76faad1cf8277406a546305 100644 (file)
--- 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.
 
index 49f039c51b9ea5eed354b1fd4c09a2e6d899a23f..1f27dbdb7f7999c527413610230a86f333e0a94a 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * erc-backend.el (erc-coding-system-precedence): New variable.
+       (erc-decode-string-from-target): Use it.
+
 2010-10-24  Julien Danjou  <julien@danjou.info>
 
        * erc-backend.el (erc-server-JOIN): Set the correct target list on join.
index 46e9d6c8c2cade55d48536a117feb28c21903033..3bc56989f4f1fe18f918a147da327fa836fda98f 100644 (file)
@@ -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