[Top][All Lists]

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

Re: RFC: status icon support

From: Tom Tromey
Subject: Re: RFC: status icon support
Date: Mon, 31 Dec 2007 11:29:51 -0700
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.990 (gnu/linux)

>>>>> "Dan" == Dan Nicolaescu <address@hidden> writes:

Dan> Very interesting idea!
Dan> What would the lisp code for this look like?

Use make-status-icon to make an icon.  Then use
modify-status-icon-parameters to change it, or use show-status-icon-message
to display a notification.

E.g., for my ERC module I have the icon blink when someone mentions my
name in a channel.  With the current API this would look like:

  (modify-status-icon-parameters erc-status-status-icon '((blinking . t)))

It is also set up so that clicking on the status icon will switch to
the first buffer where someone has mentioned my nick:

  (modify-status-icon-parameters erc-status-status-icon
      '((click-callback . erc-status-select-first-buffer)))

erc-status.el isn't really ready yet though... it is still written
using the old API (using an external program).  I didn't want to
rewrite it for real until something goes in.

Dan> Another possible use that comes to mind: emit some kind of notification
Dan> when a (long) compilation finishes.

Yeah.  This is easy:

(defvar compilation-status-icon nil)

(defun compilation-finish-notification (buffer status)
  (unless compilation-status-icon
    ;; No need for it to be visible; we just want to post
    ;; notifications for now.
    (setq compilation-status-icon (make-status-icon '((visible . nil)))))
  (let ((ok (string-match "finished" status)))
    (show-status-icon-message compilation-status-icon
                              (if ok
                                  "Compilation finished"
                                "Compilation failed")
                              :icon (if ok 'info 'warning))))

(add-to-list 'compilation-finish-functions #'compilation-finish-notification)

Currently I have code (using my old zenity-based approach) for ERC,
EMMS (a pause/play button), and calendar (clicking shows the calendar,
and in theory appointments are notifications, though this has never
really worked).  Compilation mode would be useful (IMO particularly if
the compilation buffer is not visible; you could also animate the icon
during compilation).  Mail notification would be easy.  There are
probably other possibilities too; an emacs-based replacement for the
Gnome sticky notes applet, for instance, would be pretty simple.

The other thing I wanted to do is add menu support.  This looks kind
of complicated, though.  Also there's an oddity in that the current
frame at the time the menu pops up may or may not be related to the
display that the status icon appears on.  Maybe this doesn't matter?

This all reminds me, though -- I need to implement status-icon-p and

A few more specific questions for Emacs maintainers:

* The current code is Gtk-only.  Is this ok?  Or do I need to get
  someone to write Windows and MacOS ports first?  (I don't know much
  about those platforms and I have no idea whether the same
  functionality works there or not.)

* Is the current API ok?  modify-status-icon-parameters uses an alist,
  like modify-frame-parameters.  But show-status-icon-message uses
  keyword arguments, since that seemed nicer there.  How's that?
  What about the names of the keywords and alist keys?

* I considered making a status icon a special kind of frame, but this
  looked a lot more difficult.  Plus, I wasn't sure what the benefit
  would be.  The current code is a bit strange though -- a status icon
  appears on some display, currently just whatever the default is.
  But if you have multiple displays you may want to have a status icon
  on each.  (It is unclear to me if that is expected to work on the
  Gtk side -- the status icon code always seems to use the default
  display, so we'd have to switch displays around in the display
  manager to get this working.)

  I'm not sure what to do about the display-related oddities in
  general.  x-close-connection should probably close the related
  status icons (though we'd have to do the bookkeeping ourselves,
  since AFAICT there is no way to get this info out of Gtk).  For
  things like erc-status or a compile-finish-function, it seems weird
  to show status on an icon that may not be readily visible to the
  user.  (But maybe it is ok to punt on this one.)

* Or, to sum it all up: aside from the configury bits, what do you
  want to see before you will check this in?


reply via email to

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