Mercurial > emacs
annotate lisp/erc/erc-autoaway.el @ 107521:54f3a4d055ee
Document font-use-system-font.
* cmdargs.texi (Font X): Move most content to Fonts.
* frames.texi (Fonts): New node. Document font-use-system-font.
* emacs.texi (Top):
* xresources.texi (Table of Resources):
* mule.texi (Defining Fontsets, Charsets): Update xrefs.
| author | Chong Yidong <cyd@stupidchicken.com> |
|---|---|
| date | Sat, 20 Mar 2010 13:24:06 -0400 |
| parents | 1d1d5d9bd884 |
| children | 376148b31b5e |
| rev | line source |
|---|---|
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
1 ;;; erc-autoaway.el --- Provides autoaway for ERC |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
2 |
| 106815 | 3 ;; Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 |
|
95614
b52fd6b0e051
Remove unnecessary eval-when-compiles.
Glenn Morris <rgm@gnu.org>
parents:
94660
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
5 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
6 ;; Author: Jorgen Schaefer <forcer@forcix.cx> |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
7 ;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErcAutoAway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
8 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
9 ;; This file is part of GNU Emacs. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
10 |
|
94660
2a734255bcc7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
12 ;; it under the terms of the GNU General Public License as published by |
|
94660
2a734255bcc7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
|
2a734255bcc7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
14 ;; (at your option) any later version. |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
15 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
16 ;; GNU Emacs is distributed in the hope that it will be useful, |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
19 ;; GNU General Public License for more details. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
20 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
21 ;; You should have received a copy of the GNU General Public License |
|
94660
2a734255bcc7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
23 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
24 ;;; Commentary: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
25 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
26 ;; TODO: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
27 ;; - Legacy names: erc-auto-discard-away, erc-auto-set-away |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
28 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
29 ;;; Code: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
30 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
31 (require 'erc) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
32 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
33 (defgroup erc-autoaway nil |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
34 "Set yourself automatically away after some idletime and set |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
35 yourself back when you type something." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
36 :group 'erc) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
37 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
38 (defvar erc-autoaway-idletimer nil |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
39 "The Emacs idletimer. |
| 74093 | 40 This is only used when `erc-autoaway-idle-method' is set to 'emacs.") |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
41 |
| 76856 | 42 (defvar erc-autoaway-last-sent-time (erc-current-time) |
| 43 "The last time the user sent something.") | |
| 44 | |
| 45 (defvar erc-autoaway-caused-away nil | |
| 46 "Indicates whether this module was responsible for setting the | |
| 47 user's away status.") | |
| 48 | |
|
95614
b52fd6b0e051
Remove unnecessary eval-when-compiles.
Glenn Morris <rgm@gnu.org>
parents:
94660
diff
changeset
|
49 (defvar erc-autoaway-idle-seconds) |
| 76856 | 50 |
| 51 (defun erc-autoaway-reestablish-idletimer () | |
| 52 "Reestablish the Emacs idletimer. | |
| 53 If `erc-autoaway-idle-method' is 'emacs, you must call this | |
| 54 function each time you change `erc-autoaway-idle-seconds'." | |
| 55 (interactive) | |
| 56 (when erc-autoaway-idletimer | |
| 57 (erc-cancel-timer erc-autoaway-idletimer)) | |
| 58 (setq erc-autoaway-idletimer | |
| 59 (run-with-idle-timer erc-autoaway-idle-seconds | |
| 60 t | |
| 61 'erc-autoaway-set-away | |
| 62 erc-autoaway-idle-seconds))) | |
| 63 | |
| 64 (defun erc-autoaway-some-server-buffer () | |
| 65 "Return some ERC server buffer if its connection is alive. | |
| 66 If none is found, return nil." | |
| 67 (car (erc-buffer-list #'erc-open-server-buffer-p))) | |
| 68 | |
| 69 (defun erc-autoaway-insinuate-maybe (&optional server &rest ignored) | |
| 70 "Add autoaway reset function to `post-command-hook' if at least one | |
| 71 ERC process is alive. | |
| 72 | |
| 73 This is used when `erc-autoaway-idle-method' is 'user." | |
| 74 (when (or server (erc-autoaway-some-server-buffer)) | |
| 75 (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user))) | |
| 76 | |
| 77 (defun erc-autoaway-remove-maybe (&rest ignored) | |
| 78 "Remove the autoaway reset function from `post-command-hook' if | |
| 79 no ERC process is alive. | |
| 80 | |
| 81 This is used when `erc-autoaway-idle-method' is 'user." | |
| 82 (unless (erc-autoaway-some-server-buffer) | |
| 83 (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user))) | |
| 84 | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
85 ;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway") |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
86 (define-erc-module autoaway nil |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
87 "In ERC autoaway mode, you can be set away automatically. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
88 If `erc-auto-set-away' is set, then you will be set away after |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
89 the number of seconds specified in `erc-autoaway-idle-seconds'. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
90 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
91 There are several kinds of being idle: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
92 |
| 71883 | 93 User idle time measures how long you have not been sending any |
| 94 commands to Emacs. This is the default. | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
95 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
96 Emacs idle time measures how long Emacs has been idle. This is |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
97 currently not useful, since Emacs is non-idle when it handles |
| 71883 | 98 ping-pong with IRC servers. See `erc-autoaway-idle-method' |
| 99 for more information. | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
100 |
| 71883 | 101 IRC idle time measures how long since you last sent something (see |
| 102 `erc-autoaway-last-sent-time'). | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
103 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
104 If `erc-auto-discard-away' is set, then typing anything, will |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
105 set you no longer away. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
106 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
107 Related variables: `erc-public-away-p' and `erc-away-nickname'." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
108 ;; Enable: |
| 71883 | 109 ((when (boundp 'erc-autoaway-idle-method) |
| 76856 | 110 (add-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators) |
| 111 (setq erc-autoaway-last-sent-time (erc-current-time)) | |
| 71883 | 112 (cond |
| 113 ((eq erc-autoaway-idle-method 'irc) | |
| 114 (add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc) | |
| 115 (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc)) | |
| 116 ((eq erc-autoaway-idle-method 'user) | |
| 76856 | 117 (add-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe) |
| 118 (add-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe) | |
| 119 (erc-autoaway-insinuate-maybe)) | |
| 71883 | 120 ((eq erc-autoaway-idle-method 'emacs) |
| 121 (erc-autoaway-reestablish-idletimer))) | |
| 122 (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away) | |
| 123 (add-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators))) | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
124 ;; Disable: |
| 71883 | 125 ((when (boundp 'erc-autoaway-idle-method) |
| 76856 | 126 (remove-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators) |
| 71883 | 127 (cond |
| 128 ((eq erc-autoaway-idle-method 'irc) | |
| 129 (remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc) | |
| 130 (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc)) | |
| 131 ((eq erc-autoaway-idle-method 'user) | |
| 76856 | 132 (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user) |
| 133 (remove-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe) | |
| 134 (remove-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe)) | |
| 71883 | 135 ((eq erc-autoaway-idle-method 'emacs) |
| 136 (erc-cancel-timer erc-autoaway-idletimer) | |
| 137 (setq erc-autoaway-idletimer nil))) | |
| 138 (remove-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away) | |
| 139 (remove-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators)))) | |
| 140 | |
| 141 (defcustom erc-autoaway-idle-method 'user | |
| 142 "*The method used to determine how long you have been idle. | |
| 143 If 'user, the time of the last command sent to Emacs is used. | |
| 144 If 'emacs, the idle time in Emacs is used. | |
| 145 If 'irc, the time of the last IRC command is used. | |
| 146 | |
| 147 The time itself is specified by `erc-autoaway-idle-seconds'. | |
| 148 | |
| 149 See `erc-autoaway-mode' for more information on the various | |
| 150 definitions of being idle." | |
| 151 :group 'erc-autoaway | |
| 152 :type '(choice (const :tag "User idle time" user) | |
| 153 (const :tag "Emacs idle time" emacs) | |
| 154 (const :tag "Last IRC action" irc)) | |
| 155 :set (lambda (sym val) | |
| 76856 | 156 (if erc-autoaway-mode |
| 157 (progn | |
| 158 (erc-autoaway-disable) | |
| 159 (set sym val) | |
| 160 (erc-autoaway-enable)) | |
| 161 (set sym val)))) | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
162 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
163 (defcustom erc-auto-set-away t |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
164 "*If non-nil, set away after `erc-autoaway-idle-seconds' seconds of idling. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
165 ERC autoaway mode can set you away when you idle, and set you no |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
166 longer away when you type something. This variable controls whether |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
167 you will be set away when you idle. See `erc-auto-discard-away' for |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
168 the other half." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
169 :group 'erc-autoaway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
170 :type 'boolean) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
171 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
172 (defcustom erc-auto-discard-away t |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
173 "*If non-nil, sending anything when away automatically discards away state. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
174 ERC autoaway mode can set you away when you idle, and set you no |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
175 longer away when you type something. This variable controls whether |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
176 you will be set no longer away when you type something. See |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
177 `erc-auto-set-away' for the other half. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
178 See also `erc-autoaway-no-auto-discard-regexp'." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
179 :group 'erc-autoaway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
180 :type 'boolean) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
181 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
182 (defcustom erc-autoaway-no-auto-discard-regexp "^/g?away.*$" |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
183 "*Input that matches this will not automatically discard away status. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
184 See `erc-auto-discard-away'." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
185 :group 'erc-autoaway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
186 :type 'regexp) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
187 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
188 (defcustom erc-autoaway-idle-seconds 1800 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
189 "*Number of seconds after which ERC will set you automatically away. |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
190 If you are changing this variable using lisp instead of customizing it, |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
191 you have to run `erc-autoaway-reestablish-idletimer' afterwards." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
192 :group 'erc-autoaway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
193 :set (lambda (sym val) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
194 (set-default sym val) |
| 71883 | 195 (when (eq erc-autoaway-idle-method 'emacs) |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
196 (erc-autoaway-reestablish-idletimer))) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
197 :type 'number) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
198 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
199 (defcustom erc-autoaway-message |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
200 "I'm gone (autoaway after %i seconds of idletime)" |
| 71883 | 201 "*Message ERC will use when setting you automatically away. |
| 202 It is used as a `format' string with the argument of the idletime | |
| 203 in seconds." | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
204 :group 'erc-autoaway |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
205 :type 'string) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
206 |
| 71883 | 207 (defun erc-autoaway-reset-idle-user (&rest stuff) |
| 208 "Reset the stored user idle time. | |
| 209 This is one global variable since a user talking on one net can | |
| 210 talk on another net too." | |
| 211 (when erc-auto-discard-away | |
| 76856 | 212 (erc-autoaway-set-back #'erc-autoaway-remove-maybe)) |
| 71883 | 213 (setq erc-autoaway-last-sent-time (erc-current-time))) |
| 214 | |
| 215 (defun erc-autoaway-reset-idle-irc (line &rest stuff) | |
| 216 "Reset the stored IRC idle time. | |
| 217 This is one global variable since a user talking on one net can | |
| 218 talk on another net too." | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
219 (when (and erc-auto-discard-away |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
220 (stringp line) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
221 (not (string-match erc-autoaway-no-auto-discard-regexp line))) |
| 71883 | 222 (erc-autoaway-set-back)) |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
223 (setq erc-autoaway-last-sent-time (erc-current-time))) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
224 |
| 76856 | 225 (defun erc-autoaway-set-back (&optional none-alive-func) |
| 226 "Discard the away state globally. | |
| 227 | |
| 228 NONE-ALIVE-FUNC is the function to call if no ERC processes are alive." | |
| 229 (let ((server-buffer (erc-autoaway-some-server-buffer))) | |
| 230 (if (and erc-autoaway-caused-away | |
| 231 (buffer-live-p server-buffer) | |
| 232 (with-current-buffer server-buffer erc-away)) | |
| 233 (erc-cmd-GAWAY "") | |
| 234 (when none-alive-func (funcall none-alive-func))))) | |
| 235 | |
| 236 (defun erc-autoaway-some-open-server-buffer () | |
| 237 "Return some ERC server buffer if its connection is alive and the | |
| 238 user is not away. | |
| 239 If none is found, return nil." | |
| 240 (car (erc-buffer-list (lambda () | |
| 241 (and (erc-open-server-buffer-p) | |
| 242 (not erc-away)))))) | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
243 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
244 (defun erc-autoaway-possibly-set-away (current-time) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
245 "Set autoaway when `erc-auto-set-away' is true and the idletime is |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
246 exceeds `erc-autoaway-idle-seconds'." |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
247 ;; A test for (erc-server-process-alive) is not necessary, because |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
248 ;; this function is called from `erc-timer-hook', which is called |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
249 ;; whenever the server sends something to the client. |
| 86836 | 250 (when (and erc-server-connected |
| 251 erc-auto-set-away | |
| 74093 | 252 (not erc-autoaway-caused-away) |
| 76856 | 253 (erc-autoaway-some-open-server-buffer)) |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
254 (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
255 current-time))) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
256 (when (>= idle-time erc-autoaway-idle-seconds) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
257 (erc-display-message |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
258 nil 'notice nil |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
259 (format "Setting automatically away after %i seconds of idle-time" |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
260 idle-time)) |
| 76856 | 261 (erc-autoaway-set-away idle-time t))))) |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
262 |
| 76856 | 263 (defun erc-autoaway-set-away (idle-time &optional notest) |
| 264 "Set the away state globally. | |
| 265 | |
| 266 If NOTEST is specified, do not check to see whether there is an | |
| 267 activer server buffer available." | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
268 ;; Note that the idle timer runs, even when Emacs is inactive. In |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
269 ;; order to prevent flooding when we connect, we test for an |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
270 ;; existing process. |
| 76856 | 271 (when (or notest (erc-autoaway-some-open-server-buffer)) |
| 71883 | 272 (setq erc-autoaway-caused-away t) |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
273 (erc-cmd-GAWAY (format erc-autoaway-message idle-time)))) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
274 |
| 71883 | 275 (defun erc-autoaway-reset-indicators (&rest stuff) |
| 276 "Reset indicators used by the erc-autoaway module." | |
| 277 (setq erc-autoaway-last-sent-time (erc-current-time)) | |
| 278 (setq erc-autoaway-caused-away nil)) | |
| 279 | |
|
68451
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
280 (provide 'erc-autoaway) |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
281 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
282 ;;; erc-autoaway.el ends here |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
283 ;; |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
284 ;; Local Variables: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
285 ;; indent-tabs-mode: t |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
286 ;; tab-width: 8 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
287 ;; End: |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
288 |
|
fc745b05e928
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-22
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
289 ;; arch-tag: 16fc241e-8358-4b56-9fe2-116bdd0ba3bc |
