[ERC] решение проблем с русскими(интернаци ональными) никами, топиками и т.п.
Andrey Slusar <[email protected]> Sat, 09 Oct 2004 19:40:46 +0300
| Newsgroups | gmane.emacs.xemacs.user.russian |
|---|---|
| Organization | XEmacs User |
| Message-ID | <[email protected]> |
Hi,
вот патч на cvs-ный erc, если кто его не видел в erc-мейллисте,
исправляющий проблемы с русскими никами/топиками/нотисами в XEmacs.
Может кто-то его засабмитит в xemacs-patches? У меня просто знания
английского языка не хватает, а девелоперы erc его почему-то не
коммитят. Проверял на GNU Emacs 21.3 и XEmacs 21.4, 21.5 - работает
нормально.
--8<---------------cut here---------------start------------->8---
--- erc-backend.el 25 Sep 2004 13:03:24 -0000 1.1.1.2
+++ erc-backend.el 25 Sep 2004 13:36:35 -0000 1.2
@@ -151,8 +151,45 @@
(setf (erc-response.command-args msg)
(nreverse (erc-response.command-args msg)))
+ (erc-decode-parsed-server-response msg)
+
(erc-handle-parsed-server-response proc msg)))))
+(defun erc-decode-parsed-server-response (parsed-response)
+ "Decode a pre-parsed PARSED-RESPONSE before it can be handled.
+
+Decode `erc-response' acroding the car of it's `command-args' or if
+that is not a channel, use the `erc-default-coding-system' to
+decoding."
+ (let* ((args (erc-response.command-args parsed-response))
+ (first-arg (car args))
+ (matchp (string-match "^[#&].*" first-arg))
+ (decode-target (if matchp
+ (erc-decode-string-from-target first-arg nil)
+ nil))
+ (decoded-args ()))
+ (setf (erc-response.unparsed parsed-response)
+ (erc-decode-string-from-target
+ (erc-response.unparsed parsed-response)
+ decode-target))
+ (setf (erc-response.sender parsed-response)
+ (erc-decode-string-from-target
+ (erc-response.sender parsed-response)
+ decode-target))
+ (setf (erc-response.command parsed-response)
+ (erc-decode-string-from-target
+ (erc-response.command parsed-response)
+ decode-target))
+ (dolist (arg args nil)
+ (add-to-list 'decoded-args
+ (erc-decode-string-from-target arg decode-target)
+ t))
+ (setf (erc-response.command-args parsed-response) decoded-args)
+ (setf (erc-response.contents parsed-response)
+ (erc-decode-string-from-target
+ (erc-response.contents parsed-response)
+ decode-target))))
+
;; (defun erc-parse-server-response (process response)
;; "Parse a server PROCESS's IRC RESPONSE."
;; ;; FIXME: this function doesn't do the same as our original
@@ -604,8 +641,9 @@
(privp (erc-current-nick-p tgt))
s buffer
fnick
- (msg (erc-decode-string-from-target msg
- (if privp sender-spec tgt))))
+ ;; (msg (erc-decode-string-from-target msg
+;; (if privp sender-spec tgt)))
+ )
(setf (erc-response.contents parsed) msg)
(setq buffer (erc-get-buffer (if privp nick tgt) proc))
(when buffer
@@ -667,8 +705,9 @@
(define-erc-response-handler (TOPIC)
nil nil
(let* ((ch (first (erc-response.command-args parsed)))
- (topic (erc-trim-string (erc-decode-string-from-target
- (erc-response.contents parsed) ch)))
+ (topic (erc-trim-string ;; (erc-decode-string-from-target
+ (erc-response.contents parsed) ;; ch)
+ ))
(time (format-time-string "%T %m/%d/%y" (current-time))))
(multiple-value-bind (nick login host)
(erc-parse-user (erc-response.sender parsed))
--8<---------------cut here---------------end--------------->8---
----
Андрей Слюсар.
JID: [email protected]