# HG changeset patch # User Miles Bader # Date 1139745773 0 # Node ID fe9073ac802e8a4d813af60662d7c7ef01641b04 # Parent d065089f984a8fa68e7f41fac020cc7cdc6301cc Revision: emacs@sv.gnu.org/emacs--devo--0--patch-73 Creator: Michael Olson Merge from erc--emacs--0 diff -r d065089f984a -r fe9073ac802e lisp/erc/ChangeLog --- a/lisp/erc/ChangeLog Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/ChangeLog Sun Feb 12 12:02:53 2006 +0000 @@ -1,3 +1,60 @@ +2006-02-11 Michael Olson + + * erc.el (erc-update-modules): Make some requirements shorter, so + that it's easier to see why they are needed. + + * erc-stamp.el (erc-timestamp-use-align-to): Renamed from + `erc-timestamp-right-align-by-pixel'. Set the default based on + whether we are in Emacs 22, and using X. Improve documentation. + (erc-insert-aligned): Remove calculation of offset, since + :align-to pos works after all. Unlike the previous solution, this + one works when erc-stamp.el is compiled. + (erc-insert-timestamp-right): Don't add length of string, and then + later remove its displayed width. This puts timestamps after + erc-fill-column when erc-timestamp-right-column is nil, rather + than before it. It also fixes a subtle bug. Remove use of + `current-window', since there is no variable by that name in + Emacs21, Emacs22, or XEmacs21 beta. Check to see whether + `erc-fill-column' is non-nil before using it. + +2006-02-11 Diane Murray + + * erc-list.el: Define `list' module which sets the alias + `erc-cmd-LIST' to `erc-list-channels' when enabled and + `erc-list-channels-simple' when disabled. + (erc-list-channels): Was `erc-cmd-LIST', renamed. + (erc-list-channels-simple): New function. + + * erc.el (erc-modules): Added `list' to enabled modules. Moved + customization options left in source code. + + * erc-menu.el (erc-menu-definition): Use `erc-list-channels'. + + * erc-spelling.el (define-erc-module): Make sure there's a buffer + before calling `with-current-buffer'. + +2006-02-10 Michael Olson + + * Makefile (debbuild): Split from debrelease. + (debrevision-mwolson): New rule that causes a Debian revision to + be built. + + * erc.el (erc-migrate-modules): Use a better algorithm. Thanks to + Johan Bockgård. + (erc-modules): Change use of 'pcomplete to 'completion. + +2006-02-09 Diane Murray + + * erc.el (erc-get-parsed-vector, erc-get-parsed-vector-nick) + (erc-get-parsed-vector-type): Moved here from erc-match.el. + + * erc-match.el (erc-get-parsed-vector, erc-get-parsed-vector-nick) + (erc-get-parsed-vector-type): Moved these functions to erc.el + since they can be useful outside of the text matching module. + + * erc-dcc.el, erc-stamp.el, erc-xdcc.el: Changed "Emacs IRC Client" + to "ERC". + 2006-02-07 Michael Olson * ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04, diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-dcc.el --- a/lisp/erc/erc-dcc.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-dcc.el Sun Feb 12 12:02:53 2006 +0000 @@ -29,7 +29,7 @@ ;;; Commentary: -;; This file provides Direct Client-to-Client support for the Emacs IRC Client. +;; This file provides Direct Client-to-Client support for ERC. ;; ;; The original code was taken from zenirc-dcc.el, heavily mangled and ;; rewritten to support the way how ERC operates. Server socket support diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-list.el --- a/lisp/erc/erc-list.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-list.el Sun Feb 12 12:02:53 2006 +0000 @@ -140,12 +140,19 @@ (setq truncate-lines t) (add-hook 'post-command-hook 'erc-chanlist-post-command-hook 'append 'local)) +;; Define module: +;;;###autoload (autoload 'erc-list-mode "erc-list") +(define-erc-module list nil + "List channels nicely in a separate buffer." + ((defalias 'erc-cmd-LIST 'erc-list-channels)) + ((defalias 'erc-cmd-LIST 'erc-list-channels-simple))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;###autoload -(defun erc-cmd-LIST (&rest channel) +(defun erc-list-channels (&rest channel) "Display a buffer containing a list of channels on the current server. Optional argument CHANNEL specifies a single channel to list (instead of every available channel)." @@ -163,6 +170,18 @@ (erc-chanlist channel)) t) +(defun erc-list-channels-simple (&optional line) + "Send the LIST command to the current server with optional channels LINE." + (when (string-match "^\\s-*\\(.*\\)$" line) + (let ((channels (match-string 1 line))) + (erc-log (format "cmd: LIST: %s" channels)) + (erc-server-send + (if (string= channels "") + "LIST" + (concat "LIST :" channels)))) + t)) +(put 'erc-list-channels-simple 'do-not-parse-args t) + ;;;###autoload (defun erc-chanlist (&optional channels) "Show a channel listing of the current server in a special mode. diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-match.el --- a/lisp/erc/erc-match.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-match.el Sun Feb 12 12:02:53 2006 +0000 @@ -428,24 +428,6 @@ (or (erc-list-match fools-beg msg) (erc-list-match fools-end msg)))) -(defun erc-get-parsed-vector (point) - "Return the whole parsed vector on POINT." - (get-text-property point 'erc-parsed)) - -(defun erc-get-parsed-vector-nick (vect) - "Return nickname in the parsed vector VECT." - (let* ((untreated-nick (and vect (erc-response.sender vect))) - (maybe-nick (when untreated-nick - (car (split-string untreated-nick "!"))))) - (when (and (not (null maybe-nick)) - (erc-is-valid-nick-p maybe-nick)) - untreated-nick))) - -(defun erc-get-parsed-vector-type (vect) - "Return message type in the parsed vector VECT." - (and vect - (erc-response.command vect))) - (defun erc-match-message () "Mark certain keywords in a region. Use this defun with `erc-insert-modify-hook'." diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-menu.el --- a/lisp/erc/erc-menu.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-menu.el Sun Feb 12 12:02:53 2006 +0000 @@ -36,8 +36,8 @@ ["Connect to server..." erc-select t] ["Disconnect from server..." erc-quit-server erc-server-connected] "-" - ["List channels..." erc-cmd-LIST - (and erc-server-connected (fboundp 'erc-cmd-LIST))] + ["List channels..." erc-list-channels + (and erc-server-connected (fboundp 'erc-list-channels))] ["Join channel..." erc-join-channel erc-server-connected] ["Start a query..." erc-cmd-QUERY erc-server-connected] "-" diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-spelling.el --- a/lisp/erc/erc-spelling.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-spelling.el Sun Feb 12 12:02:53 2006 +0000 @@ -41,11 +41,13 @@ ;; called AFTER the server buffer is initialized. ((add-hook 'erc-connect-pre-hook 'erc-spelling-init) (mapc (lambda (buffer) - (with-current-buffer buffer (erc-spelling-init))) + (when buffer + (with-current-buffer buffer (erc-spelling-init)))) (erc-buffer-list))) ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init) (mapc (lambda (buffer) - (with-current-buffer buffer (flyspell-mode 0))) + (when buffer + (with-current-buffer buffer (flyspell-mode 0)))) (erc-buffer-list)))) (defcustom erc-spelling-dictionaries nil diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-stamp.el --- a/lisp/erc/erc-stamp.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-stamp.el Sun Feb 12 12:02:53 2006 +0000 @@ -1,4 +1,4 @@ -;;; erc-stamp.el --- Timestamping for Emacs IRC CLient +;;; erc-stamp.el --- Timestamping for ERC messages ;; Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. @@ -180,11 +180,17 @@ (integer :tag "Column number") (const :tag "Unspecified" nil))) -(defcustom erc-timestamp-right-align-by-pixel nil - "*If non-nil, insert the right timestamp based on a pixel value. -This is needed when variable-width text precedes a timestamp. +(defcustom erc-timestamp-use-align-to (and (not (featurep 'xemacs)) + (>= emacs-major-version 22) + (eq window-system 'x)) + "*If non-nil, use the :align-to display property to align the stamp. +This gives better results when variable-width characters (like +Asian language characters and math symbols) precede a timestamp. Unfortunately, it only works in Emacs 22 and when using the X -Window System." +Window System. + +A side effect of enabling this is that there will only be one +space before a right timestamp in any saved logs." :group 'erc-stamp :type 'boolean) @@ -200,18 +206,15 @@ (insert s))) (defun erc-insert-aligned (string pos) - "Insert STRING based on a fraction of the width of the buffer. -Fraction is roughly (/ POS (window-width)). + "Insert STRING at the POSth column. -If `erc-timestamp-right-align-by-pixel' is nil, insert STRING at the -POSth column, without using pixel coordinates." - (if (not erc-timestamp-right-align-by-pixel) +If `erc-timestamp-use-align-to' is t, use the :align-to display +property to get to the POSth column." + (if (not erc-timestamp-use-align-to) (indent-to pos) (insert " ") - (let ((offset (floor (* (/ (1- pos) (window-width) 1.0) - (nth 2 (window-inside-pixel-edges)))))) - (put-text-property (1- (point)) (point) 'display - `(space :align-to (,offset))))) + (put-text-property (1- (point)) (point) 'display + (list 'space ':align-to pos))) (insert string)) (defun erc-insert-timestamp-right (string) @@ -238,30 +241,26 @@ (forward-char -1);; before the last newline (let* ((current-window (get-buffer-window (current-buffer))) (pos (cond - (erc-timestamp-right-column - (+ erc-timestamp-right-column (length string))) + (erc-timestamp-right-column erc-timestamp-right-column) ((and (boundp 'erc-fill-mode) erc-fill-mode - (boundp 'erc-fill-column)) + (boundp 'erc-fill-column) + erc-fill-column) (1+ erc-fill-column)) - (current-window - (- (window-width current-window) - 1)) (fill-column (1+ fill-column)) (t (- (window-width) + (string-width string) 1)))) (from (point)) (col (current-column)) indent) - ;; deal with variable-width characters - (setq pos (- pos (string-width string)) - ;; The following is a kludge that works with most - ;; international input. It is now only used to calculate - ;; whether to move to the next line before inserting a - ;; stamp. - col (+ col (ceiling (/ (- col (- (point) (point-at-bol))) 1.6)))) + ;; The following is a kludge used to calculate whether to move + ;; to the next line before inserting a stamp. It allows for + ;; some margin of error if what is displayed on the line differs + ;; from the number of characters on the line. + (setq col (+ col (ceiling (/ (- col (- (point) (point-at-bol))) 1.6)))) (if (< col pos) (erc-insert-aligned string pos) (newline) diff -r d065089f984a -r fe9073ac802e lisp/erc/erc-xdcc.el --- a/lisp/erc/erc-xdcc.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc-xdcc.el Sun Feb 12 12:02:53 2006 +0000 @@ -24,7 +24,7 @@ ;;; Commentary: -;; This file provides a very simple XDCC file server for the Emacs IRC Client. +;; This file provides a very simple XDCC file server for ERC. ;;; Code: diff -r d065089f984a -r fe9073ac802e lisp/erc/erc.el --- a/lisp/erc/erc.el Sun Feb 12 00:29:59 2006 +0000 +++ b/lisp/erc/erc.el Sun Feb 12 12:02:53 2006 +0000 @@ -1719,22 +1719,15 @@ (defun erc-migrate-modules (mods) "Migrate old names of ERC modules to new ones." ;; modify `transforms' to specify what needs to be changed - ;; each item is in the format '(new .old) - (let ((transforms '((pcomplete . completion))) - (modules (copy-alist mods))) - (dolist (transform transforms) - (let ((addp nil)) - (setq modules (erc-delete-if `(lambda (val) - (and (eq val ',(car transform)) - (setq addition t))) - modules)) - (when addp - (add-to-list 'modules (cdr transform))))) - (erc-delete-dups modules))) - -(defcustom erc-modules '(netsplit fill button match track pcomplete readonly + ;; each item is in the format '(old . new) + (let ((transforms '((pcomplete . completion)))) + (erc-delete-dups + (mapcar (lambda (m) (or (cdr (assoc m transforms)) m)) + mods)))) + +(defcustom erc-modules '(netsplit fill button match track completion readonly ring autojoin noncommands irccontrols - stamp) + stamp list) "A list of modules which erc should enable. If you set the value of this without using `customize' remember to call \(erc-update-modules) after you change it. When using `customize', modules @@ -1755,40 +1748,42 @@ ;; this test is for the case where erc hasn't been loaded yet (when (fboundp 'erc-update-modules) (erc-update-modules))) - :type '(set :greedy t - (const :tag "Set away status automatically" autoaway) - (const :tag "Join channels automatically" autojoin) - (const :tag "Integrate with Big Brother Database" bbdb) - (const :tag "Buttonize URLs, nicknames, and other text" button) - (const :tag "Wrap long lines" fill) - (const :tag "Highlight or remove IRC control characters" - irccontrols) - (const :tag "Save buffers in logs" log) - (const :tag "Highlight pals, fools, and other keywords" match) - (const :tag "Detect netsplits" netsplit) - (const :tag "Don't display non-IRC commands after evaluation" - noncommands) - (const :tag - "Notify when the online status of certain users changes" - notify) - (const :tag "Complete nicknames and commands (programmable)" - completion) - (const :tag "Complete nicknames and commands (old)" hecomplete) - (const :tag "Make displayed lines read-only" readonly) - (const :tag "Replace text in messages" replace) - (const :tag "Enable an input history" ring) - (const :tag "Scroll to the bottom of the buffer" scrolltobottom) - (const :tag "Identify to Nickserv (IRC Services) automatically" - services) - (const :tag "Convert smileys to pretty icons" smiley) - (const :tag "Play sounds when you receive CTCP SOUND requests" - sound) - (const :tag "Add timestamps to messages" stamp) - (const :tag "Check spelling" spelling) - (const :tag "Track channel activity in the mode-line" track) - (const :tag "Truncate buffers to a certain size" truncate) - (const :tag "Translate morse code in messages" unmorse) - (repeat :tag "Others" :inline t symbol)) + :type + '(set + :greedy t + (const :tag "Set away status automatically" autoaway) + (const :tag "Join channels automatically" autojoin) + (const :tag "Integrate with Big Brother Database" bbdb) + (const :tag "Buttonize URLs, nicknames, and other text" button) + (const :tag "Wrap long lines" fill) + (const :tag "Highlight or remove IRC control characters" + irccontrols) + (const :tag "Save buffers in logs" log) + (const :tag "Highlight pals, fools, and other keywords" match) + (const :tag "Detect netsplits" netsplit) + (const :tag "Don't display non-IRC commands after evaluation" + noncommands) + (const :tag + "Notify when the online status of certain users changes" + notify) + (const :tag "Complete nicknames and commands (programmable)" + completion) + (const :tag "Complete nicknames and commands (old)" hecomplete) + (const :tag "Make displayed lines read-only" readonly) + (const :tag "Replace text in messages" replace) + (const :tag "Enable an input history" ring) + (const :tag "Scroll to the bottom of the buffer" scrolltobottom) + (const :tag "Identify to Nickserv (IRC Services) automatically" + services) + (const :tag "Convert smileys to pretty icons" smiley) + (const :tag "Play sounds when you receive CTCP SOUND requests" + sound) + (const :tag "Add timestamps to messages" stamp) + (const :tag "Check spelling" spelling) + (const :tag "Track channel activity in the mode-line" track) + (const :tag "Truncate buffers to a certain size" truncate) + (const :tag "Translate morse code in messages" unmorse) + (repeat :tag "Others" :inline t symbol)) :group 'erc) (defun erc-update-modules () @@ -1799,14 +1794,11 @@ (cond ;; yuck. perhaps we should bring the filenames into sync? ((string= req "erc-completion") - (setq req "erc-pcomplete") - (setq mod 'completion)) + (setq req "erc-pcomplete")) ((string= req "erc-pcomplete") - (setq req "erc-pcomplete") (setq mod 'completion)) ((string= req "erc-autojoin") - (setq req "erc-join") - (setq mod 'autojoin))) + (setq req "erc-join"))) (condition-case nil (require (intern req)) (error nil)) @@ -6143,6 +6135,26 @@ (funcall erc-part-reason nil)) nil tgt)))) +;;; Dealing with `erc-parsed' + +(defun erc-get-parsed-vector (point) + "Return the whole parsed vector on POINT." + (get-text-property point 'erc-parsed)) + +(defun erc-get-parsed-vector-nick (vect) + "Return nickname in the parsed vector VECT." + (let* ((untreated-nick (and vect (erc-response.sender vect))) + (maybe-nick (when untreated-nick + (car (split-string untreated-nick "!"))))) + (when (and (not (null maybe-nick)) + (erc-is-valid-nick-p maybe-nick)) + untreated-nick))) + +(defun erc-get-parsed-vector-type (vect) + "Return message type in the parsed vector VECT." + (and vect + (erc-response.command vect))) + (provide 'erc) ;;; Deprecated. We might eventually stop requiring the goodies automatically.