[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/erc/erc-autoaway.el,v
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/erc/erc-autoaway.el,v |
Date: |
Fri, 14 Jul 2006 02:29:51 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Miles Bader <miles> 06/07/14 02:29:50
Index: lisp/erc/erc-autoaway.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/erc/erc-autoaway.el,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- lisp/erc/erc-autoaway.el 12 Feb 2006 20:25:00 -0000 1.2
+++ lisp/erc/erc-autoaway.el 14 Jul 2006 02:29:49 -0000 1.3
@@ -40,19 +40,6 @@
"The Emacs idletimer.
This is only used when `erc-autoaway-use-emacs-idle' is non-nil.")
-(defcustom erc-autoaway-use-emacs-idle nil
- "*If non-nil, the idle time refers to idletime in Emacs.
-If nil, the idle time refers to idletime on IRC only.
-The time itself is specified by `erc-autoaway-idle-seconds'.
-See `erc-autoaway-mode' for more information on the various
-definitions of being idle.
-
-Note that using Emacs idletime is currently broken for most versions,
-since process activity (as happens all the time on IRC) makes Emacs
-non-idle. Emacs idle-time and user idle-time are just not the same."
- :group 'erc-autoaway
- :type 'boolean)
-
;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway")
(define-erc-module autoaway nil
"In ERC autoaway mode, you can be set away automatically.
@@ -61,35 +48,65 @@
There are several kinds of being idle:
-IRC idle time measures how long since you last sent something (see
-`erc-autoaway-last-sent-time'). This is the default.
+User idle time measures how long you have not been sending any
+commands to Emacs. This is the default.
Emacs idle time measures how long Emacs has been idle. This is
currently not useful, since Emacs is non-idle when it handles
-ping-pong with IRC servers. See `erc-autoaway-use-emacs-idle' for
-more information.
+ping-pong with IRC servers. See `erc-autoaway-idle-method'
+for more information.
-User idle time measures how long you have not been sending any
-commands to Emacs, or to your system. Emacs currently provides no way
-to measure user idle time.
+IRC idle time measures how long since you last sent something (see
+`erc-autoaway-last-sent-time').
If `erc-auto-discard-away' is set, then typing anything, will
set you no longer away.
Related variables: `erc-public-away-p' and `erc-away-nickname'."
;; Enable:
- ((add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idletime)
- (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idletime)
- (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
- (when erc-autoaway-use-emacs-idle
+ ((when (boundp 'erc-autoaway-idle-method)
+ (cond
+ ((eq erc-autoaway-idle-method 'irc)
+ (add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
+ (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
+ ((eq erc-autoaway-idle-method 'user)
+ (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user))
+ ((eq erc-autoaway-idle-method 'emacs)
(erc-autoaway-reestablish-idletimer)))
+ (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
+ (add-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators)))
;; Disable:
- ((remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idletime)
- (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idletime)
- (remove-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
- (when erc-autoaway-idletimer
+ ((when (boundp 'erc-autoaway-idle-method)
+ (cond
+ ((eq erc-autoaway-idle-method 'irc)
+ (remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
+ (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
+ ((eq erc-autoaway-idle-method 'user)
+ (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user))
+ ((eq erc-autoaway-idle-method 'emacs)
(erc-cancel-timer erc-autoaway-idletimer)
- (setq erc-autoaway-idletimer nil))))
+ (setq erc-autoaway-idletimer nil)))
+ (remove-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
+ (remove-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators))))
+
+(defcustom erc-autoaway-idle-method 'user
+ "*The method used to determine how long you have been idle.
+If 'user, the time of the last command sent to Emacs is used.
+If 'emacs, the idle time in Emacs is used.
+If 'irc, the time of the last IRC command is used.
+
+The time itself is specified by `erc-autoaway-idle-seconds'.
+
+See `erc-autoaway-mode' for more information on the various
+definitions of being idle."
+ :group 'erc-autoaway
+ :type '(choice (const :tag "User idle time" user)
+ (const :tag "Emacs idle time" emacs)
+ (const :tag "Last IRC action" irc))
+ :set (lambda (sym val)
+ (erc-autoaway-disable)
+ (set-default sym val)
+ (erc-autoaway-enable)))
(defcustom erc-auto-set-away t
"*If non-nil, set away after `erc-autoaway-idle-seconds' seconds of idling.
@@ -120,8 +137,8 @@
(defun erc-autoaway-reestablish-idletimer ()
"Reestablish the emacs idletimer.
-You have to call this function each time you change
-`erc-autoaway-idle-seconds', if `erc-autoaway-use-emacs-idle' is set."
+If `erc-autoaway-idle-method' is 'emacs, you must call this
+function each time you change `erc-autoaway-idle-seconds'."
(interactive)
(when erc-autoaway-idletimer
(erc-cancel-timer erc-autoaway-idletimer))
@@ -138,36 +155,49 @@
:group 'erc-autoaway
:set (lambda (sym val)
(set-default sym val)
- (when erc-autoaway-use-emacs-idle
+ (when (eq erc-autoaway-idle-method 'emacs)
(erc-autoaway-reestablish-idletimer)))
:type 'number)
(defcustom erc-autoaway-message
"I'm gone (autoaway after %i seconds of idletime)"
- "*Message ERC will use when he sets you automatically away.
-It is used as a `format' string with the argument of the idletime in
-seconds."
+ "*Message ERC will use when setting you automatically away.
+It is used as a `format' string with the argument of the idletime
+in seconds."
:group 'erc-autoaway
:type 'string)
(defvar erc-autoaway-last-sent-time (erc-current-time)
"The last time the user sent something.")
-(defun erc-autoaway-reset-idletime (line &rest stuff)
- "Reset the stored idletime for the user.
-This is one global variable since a user talking on one net can talk
-on another net too."
+(defvar erc-autoaway-caused-away nil
+ "Indicates whether this module was responsible for setting the
+user's away status.")
+
+(defun erc-autoaway-reset-idle-user (&rest stuff)
+ "Reset the stored user idle time.
+This is one global variable since a user talking on one net can
+talk on another net too."
+ (when erc-auto-discard-away
+ (erc-autoaway-set-back))
+ (setq erc-autoaway-last-sent-time (erc-current-time)))
+
+(defun erc-autoaway-reset-idle-irc (line &rest stuff)
+ "Reset the stored IRC idle time.
+This is one global variable since a user talking on one net can
+talk on another net too."
(when (and erc-auto-discard-away
(stringp line)
(not (string-match erc-autoaway-no-auto-discard-regexp line)))
- (erc-autoaway-set-back line))
+ (erc-autoaway-set-back))
(setq erc-autoaway-last-sent-time (erc-current-time)))
-(defun erc-autoaway-set-back (line)
+(defun erc-autoaway-set-back ()
"Discard the away state globally."
- (when (erc-away-p)
- (setq erc-autoaway-last-sent-time (erc-current-time))
- (erc-cmd-GAWAY "")))
+ (let ((server-buffer (car (erc-buffer-list #'erc-server-buffer-p))))
+ (when (and erc-autoaway-caused-away
+ (with-current-buffer server-buffer (erc-away-p)))
+ (erc-cmd-GAWAY ""))))
(defun erc-autoaway-possibly-set-away (current-time)
"Set autoaway when `erc-auto-set-away' is true and the idletime is
@@ -193,8 +223,14 @@
;; existing process.
(when (and (erc-server-process-alive)
(not (erc-away-p)))
+ (setq erc-autoaway-caused-away t)
(erc-cmd-GAWAY (format erc-autoaway-message idle-time))))
+(defun erc-autoaway-reset-indicators (&rest stuff)
+ "Reset indicators used by the erc-autoaway module."
+ (setq erc-autoaway-last-sent-time (erc-current-time))
+ (setq erc-autoaway-caused-away nil))
+
(provide 'erc-autoaway)
;;; erc-autoaway.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/erc/erc-autoaway.el,v,
Miles Bader <=