diff options
| -rw-r--r-- | lisp/erc/ChangeLog | 57 | ||||
| -rw-r--r-- | lisp/erc/erc-dcc.el | 2 | ||||
| -rw-r--r-- | lisp/erc/erc-list.el | 21 | ||||
| -rw-r--r-- | lisp/erc/erc-match.el | 18 | ||||
| -rw-r--r-- | lisp/erc/erc-menu.el | 4 | ||||
| -rw-r--r-- | lisp/erc/erc-spelling.el | 6 | ||||
| -rw-r--r-- | lisp/erc/erc-stamp.el | 53 | ||||
| -rw-r--r-- | lisp/erc/erc-xdcc.el | 2 | ||||
| -rw-r--r-- | lisp/erc/erc.el | 120 | 
9 files changed, 177 insertions, 106 deletions
| diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 50b37eb044f..6abf4021a60 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,60 @@ +2006-02-11  Michael Olson  <mwolson@gnu.org> + +	* 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  <disumu@x3y2z1.net> + +	* 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  <mwolson@gnu.org> + +	* 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  <disumu@x3y2z1.net> + +	* 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  <mwolson@gnu.org>  	* ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04, diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el index d5789a51708..0848b202e1c 100644 --- a/lisp/erc/erc-dcc.el +++ b/lisp/erc/erc-dcc.el @@ -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 --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el index 9bc561523d9..2243a2f4985 100644 --- a/lisp/erc/erc-list.el +++ b/lisp/erc/erc-list.el @@ -140,12 +140,19 @@ display the channel list."    (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 @@ available channel)."      (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 --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el index a5e3bf88ccf..ad875ceee99 100644 --- a/lisp/erc/erc-match.el +++ b/lisp/erc/erc-match.el @@ -428,24 +428,6 @@ In any of the following situations, MSG is directed at an entry FOOL:      (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 --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el index 8e1f81adf75..36c28b740f2 100644 --- a/lisp/erc/erc-menu.el +++ b/lisp/erc/erc-menu.el @@ -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 --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el index 41e342c0e50..528668f4829 100644 --- a/lisp/erc/erc-spelling.el +++ b/lisp/erc/erc-spelling.el @@ -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 --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el index ead847ff73f..e5d4250d142 100644 --- a/lisp/erc/erc-stamp.el +++ b/lisp/erc/erc-stamp.el @@ -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 @@ the correct column."  	  (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 @@ Window System."      (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 @@ be printed just before the window-width."      (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 --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el index 7c8ee6fff62..84562e72c2c 100644 --- a/lisp/erc/erc-xdcc.el +++ b/lisp/erc/erc-xdcc.el @@ -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 --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 936fffa252f..d444ab2af0f 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1719,22 +1719,15 @@ all channel buffers on all servers."  (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 @@ removed from the list will be disabled."  	 ;; 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 @@ removed from the list will be disabled."        (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 @@ This function should be on `erc-kill-channel-hook'."  			       (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. | 
