Mercurial > emacs
changeset 74093:bc5d69739d5e
Merge from erc--emacs--22
Merge from my ERC Emacs 22 integration branch. The version is now "5.2
stable pre-release". This will probably be the last change to the
version of ERC in Emacs 22 before the release, pending any bugfixes. For
details on the changes, see the lisp/erc/ChangeLog file.
Note that ERC is now invoked with M-x erc, not M-x erc-select. If you
were using the old `erc' function programmatically, use `erc-open'
instead.
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-520
Creator: Michael Olson <mwolson@gnu.org>
author | Miles Bader <miles@gnu.org> |
---|---|
date | Mon, 20 Nov 2006 06:50:29 +0000 |
parents | b4cb60fd110d |
children | 1fee8f7da8cf |
files | etc/ChangeLog etc/ERC-NEWS etc/NEWS lisp/erc/ChangeLog lisp/erc/erc-autoaway.el lisp/erc/erc-backend.el lisp/erc/erc-compat.el lisp/erc/erc-dcc.el lisp/erc/erc-fill.el lisp/erc/erc-ibuffer.el lisp/erc/erc-log.el lisp/erc/erc-menu.el lisp/erc/erc-networks.el lisp/erc/erc-nicklist.el lisp/erc/erc-replace.el lisp/erc/erc-sound.el lisp/erc/erc-track.el lisp/erc/erc.el man/ChangeLog man/erc.texi |
diffstat | 20 files changed, 441 insertions(+), 182 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/ChangeLog Mon Nov 20 02:48:15 2006 +0000 +++ b/etc/ChangeLog Mon Nov 20 06:50:29 2006 +0000 @@ -1,3 +1,7 @@ +2006-11-20 Michael Olson <mwolson@gnu.org> + + * NEWS: Change M-x erc-select to M-x erc. + 2006-11-20 Sun Yijiang <sunyijiang@gmail.com> * TUTORIAL.cn: Updated. @@ -92,6 +96,11 @@ * PROBLEMS (are): Emacs compiled with Gtk+ crashes when closing a display (x-close-connection). +2006-09-03 Diane Murray <disumu@x3y2z1.net> + + * erc.texi (Getting Started, Connecting): Changed erc-select to + erc. + 2006-09-02 Juri Linkov <juri@jurta.org> * HELLO: Regroup Europe Non-ASCII examples by similar scripts.
--- a/etc/ERC-NEWS Mon Nov 20 02:48:15 2006 +0000 +++ b/etc/ERC-NEWS Mon Nov 20 06:50:29 2006 +0000 @@ -1,5 +1,21 @@ ERC NEWS -*- outline -*- +* Changes in ERC 5.2 (stable pre-release for Emacs 22) + +** M-x erc RET now starts ERC. +`erc-select' has been changed to `erc'. `erc-select' still remains as +an alias of `erc'. Likewise, `erc-select-ssl' has been renamed to +`erc-ssl' with `erc-select-ssl' as its alias. The function that was +known as `erc' is now `erc-open'. + +** Changes and additions to modules + +*** Channel tracking (erc-track.el) + +**** Use mouse-face and help-echo for channel names in the mode-line. +This helps people using a mouse know that they are buttons and can be +clicked on. + * Changes in ERC 5.1.4 ** Make find-function and find-variable work in Emacs 22 for
--- a/etc/NEWS Mon Nov 20 02:48:15 2006 +0000 +++ b/etc/NEWS Mon Nov 20 06:50:29 2006 +0000 @@ -1690,8 +1690,8 @@ To see what modules are available, type M-x customize-option erc-modules RET. -To start an IRC session, type M-x erc-select, and follow the prompts -for server, port, and nick. +To start an IRC session, type M-x erc, and follow the prompts for +server, port, and nick. --- ** Rcirc is now part of the Emacs distribution.
--- a/lisp/erc/ChangeLog Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/ChangeLog Mon Nov 20 06:50:29 2006 +0000 @@ -1,3 +1,28 @@ +2006-11-20 Michael Olson <mwolson@gnu.org> + + * erc.el (erc-version-string): Call this Version 5.2 stable + pre-release, since it diverges slightly from our 5.2 branch, in + that unstable features are not included. + (erc-update-modules): Display better error message when module not + found. + +2006-11-12 Michael Olson <mwolson@gnu.org> + + * erc-log.el: Save all log buffers when Emacs exits, in case + someone ignores the warning about open processes. Remove the + advice code in the commentary. + (erc-save-query-buffers): Docfix. + (erc-log-save-all-buffers): New function that saves all ERC + buffers to logs. + (erc-current-logfile): Fix bug in filename selection, where the + current buffer was erroneously being preferred over the given + buffer. + +2006-11-08 Michael Olson <mwolson@gnu.org> + + * erc.el (erc-string-to-port): Avoid error when a numerical port + is passed. Thanks to Zekeriya KOÇ for the report. + 2006-11-08 Łukasz Demianiuk <ldemianiuk@gmail.com> (tiny change) * erc.el (erc-header-line): Fix typo. @@ -10,11 +35,168 @@ * erc-autoaway.el (erc-autoaway-reestablish-idletimer): * erc-truncate.el (truncate): Fix typo in docstring. +2006-10-21 Michael Olson <mwolson@gnu.org> + + * erc.el (erc-iswitchb): Fix bug when hitting C-c C-b without + first loading iswitchb. Thanks to Leo for the report. + +2006-10-10 Michael Olson <mwolson@gnu.org> + + * erc.el (erc-default-port): Make the default be 6667 instead of + ircd. since Mac OS X apparently has problems with looking up that + port name. + + * erc-backend.el (353): Receive names after displaying the initial + message, instead of before. + +2006-10-05 Diane Murray <disumu@x3y2z1.net> + + * erc.el (erc-my-nick-face): New face. + (erc): Use FULL-NAME argument, not `erc-user-full-name'. This + fixes a bug where the :full-name argument passed to the function + was not respected. + (erc-format-my-nick): Use `erc-my-nick-face'. This should help + make it easier to find messages you sent in conversations when + `erc-show-my-nick' is non-nil. + (erc-compute-server): Doc fix. + +2006-09-11 Michael Olson <mwolson@gnu.org> + + * erc-nicklist.el (erc-nicklist-insert-contents): Add missing + parenthesis. Thanks to Stephan Stahl for the report. + +2006-09-10 Eric Hanchrow <offby1@blarg.net> + + * erc.el (erc-cmd-IGNORE): Prompt user if this might be a regexp + instead of a single user. + +2006-09-10 Michael Olson <mwolson@gnu.org> + + * erc.el (erc-generate-new-buffer-name): If this is a server + buffer and a process exists already, create a new buffer. + (erc-open): If the IRC session was continued, restore the old + point. Thanks to Stephan Stahl for the report. + (erc-member-ignore-case): Coding style tweak. + (erc-cmd-UNIGNORE): Quote the user before comparison. If we don't + find the user listed verbatim, try to match them against the list + using string-match. In this case, prompt as to whether the regexp + should be removed. + (erc-ignored-user-p): Remove CL-ism. + + * erc-autoaway.el (erc-autoaway-possibly-set-away): Check to see + whether we are already away. + + * erc-menu.el: Fix potential compiler warning. + +2006-09-07 Diane Murray <disumu@x3y2z1.net> + + * erc.el: Updated Commentary and URL. + (erc-iswitchb, erc-display-line, erc-set-modes, erc-update-modes) + (erc-arrange-session-in-multiple-windows): No need to check if + `erc-server-process' is bound. + (erc-server-buffer-live-p): Doc fix. + (erc-part-from-channel): Don't use any initial contents at prompt. + (erc-format-nick, erc-format-@nick): Doc fix. Use `when'. + (s367): Fixed to support only banmask and channel which is the + standard. Also, there's no reason to add a message to each banned + user entry trying to persuade the user to use /banlist instead of + /mode #channel +b. That part of the message was a little + confusing, anyways. + (s367-set-by): New catalog entry. The user who set the ban and + the time of ban seem to be specific to only certain servers such + as freenode. + + * erc-autoaway.el (erc-autoaway-idletimer): Doc fix. + + * erc-backend.el (erc-server-process-alive): No need to check if + `erc-server-process' is bound. + (367): Use s367 or s367-set-by where appropriate. + + * erc-compat.el: Fixed URL. + + * erc-dcc.el: Updated copyright years. Added Usage section. + Changed supported Emacs version number from 21.3.50 to 22 in + Commentary. + + * erc-ibuffer.el (erc-server-name, erc-target, erc-away): No need + to check if `erc-server-process' is bound. + + * erc-nicklist.el: Added to the Commentary section an explanation + that `erc-nicklist-quit' should be called from within the nicklist + buffer. Set file coding to utf-8 so a contributor's name is + displayed correctly. + (erc-nicklist-icons-directory): Use customize type directory + instead of string. + (erc-nicklist-insert-contents): Set bbdb-nick to an empty string + if it wasn't found. This fixes a bug where an error would occur + when using `string=' on bbdb-nick if it was nil. + + * erc-replace.el: Removed URL from file information since it + doesn't exist. + + * erc-sound.el: Updated copyright years. Fixed Commentary and + added Usage section. + (define-erc-module): Add and remove `erc-ctcp-query-SOUND' to + `erc-ctcp-query-SOUND-hook' here. Removed the keybinding + definitions. + (erc-play-sound, erc-default-sound, erc-cmd-SOUND) + (erc-ctcp-query-SOUND): Doc fix. + (erc-play-command): Removed, not necessary anymore. + (erc-ctcp-query-SOUND-hook): Set to nil as default. Moved up + higher in code, added docstring. + (erc-play-sound): Use `play-sound-file'. It exists in GNU Emacs + as well since version 21 or earlier. Removed commented-out older + version of function. + + * NEWS: Fixed formatting, added channel tracking change. + +2006-09-03 Diane Murray <disumu@x3y2z1.net> + + * erc.el: M-x erc RET can now be used to start ERC. + (erc-open): Renamed from `erc'. + (erc-before-connect): Change erc-select to erc. + (erc): Renamed from `erc-select'. Use `erc-open'. + (erc-select): Defined as alias of `erc'. + (erc-ssl): Renamed from `erc-select-ssl'. Use `erc'. + (erc-select-ssl): Defined as alias of `erc-ssl'. + (erc-cmd-SERVER): Use `erc'. + (erc-query, erc-handle-irc-url): Use `erc-open'. + + * erc-backend.el (erc-process-sentinel-1, JOIN): Use `erc-open'. + + * erc-menu.el (erc-menu-definition): Use `erc'. + + * erc-networks.el: Updated copyright years. + (erc-server-select): Use keyword arguments when calling `erc'. + + * erc.texi (Getting Started, Connecting): Changed erc-select to + erc. + + * NEWS: Added note about these changes. + +2006-08-21 Diane Murray <disumu@x3y2z1.net> + + * erc-track.el (erc-track-mode-line-mouse-face): New variable. + (erc-make-mode-line-buffer-name): Add help-echo and mouse-face + properties to channel name. + +2006-08-14 Diane Murray <disumu@x3y2z1.net> + + * erc-menu.el: Updated copyright years. Removed EmacsWiki URL. + (erc-menu-definition): Name the menu "ERC" instead of "IRC" to + avoid confusion with rcirc and other clients. + 2006-08-13 Romain Francoise <romain@orebokech.com> * erc-match.el (erc-log-matches-make-buffer): End `y-or-n-p' prompt with a space. +2006-08-11 Michael Olson <mwolson@gnu.org> + + * erc-fill.el (erc-fill): Skip any initial empty lines so that we + avoid errors when inserting disconnect messages and other messages + that begin with newlines. + 2006-08-07 Michael Olson <mwolson@gnu.org> * erc-backend.el (erc-process-sentinel-1): Use erc-display-message @@ -32,6 +214,9 @@ 2006-08-06 Michael Olson <mwolson@gnu.org> + * erc-backend.el (erc-server-send-queue): Update from Circe + version of this function. + * erc.el (erc-arrange-session-in-multiple-windows): Fix bug with multi-tty Emacs. (erc-select-startup-file): Fix bug introduced by recent change.
--- a/lisp/erc/erc-autoaway.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-autoaway.el Mon Nov 20 06:50:29 2006 +0000 @@ -38,7 +38,7 @@ (defvar erc-autoaway-idletimer nil "The Emacs idletimer. -This is only used when `erc-autoaway-use-emacs-idle' is non-nil.") +This is only used when `erc-autoaway-idle-method' is set to 'emacs.") ;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway") (define-erc-module autoaway nil @@ -206,6 +206,7 @@ ;; this function is called from `erc-timer-hook', which is called ;; whenever the server sends something to the client. (when (and erc-auto-set-away + (not erc-autoaway-caused-away) (not (erc-away-p))) (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time current-time)))
--- a/lisp/erc/erc-backend.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-backend.el Mon Nov 20 06:50:29 2006 +0000 @@ -416,7 +416,7 @@ (defun erc-server-process-alive () "Return non-nil when `erc-server-process' is open or running." - (and (boundp 'erc-server-process) + (and erc-server-process (processp erc-server-process) (memq (process-status erc-server-process) '(run open)))) @@ -512,8 +512,8 @@ (not (string-match "^failed with code 111" event))) ;; Yuck, this should perhaps funcall ;; erc-server-reconnect-function with no args - (erc erc-session-server erc-session-port erc-server-current-nick - erc-session-user-full-name t erc-session-password) + (erc-open erc-session-server erc-session-port erc-server-current-nick + erc-session-user-full-name t erc-session-password) ;; terminate, do not reconnect (erc-display-message nil 'error (current-buffer) 'terminated ?e event)))) @@ -673,7 +673,8 @@ (error nil))))) (when erc-server-flood-queue (setq erc-server-flood-timer - (run-at-time 2 nil #'erc-server-send-queue buffer)))))) + (run-at-time (+ 0.2 erc-server-flood-penalty) + nil #'erc-server-send-queue buffer)))))) (defun erc-message (message-command line &optional force) "Send LINE to the server as a privmsg or a notice. @@ -1038,11 +1039,11 @@ (let* ((str (cond ;; If I have joined a channel ((erc-current-nick-p nick) - (setq buffer (erc erc-session-server erc-session-port - nick erc-session-user-full-name - nil nil - erc-default-recipients chnl - erc-server-process)) + (setq buffer (erc-open erc-session-server erc-session-port + nick erc-session-user-full-name + nil nil + erc-default-recipients chnl + erc-server-process)) (when buffer (set-buffer buffer) (erc-add-default-channel chnl) @@ -1583,11 +1584,11 @@ "NAMES notice." nil (let ((channel (third (erc-response.command-args parsed))) (users (erc-response.contents parsed))) - (erc-with-buffer (channel proc) - (erc-channel-receive-names users)) (erc-display-message parsed 'notice (or (erc-get-buffer channel proc) 'active) - 's353 ?c channel ?u users))) + 's353 ?c channel ?u users) + (erc-with-buffer (channel proc) + (erc-channel-receive-names users)))) (define-erc-response-handler (366) "End of NAMES." nil @@ -1598,11 +1599,16 @@ "Channel ban list entries" nil (multiple-value-bind (channel banmask setter time) (cdr (erc-response.command-args parsed)) - (erc-display-message parsed 'notice 'active 's367 - ?c channel - ?b banmask - ?s setter - ?t time))) + ;; setter and time are not standard + (if setter + (erc-display-message parsed 'notice 'active 's367-set-by + ?c channel + ?b banmask + ?s setter + ?t (or time "")) + (erc-display-message parsed 'notice 'active 's367 + ?c channel + ?b banmask)))) (define-erc-response-handler (368) "End of channel ban list" nil
--- a/lisp/erc/erc-compat.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-compat.el Mon Nov 20 06:50:29 2006 +0000 @@ -3,7 +3,7 @@ ;; Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. ;; Author: Alex Schroeder <alex@gnu.org> -;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?EmacsIRCClient +;; URL: http://www.emacswiki.org/cgi-bin/wiki/ERC ;; This file is part of GNU Emacs.
--- a/lisp/erc/erc-dcc.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-dcc.el Mon Nov 20 06:50:29 2006 +0000 @@ -35,7 +35,9 @@ ;; rewritten to support the way how ERC operates. Server socket support ;; was added for DCC CHAT and SEND afterwards. Thanks ;; to the original authors for their work. -;; + +;;; Usage: + ;; To use this file, put ;; (require 'erc-dcc) ;; in your .emacs. @@ -49,7 +51,7 @@ ;; /dcc send nick file - Offer DCC SEND to nick ;; ;; Please note that offering DCC connections (offering chats and sending -;; files) is only supported with Emacs 21.3.50 (CVS). +;; files) is only supported with Emacs 22. ;;; Code:
--- a/lisp/erc/erc-fill.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-fill.el Mon Nov 20 06:50:29 2006 +0000 @@ -122,7 +122,15 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'." (unless (erc-string-invisible-p (buffer-substring (point-min) (point-max))) (when erc-fill-function - (funcall erc-fill-function)))) + ;; skip initial empty lines + (goto-char (point-min)) + (save-match-data + (while (and (looking-at "[ \t\n]*$") + (= (forward-line 1) 0)))) + (unless (eobp) + (save-restriction + (narrow-to-region (point) (point-max)) + (funcall erc-fill-function)))))) (defun erc-fill-static () "Fills a text such that messages start at column `erc-fill-static-center'."
--- a/lisp/erc/erc-ibuffer.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-ibuffer.el Mon Nov 20 06:50:29 2006 +0000 @@ -91,14 +91,14 @@ " ")) (define-ibuffer-column erc-server-name (:name "Server") - (if (and (boundp 'erc-server-process) (processp erc-server-process)) + (if (and erc-server-process (processp erc-server-process)) (with-current-buffer (process-buffer erc-server-process) (or erc-server-announced-name erc-session-server)) "")) (define-ibuffer-column erc-target (:name "Target") (if (eq major-mode 'erc-mode) - (cond ((and (boundp 'erc-server-process) (processp erc-server-process) + (cond ((and erc-server-process (processp erc-server-process) (eq (current-buffer) (process-buffer erc-server-process))) (concat "Server " erc-session-server ":" (erc-port-to-string erc-session-port))) @@ -125,7 +125,7 @@ "")) (define-ibuffer-column erc-away (:name "A") - (if (and (boundp 'erc-server-process) + (if (and erc-server-process (processp erc-server-process) (with-current-buffer (process-buffer erc-server-process) erc-away))
--- a/lisp/erc/erc-log.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-log.el Mon Nov 20 06:50:29 2006 +0000 @@ -43,14 +43,6 @@ ;; ;; (require 'erc-log) ;; -;; You may optionally want the following code, to save all ERC buffers -;; without confirmation when exiting emacs: -;; -;; (defadvice save-buffers-kill-emacs (before save-logs (&rest args) activate) -;; (save-some-buffers t (lambda () -;; (when (and (eq major-mode 'erc-mode) -;; (not (null buffer-file-name))) t)))) -;; ;; If you only want to save logs for some buffers, customise the ;; variable `erc-enable-logging'. @@ -213,6 +205,7 @@ (add-hook 'erc-send-post-hook 'erc-save-buffer-in-logs)) (add-hook 'erc-kill-buffer-hook 'erc-save-buffer-in-logs) (add-hook 'erc-kill-channel-hook 'erc-save-buffer-in-logs) + (add-hook 'kill-emacs-hook 'erc-log-save-all-buffers) (add-hook 'erc-quit-hook 'erc-conditional-save-queries) (add-hook 'erc-part-hook 'erc-conditional-save-buffer) ;; append, so that 'erc-initialize-log-marker runs first @@ -225,6 +218,7 @@ (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs) (remove-hook 'erc-kill-buffer-hook 'erc-save-buffer-in-logs) (remove-hook 'erc-kill-channel-hook 'erc-save-buffer-in-logs) + (remove-hook 'kill-emacs-hook 'erc-log-save-all-buffers) (remove-hook 'erc-quit-hook 'erc-conditional-save-queries) (remove-hook 'erc-part-hook 'erc-conditional-save-buffer) (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging) @@ -263,7 +257,7 @@ (not (erc-server-buffer-p))))) (defun erc-save-query-buffers (process) - "Save all buffers process." + "Save all buffers of the given PROCESS." (erc-with-all-buffers-of-server process nil (erc-save-buffer-in-logs))) @@ -278,6 +272,12 @@ (when erc-save-queries-on-quit (erc-save-query-buffers process))) +;; Make sure that logs get saved, even if someone overrides the active +;; process prompt for a quick exit from Emacs +(defun erc-log-save-all-buffers () + (dolist (buffer (erc-buffer-list)) + (erc-save-buffer-in-logs buffer))) + ;;;###autoload (defun erc-logging-enabled (&optional buffer) "Return non-nil if logging is enabled for BUFFER. @@ -309,7 +309,7 @@ (erc-log-standardize-name (funcall erc-generate-log-file-name-function (or buffer (current-buffer)) - (or (erc-default-target) (buffer-name buffer)) + (or (buffer-name buffer) (erc-default-target)) (erc-current-nick) erc-session-server erc-session-port)) erc-log-channels-directory))
--- a/lisp/erc/erc-menu.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-menu.el Mon Nov 20 06:50:29 2006 +0000 @@ -4,7 +4,6 @@ ;; Author: Mario Lang <mlang@delysid.org> ;; Keywords: comm, processes, menu -;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcMenu ;; This file is part of GNU Emacs. @@ -29,11 +28,12 @@ ;;; Code: +;(require 'erc) (require 'easymenu) (defvar erc-menu-definition - (list "IRC" - ["Connect to server..." erc-select t] + (list "ERC" + ["Connect to server..." erc t] ["Disconnect from server..." erc-quit-server erc-server-connected] "-" ["List channels..." erc-list-channels
--- a/lisp/erc/erc-networks.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-networks.el Mon Nov 20 06:50:29 2006 +0000 @@ -809,7 +809,7 @@ (erc-ports-list (nth 3 srv)) (list (nth 3 srv)))) (port (nth (random (length ports)) ports))) - (erc host port erc-nick erc-user-full-name t))) + (erc :server host :port port))) ;;; The following experimental ;; It does not work yet, help me with it if you
--- a/lisp/erc/erc-nicklist.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-nicklist.el Mon Nov 20 06:50:29 2006 +0000 @@ -29,7 +29,7 @@ ;; This provides a minimal mIRC style nicklist buffer for ERC. To ;; activate, do M-x erc-nicklist RET in the channel buffer you want ;; the nicklist to appear for. To close and quit the nicklist -;; buffer, do M-x erc-nicklist-quit RET. +;; buffer, do M-x erc-nicklist-quit RET from within the nicklist buffer. ;; ;; TODO: ;; o Somehow associate nicklist windows with channel windows so they @@ -97,7 +97,7 @@ "*Directory of the PNG files for chat icons. Icons are displayed if `erc-nicklist-use-icons' is non-nil." :group 'erc-nicklist - :type 'string) + :type 'directory) (defcustom erc-nicklist-voiced-position 'bottom "*Position of voiced nicks in the nicklist. @@ -207,7 +207,9 @@ (channels (erc-server-user-buffers server-user)) (op (erc-channel-user-op channel-user)) (voice (erc-channel-user-voice channel-user)) - (bbdb-nick (erc-nicklist-search-for-nick (concat login "@" host))) + (bbdb-nick (or (erc-nicklist-search-for-nick + (concat login "@" host)) + "")) (away-status (if voice "" "\n(Away)")) (balloon-text (concat bbdb-nick (if (string= "" bbdb-nick) "" "\n") @@ -406,6 +408,7 @@ ;; Local Variables: ;; indent-tabs-mode: t ;; tab-width: 8 +;; coding: utf-8 ;; End: ;; arch-tag: db37a256-87a7-4544-bd90-e5f16c9f5ca5
--- a/lisp/erc/erc-replace.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-replace.el Mon Nov 20 06:50:29 2006 +0000 @@ -5,7 +5,6 @@ ;; Author: Andreas Fuchs <asf@void.at> ;; Maintainer: Mario Lang (mlang@delysid.org) ;; Keywords: IRC, client, Internet -;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcReplace ;; This file is part of GNU Emacs.
--- a/lisp/erc/erc-sound.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-sound.el Mon Nov 20 06:50:29 2006 +0000 @@ -21,9 +21,26 @@ ;;; Commentary: -;; This used to be in erc.el, I (Jorgen) just extracted it from there -;; and put it in this file. Bugs and features are those of the -;; original author. +;; Play sounds when users send you CTCP SOUND messages. + +;; This file also defines the command /sound so that you can send +;; sound requests to other users. + +;;; Usage: + +;; Add the following to your .emacs if you want to play sounds. +;; +;; (require 'erc-soud) +;; (erc-sound-enable) +;; +;; To send requests to other users from within query buffers, type the +;; following: +;; +;; /sound filename optional-message-text +;; +;; You can also type the following: +;; +;; /ctcp nickname sound filename optional-message ;;; Code: @@ -34,9 +51,11 @@ "In ERC sound mode, the client will respond to CTCP SOUND requests and play sound files as requested." ;; Enable: - ((define-key erc-mode-map "\C-c\C-s" 'erc-toggle-sound)) + ((add-hook 'erc-ctcp-query-SOUND-hook 'erc-ctcp-query-SOUND) + (define-key erc-mode-map "\C-c\C-s" 'erc-toggle-sound)) ;; Disable: - ((define-key erc-mode-map "\C-c\C-s" 'undefined))) + ((remove-hook 'erc-ctcp-query-SOUND-hook 'erc-ctcp-query-SOUND) + (define-key erc-mode-map "\C-c\C-s" 'undefined))) (erc-define-catalog-entry 'english 'CTCP-SOUND "%n (%u@%h) plays %s:%m") @@ -45,7 +64,7 @@ :group 'erc) (defcustom erc-play-sound t - "*Play sound on SOUND ctcp requests (used in ICQ chat)." + "*Play sounds when you receive CTCP SOUND requests." :group 'erc-sound :type 'boolean) @@ -55,18 +74,22 @@ :type '(repeat directory)) (defcustom erc-default-sound nil - "Play this sound if the requested file was not found." + "Play this sound if the requested file was not found. +If this is set to nil or the file doesn't exist a beep will sound." :group 'erc-sound :type '(choice (const nil) file)) -(defcustom erc-play-command "play" - "Command for playing sound samples." - :group 'erc-sound - :type 'string) +(defvar erc-ctcp-query-SOUND-hook nil + "Hook to run after receiving a CTCP SOUND request.") (defun erc-cmd-SOUND (line &optional force) - "Play the sound given in LINE." + "Send a CTCP SOUND message to the default target. +If `erc-play-sound' is non-nil, play the sound as well. + +/sound filename optional-message-text + +LINE is the text entered, including the command." (cond ((string-match "^\\s-*\\(\\S-+\\)\\(\\s-.*\\)?$" line) (let ((file (match-string 1 line)) @@ -84,8 +107,8 @@ t)) (t nil))) -(defvar erc-ctcp-query-SOUND-hook '(erc-ctcp-query-SOUND)) (defun erc-ctcp-query-SOUND (proc nick login host to msg) + "Display a CTCP SOUND message and play sound if `erc-play-sound' is non-nil." (when (string-match "^SOUND\\s-+\\(\\S-+\\)\\(\\(\\s-+.*\\)\\|\\(\\s-*\\)\\)$" msg) (let ((sound (match-string 1 msg)) (comment (match-string 2 msg))) @@ -96,42 +119,16 @@ nil) (defun erc-play-sound (file) - "Plays a sound file located in one of the directories in `erc-sound-path' -with a command `erc-play-command'." + "Play a sound file located in one of the directories in `erc-sound-path'. +See also `play-sound-file'." (let ((filepath (erc-find-file file erc-sound-path))) (if (and (not filepath) erc-default-sound) (setq filepath erc-default-sound)) (cond ((and filepath (file-exists-p filepath)) - (if (and (fboundp 'device-sound-enabled-p) - (device-sound-enabled-p)) - ; For XEmacs - (play-sound-file filepath) -; (start-process "erc-sound" nil erc-play-command filepath) - (start-process "erc-sound" nil "/bin/tcsh" "-c" - (concat erc-play-command " " filepath)))) + (play-sound-file filepath)) (t (beep))) (erc-log (format "Playing sound file %S" filepath)))) -;(defun erc-play-sound (file) -; "Plays a sound file located in one of the directories in `erc-sound-path' -; with a command `erc-play-command'." -; (let ((filepath nil) -; (paths erc-sound-path)) -; (while (and paths -; (progn (setq filepath (expand-file-name file (car paths))) -; (not (file-exists-p filepath)))) -; (setq paths (cdr paths))) -; (if (and (not (and filepath (file-exists-p filepath))) -; erc-default-sound) -; (setq filepath erc-default-sound)) -; (cond ((and filepath (file-exists-p filepath)) -;; (start-process "erc-sound" nil erc-play-command filepath) -; (start-process "erc-sound" nil "/bin/tcsh" "-c" -; (concat erc-play-command " " filepath)) -; ) -; (t (beep))) -; (erc-log (format "Playing sound file %S" filepath)))) - (defun erc-toggle-sound (&optional arg) "Toggles playing sounds on and off. With positive argument, turns them on. With any other argument turns sounds off."
--- a/lisp/erc/erc-track.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc-track.el Mon Nov 20 06:50:29 2006 +0000 @@ -580,6 +580,11 @@ (erc-modified-channels-display) (force-mode-line-update t)))) +(defvar erc-track-mouse-face (if (featurep 'xemacs) + 'modeline-mousable + 'mode-line-highlight) + "The face to use when mouse is over channel names in the mode line.") + (defun erc-make-mode-line-buffer-name (string buffer &optional faces count) "Return STRING as a button that switches to BUFFER when clicked. If FACES are provided, color STRING with them." @@ -609,6 +614,12 @@ (posn-window (event-start e))) (switch-to-buffer-other-window ,buffer)))) (put-text-property 0 (length name) 'local-map map name) + (put-text-property + 0 (length name) + 'help-echo (concat "mouse-2: switch to buffer, " + "mouse-3: switch to buffer in other window") + name) + (put-text-property 0 (length name) 'mouse-face erc-track-mouse-face name) (when (and faces erc-track-use-faces) (put-text-property 0 (length name) 'face faces name)) name))
--- a/lisp/erc/erc.el Mon Nov 20 02:48:15 2006 +0000 +++ b/lisp/erc/erc.el Mon Nov 20 06:50:29 2006 +0000 @@ -33,11 +33,11 @@ ;;; Commentary: -;; ERC is an IRC client for Emacs. +;; ERC is a powerful, modular, and extensible IRC client for Emacs. ;; For more information, see the following URLs: ;; * http://sv.gnu.org/projects/erc/ -;; * http://www.emacswiki.org/cgi-bin/wiki.pl?EmacsIRCClient +;; * http://www.emacswiki.org/cgi-bin/wiki/ERC ;; As of 2006-06-13, ERC development is now hosted on Savannah ;; (http://sv.gnu.org/projects/erc). I invite everyone who wants to @@ -57,17 +57,17 @@ ;; To connect to an IRC server, do ;; -;; M-x erc-select RET +;; M-x erc RET ;; ;; After you are connected to a server, you can use C-h m or have a look at -;; the IRC menu. +;; the ERC menu. ;;; History: ;; ;;; Code: -(defconst erc-version-string "Version 5.1.4" +(defconst erc-version-string "Version 5.2 stable pre-release" "ERC version. This is used by function `erc-version'.") (eval-when-compile (require 'cl)) @@ -1164,6 +1164,12 @@ "ERC face for errors." :group 'erc-faces) +;; same default color as `erc-input-face' +(defface erc-my-nick-face '((t (:bold t :foreground "brown"))) + "ERC face for your current nickname in messages sent by you. +See also `erc-show-my-nick'." + :group 'erc-faces) + (defface erc-nick-default-face '((t (:bold t))) "ERC nickname default face." :group 'erc-faces) @@ -1316,8 +1322,7 @@ (process-buffer erc-server-process))) (defun erc-server-buffer-live-p () - "Return t if the buffer associated with `erc-server-process' -has not been killed." + "Return t if the server buffer has not been killed." (and (processp erc-server-process) (buffer-live-p (process-buffer erc-server-process)))) @@ -1433,7 +1438,7 @@ (defconst erc-default-server "irc.freenode.net" "IRC server to use if it cannot be detected otherwise.") -(defconst erc-default-port "ircd" +(defconst erc-default-port "6667" "IRC port to use if it cannot be detected otherwise.") (defcustom erc-join-buffer 'buffer @@ -1534,7 +1539,7 @@ (or target (with-current-buffer (get-buffer buf-name) (and (erc-server-buffer-p) - (not erc-server-connected)))) + (not (erc-server-process-alive))))) (with-current-buffer (get-buffer buf-name) (and (string= erc-session-server server) (erc-port-equal erc-session-port port)))) @@ -1555,7 +1560,8 @@ (catch 'result (while list (if (string= string (erc-downcase (car list))) - (throw 'result list) (setq list (cdr list)))))) + (throw 'result list) + (setq list (cdr list)))))) (defmacro erc-with-buffer (spec &rest body) "Execute BODY in the buffer associated with SPEC. @@ -1663,7 +1669,7 @@ Due to some yet unresolved reason, global function `iswitchb-mode' needs to be active for this function to work." (interactive "P") - (eval-when-compile + (eval-and-compile (require 'iswitchb)) (let ((iswitchb-make-buflist-hook (lambda () @@ -1671,8 +1677,7 @@ (mapcar 'buffer-name (erc-buffer-list nil - (when (and arg (boundp 'erc-server-process)) - erc-server-process))))))) + (when arg erc-server-process))))))) (switch-to-buffer (iswitchb-read-buffer "Switch-to: " @@ -1833,9 +1838,10 @@ (condition-case nil (require (intern req)) (error nil)) - (funcall (or (intern-soft (concat "erc-" (symbol-name mod) "-mode")) - (error "`%s' is not a known ERC module" mod)) - 1)))) + (let ((sym (intern-soft (concat "erc-" (symbol-name mod) "-mode")))) + (if (fboundp sym) + (funcall sym 1) + (error "`%s' is not a known ERC module" mod)))))) (defun erc-setup-buffer (buffer) "Consults `erc-join-buffer' to find out how to display `BUFFER'." @@ -1861,8 +1867,8 @@ (display-buffer buffer) (switch-to-buffer buffer))))) -(defun erc (&optional server port nick full-name - connect passwd tgt-list channel process) +(defun erc-open (&optional server port nick full-name + connect passwd tgt-list channel process) "ERC is a powerful, modular, and extensible IRC client. Connect to SERVER on PORT as NICK with FULL-NAME. @@ -1881,6 +1887,7 @@ (connected-p (unless connect erc-server-connected)) (buffer (erc-get-buffer-create server port channel)) (old-buffer (current-buffer)) + (old-point (point)) continued-session) (erc-update-modules) (set-buffer buffer) @@ -1959,7 +1966,7 @@ (insert "\n")) (set-marker (process-mark erc-server-process) (point)) (if continued-session - (goto-char (point-max)) + (goto-char old-point) (set-marker erc-insert-marker (point)) (erc-display-prompt) (goto-char (point-max))) @@ -2007,7 +2014,7 @@ (defcustom erc-before-connect nil "Hook called before connecting to a server. -This hook gets executed before `erc-select' actually invokes `erc-mode' +This hook gets executed before `erc' actually invokes `erc-mode' with your input data. The functions in here get called with three parameters, SERVER, PORT and NICK." :group 'erc-hooks @@ -2073,11 +2080,11 @@ (list :server server :port port :nick nick :password passwd))) ;;;###autoload -(defun* erc-select (&key (server (erc-compute-server)) - (port (erc-compute-port)) - (nick (erc-compute-nick)) - password - (full-name (erc-compute-full-name))) +(defun* erc (&key (server (erc-compute-server)) + (port (erc-compute-port)) + (nick (erc-compute-nick)) + password + (full-name (erc-compute-full-name))) "Select connection parameters and run ERC. Non-interactively, it takes keyword arguments (server (erc-compute-server)) @@ -2088,7 +2095,7 @@ That is, if called with - (erc-select :server \"irc.freenode.net\" :full-name \"Harry S Truman\") + (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\") server and full-name will be set to those values, whereas `erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will @@ -2096,15 +2103,18 @@ (interactive (erc-select-read-args)) (run-hook-with-args 'erc-before-connect server port nick) - (erc server port nick erc-user-full-name t password)) - - -(defun erc-select-ssl (&rest r) + (erc-open server port nick full-name t password)) + +(defalias 'erc-select 'erc) + +(defun erc-ssl (&rest r) "Interactively select SSL connection parameters and run ERC. -Arguments are as to erc-select." +Arguments are the same as for `erc'." (interactive (erc-select-read-args)) (let ((erc-server-connect-function 'erc-open-ssl-stream)) - (apply 'erc-select r))) + (apply 'erc r))) + +(defalias 'erc-select-ssl 'erc-ssl) (defun erc-open-ssl-stream (name buffer host port) "Open an SSL stream to an IRC server. @@ -2321,9 +2331,8 @@ ((listp buffer) buffer) ((processp buffer) (list (process-buffer buffer))) ((eq 'all buffer) - (and (boundp 'erc-server-process) - ;; Hmm, or all of the same session server? - (erc-buffer-list nil erc-server-process))) + ;; Hmm, or all of the same session server? + (erc-buffer-list nil erc-server-process)) ((and (eq 'active buffer) (erc-active-buffer)) (list (erc-active-buffer))) ((erc-server-buffer-live-p) @@ -2536,7 +2545,11 @@ "Ignore USER. This should be a regexp matching nick!user@host. If no USER argument is specified, list the contents of `erc-ignore-list'." (if user - (progn + (let ((quoted (regexp-quote user))) + (when (and (not (string= user quoted)) + (y-or-n-p (format "Use regexp-quoted form (%s) instead? " + quoted))) + (setq user quoted)) (erc-display-line (erc-make-notice (format "Now ignoring %s" user)) 'active) @@ -2554,16 +2567,22 @@ (defun erc-cmd-UNIGNORE (user) "Remove the user specified in USER from the ignore list." (let ((ignored-nick (car (with-current-buffer (erc-server-buffer) - (erc-member-ignore-case user erc-ignore-list))))) - (if (null ignored-nick) + (erc-member-ignore-case (regexp-quote user) + erc-ignore-list))))) + (unless ignored-nick + (if (setq ignored-nick (erc-ignored-user-p user)) + (unless (y-or-n-p (format "Remove this regexp (%s)? " + ignored-nick)) + (setq ignored-nick nil)) (erc-display-line (erc-make-notice (format "%s is not currently ignored!" user)) - 'active) + 'active))) + (when ignored-nick (erc-display-line (erc-make-notice (format "No longer ignoring %s" user)) - 'active)) - (with-current-buffer (erc-server-buffer) - (setq erc-ignore-list (delete ignored-nick erc-ignore-list)))) + 'active) + (with-current-buffer (erc-server-buffer) + (setq erc-ignore-list (delete ignored-nick erc-ignore-list))))) t) (defun erc-cmd-CLEAR () @@ -3149,7 +3168,7 @@ "Connect to SERVER, leaving existing connection intact." (erc-log (format "cmd: SERVER: %s" server)) (condition-case nil - (erc-select :server server :nick (erc-current-nick)) + (erc :server server :nick (erc-current-nick)) (error (message "Cannot find host %s." server) (beep))) @@ -3534,9 +3553,8 @@ (list (if (and (boundp 'reason) (stringp reason) (not (string= reason ""))) reason - (read-from-minibuffer (concat "Leave " (erc-default-target) - ", Reason? ") - (cons "No reason" 0))))) + (read-from-minibuffer (concat "Reason for leaving " (erc-default-target) + ": "))))) (erc-cmd-PART (concat (erc-default-target)" " reason))) (defun erc-set-topic (topic) @@ -3666,15 +3684,15 @@ (buffer-live-p server) (set-buffer server)) (error "Couldn't switch to server buffer")) - (let ((buf (erc erc-session-server - erc-session-port - (erc-current-nick) - erc-session-user-full-name - nil - nil - (list target) - target - erc-server-process))) + (let ((buf (erc-open erc-session-server + erc-session-port + (erc-current-nick) + erc-session-user-full-name + nil + nil + (list target) + target + erc-server-process))) (unless buf (error "Couldn't open query window")) (erc-update-mode-line) @@ -3846,22 +3864,19 @@ :type 'function) (defun erc-format-nick (&optional user channel-data) - "Standard nickname formatting function. Only returns the value -of NICK." - (if user - (erc-server-user-nickname user))) + "Return the nickname of USER. +See also `erc-format-nick-function'." + (when user (erc-server-user-nickname user))) (defun erc-format-@nick (&optional user channel-data) - "Format a nickname such that @ or + are prefix for the NICK -if OP or VOICE are t respectively." - (if user - (let (op voice) - (if channel-data - (setq op (erc-channel-user-op channel-data) - voice (erc-channel-user-voice channel-data))) - (concat (if voice "+" "") - (if op "@" "") - (erc-server-user-nickname user))))) + "Format the nickname of USER showing if USER is an operator or has voice. +Operators have \"@\" and users with voice have \"+\" as a prefix. +Use CHANNEL-DATA to determine op and voice status. +See also `erc-format-nick-function'." + (when user + (let ((op (and channel-data (erc-channel-user-op channel-data) "@")) + (voice (and channel-data (erc-channel-user-voice channel-data) "+"))) + (concat voice op (erc-server-user-nickname user))))) (defun erc-format-my-nick () "Return the beginning of this user's message, correctly propertized" @@ -3871,7 +3886,7 @@ (nick (erc-current-nick))) (concat (erc-propertize open 'face 'erc-default-face) - (erc-propertize nick 'face 'erc-nick-default-face) + (erc-propertize nick 'face 'erc-my-nick-face) (erc-propertize close 'face 'erc-default-face))) (let ((prefix "> ")) (erc-propertize prefix 'face 'erc-default-face)))) @@ -4548,7 +4563,7 @@ ;; list of triples: (mode-char 'on/'off argument) (arg-modes (nth 2 modes))) (cond ((erc-channel-p tgt); channel modes - (let ((buf (and (boundp 'erc-server-process) erc-server-process + (let ((buf (and erc-server-process (erc-get-buffer tgt erc-server-process)))) (when buf (with-current-buffer buf @@ -4640,7 +4655,7 @@ (arg-modes (nth 2 modes))) ;; now parse the modes changes and do the updates (cond ((erc-channel-p tgt); channel modes - (let ((buf (and (boundp 'erc-server-process) erc-server-process + (let ((buf (and erc-server-process (erc-get-buffer tgt erc-server-process)))) (when buf ;; FIXME! This used to have an original buffer @@ -5059,10 +5074,10 @@ Takes a full SPEC of a user in the form \"nick!login@host\", and matches against all the regexp's in `erc-ignore-list'. If any match, returns that regexp." - (dolist (ignored (with-current-buffer (erc-server-buffer) erc-ignore-list)) - (if (string-match ignored spec) - ;; We have `require'd cl, so we can return from the block named nil - (return ignored)))) + (catch 'found + (dolist (ignored (with-current-buffer (erc-server-buffer) erc-ignore-list)) + (if (string-match ignored spec) + (throw 'found ignored))))) (defun erc-ignored-reply-p (msg tgt proc) ;; FIXME: this docstring needs fixing -- Lawrence 2004-01-08 @@ -5418,7 +5433,7 @@ This tries a number of increasingly more default methods until a non-nil value is found. -- SERVER (the argument passwd to this function) +- SERVER (the argument passed to this function) - The `erc-server' option - The value of the IRCSERVER environment variable - The `erc-default-server' variable" @@ -5833,10 +5848,12 @@ (defun erc-string-to-port (s) "Convert string S to either an integer port number or a service name." - (let ((n (string-to-number s))) - (if (= n 0) - s - n))) + (if (numberp s) + s + (let ((n (string-to-number s))) + (if (= n 0) + s + n)))) (defun erc-version (&optional here) "Show the version number of ERC in the minibuffer. @@ -5886,8 +5903,8 @@ All windows are opened in the current frame." (interactive) - (unless (boundp 'erc-server-process) - (error "No erc-process found in current buffer")) + (unless erc-server-process + (error "No erc-server-process found in current buffer")) (let ((bufs (erc-buffer-list nil erc-server-process))) (when bufs (delete-other-windows) @@ -6019,7 +6036,8 @@ (s341 . "Inviting %n to channel %c") (s352 . "%-11c %-10n %-4a %u@%h (%f)") (s353 . "Users on %c: %u") - (s367 . "Ban on %b on %c set by %s on %t (Use /banlist!)") + (s367 . "Ban for %b on %c") + (s367-set-by . "Ban for %b on %c set by %s on %t") (s368 . "Banlist of %c ends.") (s379 . "%c: Forwarded to %f") (s391 . "The time at %s is %t") @@ -6194,10 +6212,10 @@ (with-current-buffer (or server-buffer (current-buffer)) (if (and server-buffer channel) (erc-cmd-JOIN channel) - (erc host port (or user (erc-compute-nick)) (erc-compute-full-name) - (not server-buffer) password nil channel - (when server-buffer - (get-buffer-process server-buffer))))))) + (erc-open host port (or user (erc-compute-nick)) (erc-compute-full-name) + (not server-buffer) password nil channel + (when server-buffer + (get-buffer-process server-buffer))))))) (provide 'erc)
--- a/man/ChangeLog Mon Nov 20 02:48:15 2006 +0000 +++ b/man/ChangeLog Mon Nov 20 06:50:29 2006 +0000 @@ -1,3 +1,7 @@ +2006-11-20 Michael Olson <mwolson@gnu.org> + + * erc.texi: Call this the 5.2 stable pre-release of ERC. + 2006-11-18 Chong Yidong <cyd@stupidchicken.com> * misc.texi (Interactive Shell): INSIDE_EMACS is set to t,
--- a/man/erc.texi Mon Nov 20 02:48:15 2006 +0000 +++ b/man/erc.texi Mon Nov 20 06:50:29 2006 +0000 @@ -12,7 +12,7 @@ @syncodeindex fn cp @copying -This manual is for ERC version 5.1.4. +This manual is for ERC version 5.2 stable pre-release. Copyright @copyright{} 2005, 2006 Free Software Foundation, Inc. @@ -271,7 +271,7 @@ (require 'erc) @end lisp -Once ERC is loaded, the command @kbd{M-x erc-select} will start ERC and +Once ERC is loaded, the command @kbd{M-x erc} will start ERC and prompt for the server to connect to. @c PRE5_2: Sample session, including: @@ -520,11 +520,11 @@ @section Connecting to an IRC Server @cindex connecting -The easiest way to connect to an IRC server is to call -@kbd{M-x erc-select}. If you want to assign this function to a -keystroke, the following will help you figure out its parameters. +The easiest way to connect to an IRC server is to call @kbd{M-x erc}. +If you want to assign this function to a keystroke, the following will +help you figure out its parameters. -@defun erc-select +@defun erc Select connection parameters and run ERC. Non-interactively, it takes the following keyword arguments. @@ -543,7 +543,7 @@ parameters. @example -(erc-select :server "irc.freenode.net" :full-name "Harry S Truman") +(erc :server "irc.freenode.net" :full-name "Harry S Truman") @end example @end defun