The problem is mostly emoji, arriving in Twitter announcements from
Servus: I think that mosh and putty (and maybe Emacs) have different
ideas about character width, and the terminal display ends up being a
total mess.
(setq erc-nick "mdw"
erc-user-full-name "Mark Wooding")
(setq erc-nick "mdw"
erc-user-full-name "Mark Wooding")
-(if (not (memq 'truncate erc-modules))
- (setq erc-modules (cons 'truncate erc-modules)))
+(dolist (module '(replace truncate))
+ (if (not (memq module erc-modules))
+ (setq erc-modules (cons module erc-modules))))
(setq erc-fill-column 76
erc-timestamp-right-column 68
erc-fill-prefix " "
erc-max-buffer-size (* 60 3000))
(setq erc-fill-column 76
erc-timestamp-right-column 68
erc-fill-prefix " "
erc-max-buffer-size (* 60 3000))
+;; Filter out emoji, which cause severe display confusion.
+(defun mdw-replace-wide-characters (string)
+ (with-output-to-string
+ (let ((i 0)
+ (state nil))
+ (while (< i (length string))
+ (let ((ch (aref string i)))
+ (cond ((and (= (char-width ch) 1)
+ (not (or (<= #x1f200 ch #x1ffff))))
+ (when state (princ "*]") (setf state nil))
+ (write-char ch))
+ (t
+ (princ (if state "*" "[*"))
+ (princ (format "#x%x" ch))
+ (setf state t))))
+ (setq i (1+ i)))
+ (when state (princ "*]")))))
+
+(setq erc-replace-alist
+ '(("[[:nonascii:]+]" . mdw-replace-wide-characters)))
+
(setq erc-track-exclude-types '("NICK" "JOIN" "PART"))
(setq erc-auto-query 'buffer)
(setq erc-track-exclude-types '("NICK" "JOIN" "PART"))
(setq erc-auto-query 'buffer)