aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMiles Bader <[email protected]>2006-02-12 12:02:53 +0000
committerMiles Bader <[email protected]>2006-02-12 12:02:53 +0000
commit9cc8d0b62e2f9cc8aa5754aafaf359fdfc28edef (patch)
treeffe234ff4943c026a8c304005aca02a42d96061c /lisp
parentf828c6fc00bac67e28840637346ddc47b5b6ee2d (diff)
Revision: [email protected]/emacs--devo--0--patch-73
Creator: Michael Olson <[email protected]> Merge from erc--emacs--0
Diffstat (limited to 'lisp')
-rw-r--r--lisp/erc/ChangeLog57
-rw-r--r--lisp/erc/erc-dcc.el2
-rw-r--r--lisp/erc/erc-list.el21
-rw-r--r--lisp/erc/erc-match.el18
-rw-r--r--lisp/erc/erc-menu.el4
-rw-r--r--lisp/erc/erc-spelling.el6
-rw-r--r--lisp/erc/erc-stamp.el53
-rw-r--r--lisp/erc/erc-xdcc.el2
-rw-r--r--lisp/erc/erc.el120
9 files changed, 177 insertions, 106 deletions
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 50b37eb044..6abf4021a6 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,60 @@
+2006-02-11 Michael Olson <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
+
+ * 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 <[email protected]>
* ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04,
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index d5789a5170..0848b202e1 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 9bc561523d..2243a2f498 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 a5e3bf88cc..ad875ceee9 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 8e1f81adf7..36c28b740f 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 41e342c0e5..528668f482 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 ead847ff73..e5d4250d14 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 7c8ee6fff6..84562e72c2 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 936fffa252..d444ab2af0 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.