• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/emacs-93/emacs/lisp/erc/

Lines Matching +defs:erc +defs:with +defs:server +defs:buffer

0 ;;; erc-log.el --- Logging facilities for ERC.
9 ;; Logging code taken from erc.el and modified to use markers.
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
34 ;; (setq erc-enable-logging t)
35 ;; (setq erc-log-channels-directory "/path/to/logfiles") ; must be writable
39 ;; HDD. To do this, M-x customize-variable erc-modules, and add "log".
42 ;; channel buffer. To do this, add the following to your .emacs:
44 ;; (require 'erc-log)
47 ;; variable `erc-enable-logging'.
51 ;; If logging is enabled, at some point, `erc-save-buffer-in-logs'
52 ;; will be called. The "end" of the buffer is taken from
53 ;; `erc-insert-marker', while `erc-last-saved-position' holds the
54 ;; position the buffer was last saved at (as a marker, or if the
55 ;; buffer hasn't been saved before, as the number 1 (point-min)).
57 ;; The region between `erc-last-saved-position' and
58 ;; `erc-insert-marker' is saved to the current buffer's logfile, and
59 ;; `erc-last-saved-position' is updated to reflect this.
62 ;; 2003-04-26: logging code pulled out of erc.el. Switched to using
70 ;; especially needed for those logfiles with no nick in them, as
74 ;; logged. This would require that logging be buffer-local,
76 ;; log the server buffer.
78 ;; on could use the function `lock-buffer' and `unlock-buffer'.
87 (require 'erc)
89 (require 'erc-networks)
92 (defgroup erc-log nil
94 :group 'erc)
96 (defcustom erc-generate-log-file-name-function 'erc-generate-log-file-name-long
99 BUFFER is the buffer to be saved,
103 `erc-server-process'."
104 :group 'erc-log
105 :type '(choice (const :tag "Long style" erc-generate-log-file-name-long)
106 (const :tag "Long, but with network name rather than server"
107 erc-generate-log-file-name-network)
108 (const :tag "Short" erc-generate-log-file-name-short)
109 (const :tag "With date" erc-generate-log-file-name-with-date)
112 (defcustom erc-truncate-buffer-on-save nil
113 "Truncate any ERC (channel, query, server) buffer when it is saved."
114 :group 'erc-log
117 (defcustom erc-enable-logging t
120 If the value is a function, it will be called with one argument, the
121 name of the current ERC buffer. One possible function, which saves
122 all but server buffers is `erc-log-all-but-server-buffers'.
124 This variable is buffer local. Setting it via \\[customize] sets the
127 Log files are stored in `erc-log-channels-directory'."
128 :group 'erc-log
131 (make-variable-buffer-local 'erc-enable-logging)
133 (defcustom erc-log-channels-directory "~/log"
137 directory should not end with a trailing slash."
138 :group 'erc-log
142 (defcustom erc-log-insert-log-on-open nil
143 "*Insert log file contents into the buffer if a log file exists."
144 :group 'erc-log
147 (defcustom erc-save-buffer-on-part t
148 "*Save the channel buffer content using `erc-save-buffer-in-logs' on PART.
151 `erc-log-write-after-send' and `erc-log-write-after-insert'."
152 :group 'erc-log
155 (defcustom erc-save-queries-on-quit t
156 "*Save all query (also channel) buffers of the server on QUIT.
159 `erc-log-write-after-send' and `erc-log-write-after-insert'."
160 :group 'erc-log
163 (defcustom erc-log-write-after-send nil
167 `erc-save-buffer-on-part' and `erc-save-queries-on-quit'."
168 :group 'erc-log
171 (defcustom erc-log-write-after-insert nil
173 logged ERC buffer.
176 `erc-save-buffer-on-part' and `erc-save-queries-on-quit'."
177 :group 'erc-log
180 (defcustom erc-log-file-coding-system (if (featurep 'xemacs)
187 :group 'erc-log)
189 ;;;###autoload (autoload 'erc-log-mode "erc-log" nil t)
190 (define-erc-module log nil
192 Files are stored in `erc-log-channels-directory'; file name
194 `erc-generate-log-file-name-function'.
198 behaviour on and off with the variable `erc-enable-logging', which can
201 \(setq erc-enable-logging
202 (lambda (buffer)
203 (with-current-buffer buffer
204 (null (erc-away-time)))))"
206 ((when erc-log-write-after-insert
207 (add-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs))
208 (when erc-log-write-after-send
209 (add-hook 'erc-send-post-hook 'erc-save-buffer-in-logs))
210 (add-hook 'erc-kill-buffer-hook 'erc-save-buffer-in-logs)
211 (add-hook 'erc-kill-channel-hook 'erc-save-buffer-in-logs)
212 (add-hook 'kill-emacs-hook 'erc-log-save-all-buffers)
213 (add-hook 'erc-quit-hook 'erc-conditional-save-queries)
214 (add-hook 'erc-part-hook 'erc-conditional-save-buffer)
215 ;; append, so that 'erc-initialize-log-marker runs first
216 (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)
217 (dolist (buffer (erc-buffer-list))
218 (erc-log-setup-logging buffer)))
220 ((remove-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs)
221 (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs)
222 (remove-hook 'erc-kill-buffer-hook 'erc-save-buffer-in-logs)
223 (remove-hook 'erc-kill-channel-hook 'erc-save-buffer-in-logs)
224 (remove-hook 'kill-emacs-hook 'erc-log-save-all-buffers)
225 (remove-hook 'erc-quit-hook 'erc-conditional-save-queries)
226 (remove-hook 'erc-part-hook 'erc-conditional-save-buffer)
227 (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging)
228 (dolist (buffer (erc-buffer-list))
229 (erc-log-disable-logging buffer))))
231 (define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs)
233 ;;; functionality referenced from erc.el
234 (defun erc-log-setup-logging (buffer)
235 "Setup the buffer-local logging variables in the current buffer.
236 This function is destined to be run from `erc-connect-pre-hook'.
237 The current buffer is given by BUFFER."
238 (when (erc-logging-enabled buffer)
239 (with-current-buffer buffer
241 (setq buffer-file-name nil)
244 '(erc-save-buffer-in-logs)))
246 (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
249 '(erc-save-buffer-in-logs))))
250 (when erc-log-insert-log-on-open
251 (ignore-errors (insert-file-contents (erc-current-logfile))
252 (move-marker erc-last-saved-position
255 (defun erc-log-disable-logging (buffer)
257 (when (erc-logging-enabled buffer)
258 (with-current-buffer buffer
259 (setq buffer-offer-save nil
260 erc-enable-logging nil))))
262 (defun erc-log-all-but-server-buffers (buffer)
264 Returns nil iff `erc-server-buffer-p' returns t."
267 (set-buffer buffer)
268 (not (erc-server-buffer-p)))))
270 (defun erc-save-query-buffers (process)
272 (erc-with-all-buffers-of-server process
274 (erc-save-buffer-in-logs)))
276 (defun erc-conditional-save-buffer (buffer)
277 "Save Query BUFFER if `erc-save-queries-on-quit' is t."
278 (when erc-save-buffer-on-part
279 (erc-save-buffer-in-logs buffer)))
281 (defun erc-conditional-save-queries (process)
282 "Save Query buffers of PROCESS if `erc-save-queries-on-quit' is t."
283 (when erc-save-queries-on-quit
284 (erc-save-query-buffers process)))
288 (defun erc-log-save-all-buffers ()
289 (dolist (buffer (erc-buffer-list))
290 (erc-save-buffer-in-logs buffer)))
293 (defun erc-logging-enabled (&optional buffer)
295 If BUFFER is nil, the value of `current-buffer' is used.
296 Logging is enabled if `erc-log-channels-directory' is non-nil, the directory
298 `erc-enable-logging' returns a non-nil value."
299 (and erc-log-channels-directory
300 (erc-directory-writable-p erc-log-channels-directory)
301 (if (functionp erc-enable-logging)
302 (funcall erc-enable-logging (or buffer (current-buffer)))
303 erc-enable-logging)))
305 (defun erc-log-standardize-name (filename)
307 This will not work with full paths, only names.
309 Any unsafe characters in the name are replaced with \"!\". The
311 (downcase (erc-replace-regexp-in-string
314 (defun erc-current-logfile (&optional buffer)
316 If BUFFER is nil, the value of `current-buffer' is used.
317 This is determined by `erc-generate-log-file-name-function'.
320 (erc-log-standardize-name
321 (funcall erc-generate-log-file-name-function
322 (or buffer (current-buffer))
323 (or (buffer-name buffer) (erc-default-target))
324 (erc-current-nick)
325 erc-session-server erc-session-port))
326 erc-log-channels-directory))
328 (defun erc-generate-log-file-name-with-date (buffer &rest ignore)
331 This function is a possible value for `erc-generate-log-file-name-function'."
332 (concat (buffer-name buffer) "-" (format-time-string "%Y-%m-%d") ".txt"))
334 (defun erc-generate-log-file-name-short (buffer &rest ignore)
336 In fact, it only uses the buffer name of the BUFFER argument, so
337 you can affect that using `rename-buffer' and the-like. This
339 `erc-generate-log-file-name-function'."
340 (concat (buffer-name buffer) ".txt"))
342 (defun erc-generate-log-file-name-long (buffer target nick server port)
344 This results in a file name of the form #channel!nick@server:port.txt.
345 This function is a possible value for `erc-generate-log-file-name-function'."
348 nick "@" server ":" (cond ((stringp port) port)
354 (defun erc-generate-log-file-name-network (buffer target nick server port)
355 "Generates a log-file name using the network name rather than server name.
357 This function is a possible value for `erc-generate-log-file-name-function'."
358 (require 'erc-networks)
362 (or (with-current-buffer buffer (erc-network-name)) server)
368 (defun erc-save-buffer-in-logs (&optional buffer)
370 If BUFFER is not provided, current buffer is used.
371 Logging is enabled if `erc-logging-enabled' returns non-nil.
374 buffer, since only the text that runs off the buffer limit is logged
378 `erc-insert-post-hook'."
380 (or buffer (setq buffer (current-buffer)))
381 (when (erc-logging-enabled buffer)
382 (let ((file (erc-current-logfile buffer))
383 (coding-system-for-write erc-log-file-coding-system))
385 (with-current-buffer buffer
389 (when (and (markerp erc-last-saved-position)
390 (> erc-insert-marker (1+ erc-last-saved-position)))
391 (write-region (1+ (marker-position erc-last-saved-position))
392 (marker-position erc-insert-marker)
394 (if (and erc-truncate-buffer-on-save (interactive-p))
396 (let ((inhibit-read-only t)) (erase-buffer))
397 (move-marker erc-last-saved-position (point-max))
398 (erc-display-prompt))
399 (move-marker erc-last-saved-position
400 ;; If we place erc-last-saved-position at
401 ;; erc-insert-marker, because text gets
402 ;; inserted /before/ erc-insert-marker,
404 ;; (erc-last-saved-position will always
405 ;; be equal to erc-insert-marker).
406 (1- (marker-position erc-insert-marker)))))
407 (set-buffer-modified-p nil))))))
410 (provide 'erc-log)
412 ;;; erc-log.el ends here