Mercurial > emacs
annotate lisp/erc/erc-autoaway.el @ 112296:a3ee86732163
* fontset.c (free_realized_fontset): Mark unreachable code with if (0).
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 16 Jan 2011 19:06:11 -0800 |
parents | ef719132ddfa |
children |
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 |
112218
376148b31b5e
Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
3 ;; Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 |
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 |