Commit 9cc8d0b6 authored by Miles Bader's avatar Miles Bader

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-73

Creator:  Michael Olson <mwolson@gnu.org>

Merge from erc--emacs--0
parent f828c6fc
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,
......
......@@ -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
......
......@@ -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.
......
......@@ -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'."
......
......@@ -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]
"-"
......
......@@ -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
......
;;; 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)
......
......@@ -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:
......
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment