erc-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Erc-discuss] Re: erc-track-list-changed-hook call timing


From: Jeremy Maitin-Shepard
Subject: Re: [Erc-discuss] Re: erc-track-list-changed-hook call timing
Date: Mon, 01 Sep 2008 16:49:59 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

John J Foerch <address@hidden> writes:

> Hello,
>   Some further observations while trying to make a non-mode-line erc-track
> notification...

>   In erc-modified-channels-display, the variable erc-modified-channels-object
> never gets updated if erc-track-position-in-mode-line is nil.  I would like a
> way to have erc-modified-channels-object updated, but not have the mode-line
> display.

>   To give you an idea of what I am trying to accomplish, I am writing
> erc-modified-channels-object to a file, so that I can have my erc-track
> notification displayed by my window manager, rather than in the emacs
> mode-line.

That is exactly what I do, and the current state of things with respect
to erc-track-list-changed-hook reflects the changes I made in order to
make it work smoothly.  As might be guessed, though, I don't use
erc-modified-channels-object myself; instead, I do:

;; begin

(setq my-erc-server-name-transform-alist
      '(("undernet\\.org$" . "undernet")
        ("freenode\\.net$" . "freenode")
        ("oftc\\.net$" . "oftc")
        ("localhost$" . "bitlbee")))

(defun my-erc-transform-server-name (server)
  "Transform SERVER using `my-erc-server-name-transform-alist'."
  (interactive "sServer name: \n")
  (let ((case-fold-search t)
        (transforms my-erc-server-name-transform-alist)
        result)
    (while (and (not result) transforms)
      (let ((element (car transforms)))
        (if (string-match (car element) server)
            (setq result (cdr element))))
      (setq transforms (cdr transforms)))
    (or result server)))

(setq erc-track-visibility 'visible)
(setq erc-track-exclude-server-buffer t)
(setq erc-track-position-in-mode-line nil)
(setq erc-track-exclude-types '("NICK" "KICK" "PART" "QUIT" "JOIN" "MODE" "321" 
"324" "353" "333" "332"))

(defvar my-erc-output-track-status-filename "/tmp/jbms/erc-status")
(defvar my-erc-previous-track-status nil)

(defun my-erc-output-track-status ()
  (interactive)
  (let ((str ""))
    (mapc (lambda (x)
            (let ((buffer (car x))
                  (count (cadr x))
                  (face (cddr x)))
              (if (and buffer (buffer-live-p buffer))
                  (setq str (concat str
                             (with-current-buffer buffer
                               (let ((name (erc-default-target))
                                     (server (my-erc-transform-server-name
                                              (or erc-server-announced-name
                                                  erc-session-server))))
                                 (concat name " " erc-session-server " " server 
" ")))
                             (number-to-string count) " face" "\n")))))
          erc-modified-channels-alist)
    (unless (and my-erc-previous-track-status
                 (string= str my-erc-previous-track-status))
      (setq my-erc-previous-track-status str)
      (write-region str nil my-erc-output-track-status-filename nil 0))))

(defun my-erc-clear-track-status-file ()
  (when my-erc-previous-track-status
    (write-region "" nil my-erc-output-track-status-filename nil 0)))

(eval-after-load 'erc
  '(add-hook 'kill-emacs-hook 'my-erc-clear-track-status-file))

(eval-after-load 'erc
  '(add-hook 'erc-track-list-changed-hook 'my-erc-output-track-status))


;; --end 

Given that erc-modified-channels-object is a propertized string as best
I remember, it seems like a rather awkward thing to use from outside
Emacs.  Certainly you could add extra variables and such so that it is
generated even when display in mode line is disabled, but it seems like
it would be cleaner to just duplicate it as much as needed (and I
suspect you will be better off doing something somewhat different than
merely writing using the lisp writer the value of
erc-modified-channels-object).

-- 
Jeremy Maitin-Shepard




reply via email to

[Prev in Thread] Current Thread [Next in Thread]