From b660d78253fc559afb202f529ccba83debdd8707 Mon Sep 17 00:00:00 2001 From: Magnus Henoch Date: Sat, 7 Aug 2004 17:29:02 +0000 Subject: [PATCH] Add roster formatting options Patches applied: * mange@freemail.hu--2004-laptop/emacs-jabber--hack--0--patch-3 Add roster formatting option --- jabber-presence.el | 3 +- jabber-roster.el | 92 +++++++++++++++++++++++++++++++--------------- jabber.el | 5 --- jabber.texi | 33 +++++++++++++---- 4 files changed, 89 insertions(+), 44 deletions(-) diff --git a/jabber-presence.el b/jabber-presence.el index 14da96b..45281be 100644 --- a/jabber-presence.el +++ b/jabber-presence.el @@ -190,7 +190,8 @@ CLOSURE-DATA should be 'initial if initial roster push, nil otherwise." (setq highest-priority (or priority 0)) (put buddy 'connected (plist-get resource-plist 'connected)) (put buddy 'show (plist-get resource-plist 'show)) - (put buddy 'status (plist-get resource-plist 'status))) + (put buddy 'status (plist-get resource-plist 'status)) + (put buddy 'resource (car resource))) ;; if we have not found a connected resource yet, but this ;; disconnected resource has a status message, display it. diff --git a/jabber-roster.el b/jabber-roster.el index f75ed7e..1cc1b20 100644 --- a/jabber-roster.el +++ b/jabber-roster.el @@ -23,13 +23,39 @@ (require 'jabber-util) (require 'jabber-alert) (require 'jabber-keymap) +(require 'format-spec) (defgroup jabber-roster nil "roster display options" :group 'jabber) -(defcustom jabber-roster-line-spacing 0 - "Number of empty lines between roster items" - :type 'integer +(defcustom jabber-roster-line-format " %c %n - %s (%S)\n" + "The format specification of the lines in the roster display. + +These fields are available: + +%c \"*\" if the contact is connected, or \" \" if not +%n Nickname of contact, or JID if no nickname +%j Bare JID of contact (without resource) +%r Highest-priority resource of contact +%s Availability of contact as string (\"Online\", \"Away\" etc) +%S Status string specified by contact" + :type 'string + :group 'jabber-roster) + +(defcustom jabber-resource-line-format " %r - %s (%S), priority %p\n" + "The format specification of resource lines in the roster display. +These are displayed when `jabber-show-resources' permits it. + +These fields are available: + +%c \"*\" if the contact is connected, or \" \" if not +%n Nickname of contact, or JID if no nickname +%j Bare JID of contact (without resource) +%p Priority of this resource +%r Name of this resource +%s Availability of resource as string (\"Online\", \"Away\" etc) +%S Status string specified by resource" + :type 'string :group 'jabber-roster) (defcustom jabber-sort-order '("chat" "" "away" "dnd" "xa") @@ -149,20 +175,20 @@ bring up menus of actions. (jabber-sort-roster) (dolist (buddy *jabber-roster*) - (let ((buddy-str (concat (if (get buddy 'connected) - " * " - " ") - (if (> (length (get buddy 'name)) 0) - (get buddy 'name) - (symbol-name buddy)) - (format " - %s" (or - (cdr (assoc (get buddy 'show) jabber-presence-strings)) - (get buddy 'show))) - (if (get buddy 'status) - (format " (%s)" (jabber-fix-status (get buddy 'status)))) - (if jabber-debug-roster - (format " --- [%S] ---" (symbol-plist buddy))) - ))) + (let ((buddy-str (format-spec jabber-roster-line-format + (list + (cons ?c (if (get buddy 'connected) "*" " ")) + (cons ?n (if (> (length (get buddy 'name)) 0) + (get buddy 'name) + (symbol-name buddy))) + (cons ?j (symbol-name buddy)) + (cons ?r (or (get buddy 'resource) "")) + (cons ?s (or + (cdr (assoc (get buddy 'show) jabber-presence-strings)) + (get buddy 'show))) + (cons ?S (if (get buddy 'status) + (jabber-fix-status (get buddy 'status)) + "")))))) (add-text-properties 0 (length buddy-str) (list @@ -185,23 +211,30 @@ bring up menus of actions. ;; 'keymap ;; map ;; buddy-str)) - (insert buddy-str "\n")) + (insert buddy-str)) (when (or (eq jabber-show-resources 'always) (and (eq jabber-show-resources 'sometimes) (> (jabber-count-connected-resources buddy) 1))) (dolist (resource (get buddy 'resources)) (when (plist-get (cdr resource) 'connected) - (let ((resource-str (concat " " - (if (> (length (car resource)) 0) - (car resource) - "empty") - (format " - %s" (or - (cdr (assoc (plist-get (cdr resource) 'show) jabber-presence-strings)) - (plist-get (cdr resource) 'show))) - (if (plist-get (cdr resource) 'status) - (format " (%s)" (jabber-fix-status (plist-get (cdr resource) 'status)))) - (format ", priority %d" (plist-get (cdr resource) 'priority))))) + (let ((resource-str (format-spec jabber-resource-line-format + (list + (cons ?c "*") + (cons ?n (if (> (length (get buddy 'name)) 0) + (get buddy 'name) + (symbol-name buddy))) + (cons ?j (symbol-name buddy)) + (cons ?r (if (> (length (car resource)) 0) + (car resource) + "empty")) + (cons ?s (or + (cdr (assoc (plist-get (cdr resource) 'show) jabber-presence-strings)) + (plist-get (cdr resource) 'show))) + (cons ?S (if (plist-get (cdr resource) 'status) + (jabber-fix-status (plist-get (cdr resource) 'status)) + "")) + (cons ?p (number-to-string (plist-get (cdr resource) 'priority))))))) (add-text-properties 0 (length resource-str) (list @@ -211,8 +244,7 @@ bring up menus of actions. 'jabber-jid (format "%s/%s" (symbol-name buddy) (car resource))) resource-str) - (insert resource-str "\n"))))) - (insert (make-string jabber-roster-line-spacing ?\n))) + (insert resource-str)))))) (insert "__________________________________") (goto-char (point-min)) (setq buffer-read-only t) diff --git a/jabber.el b/jabber.el index c1dd349..bc2eb77 100644 --- a/jabber.el +++ b/jabber.el @@ -91,11 +91,6 @@ (defgroup jabber-debug nil "debugging options" :group 'jabber) -(defcustom jabber-debug-roster nil - "show debugging information on roster" - :type 'boolean - :group 'jabber-debug) - (defcustom jabber-debug-log-xml nil "log all XML i/o in *-jabber-xml-log-*" :type 'boolean diff --git a/jabber.texi b/jabber.texi index 4a5e32f..6ad433a 100644 --- a/jabber.texi +++ b/jabber.texi @@ -536,7 +536,8 @@ priority during a session with @code{jabber-send-presence}. @vindex jabber-sort-order @vindex jabber-show-resources -@vindex jabber-roster-line-spacing +@vindex jabber-roster-line-format +@vindex jabber-resource-line-format @code{jabber-sort-order} controls how roster items are sorted by presence. It is a list containing strings corresponding to show @@ -546,9 +547,29 @@ status (@pxref{Presence}) or @code{nil}, which represents offline. are shown in the roster buffer. The default is to show resources when a contact has more than one connected resource. -@code{jabber-roster-line-spacing} specifies the number of blank lines -between each roster item. The default is zero, but you might want a -less compact look. +@code{jabber-roster-line-format} specifies how the entry for each +contact looks. It is a string where some characters are special if +preceded by a percent sign: + +@table @code +@item %c +"*" if the contact is connected, or " " if not +@item %n +Nickname of contact, or JID if no nickname +@item %j +Bare JID of contact (without resource) +@item %r +Highest-priority resource of contact +@item %s +Availability of contact as string ("Online", "Away" etc) +@item %S +Status string specified by contact +@end table + +@code{jabber-resource-line-format} is nearly identical, except that +the values correspond to the values of the resource in question, and +that the @code{%p} escape is available, which inserts the priority of +the resource. @node Customizing alerts, Debug options, Customizing the roster buffer, Customization @section Customizing alerts @@ -703,15 +724,11 @@ The info alert hooks take an extra argument, as could be expected. @node Debug options, , Customizing alerts, Customization @section Debug options -@vindex jabber-debug-roster @vindex jabber-debug-log-xml These settings provide a lot of information which is usually not very interesting, but can be useful for debugging various things. -@code{jabber-debug-roster} toggles debug output in the roster. This -means that you can see the properties of each contact. - @code{jabber-debug-log-xml} activates XML logging. All XML stanzas sent and received are logged in the buffer @code{*-jabber-xml-log-*} in list format. @xref{XML representation}.