emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/emacs-24 r108102: * lisp/net/rcirc.el (rcir


From: Leo Liu
Subject: [Emacs-diffs] /srv/bzr/emacs/emacs-24 r108102: * lisp/net/rcirc.el (rcirc-split-message): New function.
Date: Tue, 14 Aug 2012 01:22:42 +0800
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108102
fixes bug: http://debbugs.gnu.org/12051
committer: Leo Liu <address@hidden>
branch nick: emacs-24
timestamp: Tue 2012-08-14 01:22:42 +0800
message:
  * lisp/net/rcirc.el (rcirc-split-message): New function.
  (rcirc-send-message): Use it.
modified:
  lisp/ChangeLog
  lisp/net/rcirc.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-08-10 06:56:01 +0000
+++ b/lisp/ChangeLog    2012-08-13 17:22:42 +0000
@@ -1,3 +1,8 @@
+2012-08-13  Leo Liu  <address@hidden>
+
+       * net/rcirc.el (rcirc-split-message): New function.
+       (rcirc-send-message): Use it.  (Bug#12051)
+
 2012-08-10  Glenn Morris  <address@hidden>
 
        * emacs-lisp/copyright.el (copyright-update-directory): Logic fix.

=== modified file 'lisp/net/rcirc.el'
--- a/lisp/net/rcirc.el 2012-06-24 02:34:52 +0000
+++ b/lisp/net/rcirc.el 2012-08-13 17:22:42 +0000
@@ -794,26 +794,35 @@
 (defvar rcirc-max-message-length 420
   "Messages longer than this value will be split.")
 
+(defun rcirc-split-message (message)
+  "Split MESSAGE into chunks within `rcirc-max-message-length'."
+  (with-temp-buffer
+    (insert message)
+    (goto-char (point-min))
+    (let (result)
+      (while (not (eobp))
+       (goto-char (or (byte-to-position rcirc-max-message-length)
+                      (point-max)))
+       ;; max message length is 512 including CRLF
+       (while (and (not (bobp))
+                   (> (length
+                       (encode-coding-region (point-min) (point)
+                                             rcirc-encode-coding-system t))
+                      rcirc-max-message-length))
+         (forward-char -1))
+       (push (delete-and-extract-region (point-min) (point)) result))
+      (nreverse result))))
+
 (defun rcirc-send-message (process target message &optional noticep silent)
   "Send TARGET associated with PROCESS a privmsg with text MESSAGE.
 If NOTICEP is non-nil, send a notice instead of privmsg.
 If SILENT is non-nil, do not print the message in any irc buffer."
-  ;; max message length is 512 including CRLF
-  (let* ((response (if noticep "NOTICE" "PRIVMSG"))
-         (oversize (> (length message) rcirc-max-message-length))
-         (text (if oversize
-                   (substring message 0 rcirc-max-message-length)
-                 message))
-         (text (if (string= text "")
-                   " "
-                 text))
-         (more (if oversize
-                   (substring message rcirc-max-message-length))))
+  (let ((response (if noticep "NOTICE" "PRIVMSG")))
     (rcirc-get-buffer-create process target)
-    (rcirc-send-string process (concat response " " target " :" text))
-    (unless silent
-      (rcirc-print process (rcirc-nick process) response target text))
-    (when more (rcirc-send-message process target more noticep))))
+    (dolist (msg (rcirc-split-message message))
+      (rcirc-send-string process (concat response " " target " :" msg))
+      (unless silent
+       (rcirc-print process (rcirc-nick process) response target msg)))))
 
 (defvar rcirc-input-ring nil)
 (defvar rcirc-input-ring-index 0)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]