summaryrefslogtreecommitdiff
path: root/jabber-modeline.el
diff options
context:
space:
mode:
Diffstat (limited to 'jabber-modeline.el')
-rw-r--r--jabber-modeline.el98
1 files changed, 98 insertions, 0 deletions
diff --git a/jabber-modeline.el b/jabber-modeline.el
new file mode 100644
index 0000000..e322819
--- /dev/null
+++ b/jabber-modeline.el
@@ -0,0 +1,98 @@
+;; jabber-modeline.el - display jabber status in modeline
+
+;; Copyright (C) 2004 - Magnus Henoch - mange@freemail.hu
+
+;; This file is a part of jabber.el.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+(require 'jabber-presence)
+(require 'jabber-alert)
+(eval-when-compile (require 'cl))
+
+(defgroup jabber-mode-line nil
+ "Display Jabber status in mode line"
+ :group 'jabber)
+
+(defcustom jabber-mode-line-compact t
+ "Count contacts in fewer categories for compact view"
+ :group 'jabber-mode-line
+ :type 'boolean)
+
+(defvar jabber-mode-line-string nil)
+(defvar jabber-mode-line-presence nil)
+(defvar jabber-mode-line-contacts nil)
+
+(defadvice jabber-send-presence (after jsp-update-mode-line
+ (show status priority))
+ (jabber-mode-line-presence-update))
+
+(defun jabber-mode-line-presence-update ()
+ (setq jabber-mode-line-presence (if (and jabber-connections (not *jabber-disconnecting*))
+ (cdr (assoc *jabber-current-show* jabber-presence-strings))
+ "Offline")))
+
+(defun jabber-mode-line-count-contacts (&rest ignore)
+ (let ((count (list (cons "chat" 0)
+ (cons "" 0)
+ (cons "away" 0)
+ (cons "xa" 0)
+ (cons "dnd" 0)
+ (cons nil 0))))
+ (dolist (jc jabber-connections)
+ (dolist (buddy (plist-get (fsm-get-state-data jc) :roster))
+ (when (assoc (get buddy 'show) count)
+ (incf (cdr (assoc (get buddy 'show) count))))))
+ (setq jabber-mode-line-contacts
+ (if jabber-mode-line-compact
+ (format "(%d/%d/%d)"
+ (+ (cdr (assoc "chat" count))
+ (cdr (assoc "" count)))
+ (+ (cdr (assoc "away" count))
+ (cdr (assoc "xa" count))
+ (cdr (assoc "dnd" count)))
+ (cdr (assoc nil count)))
+ (apply 'format "(%d/%d/%d/%d/%d/%d)"
+ (mapcar 'cdr count))))))
+
+(define-minor-mode jabber-mode-line-mode
+ "Toggle display of Jabber status in mode lines.
+Display consists of your own status, and six numbers
+meaning the number of chatty, online, away, xa, dnd
+and offline contacts, respectively."
+ :global t :group 'jabber-mode-line
+ (setq jabber-mode-line-string "")
+ (or global-mode-string (setq global-mode-string '("")))
+ (if jabber-mode-line-mode
+ (progn
+ (add-to-list 'global-mode-string 'jabber-mode-line-string t)
+
+ (setq jabber-mode-line-string (list " "
+ 'jabber-mode-line-presence
+ " "
+ 'jabber-mode-line-contacts))
+ (put 'jabber-mode-line-string 'risky-local-variable t)
+ (put 'jabber-mode-line-presence 'risky-local-variable t)
+ (jabber-mode-line-presence-update)
+ (jabber-mode-line-count-contacts)
+ (ad-activate 'jabber-send-presence)
+ (add-hook 'jabber-post-disconnect-hook
+ 'jabber-mode-line-presence-update)
+ (add-hook 'jabber-presence-hooks
+ 'jabber-mode-line-count-contacts))))
+
+(provide 'jabber-modeline)
+
+;;; arch-tag: c03a7d3b-8811-49d4-b0e0-7ffd661d7925