[PATCH] emacs: Pretty print the numbers of matching messages.

David Edmondson dme at dme.org
Tue May 4 06:44:39 PDT 2010


Insert a separator every three digits when outputting numbers. Allow
the user to choose the separator by customizing
`notmuch-decimal-separator'. Widen the space allocated for message
counts accordingly.
---
 emacs/notmuch-hello.el |   38 +++++++++++++++++++++++++++++++-------
 1 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index bf49bb1..a6e8a47 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -91,6 +91,13 @@ So:
 	  (integer :tag "Number of characters")
 	  (float :tag "Fraction of window")))
 
+(defcustom notmuch-decimal-separator ","
+  "The string used as a decimal separator.
+
+Typically \",\" in the US and UK and \".\" in Europe."
+  :group 'notmuch
+  :type 'string)
+
 (defvar notmuch-hello-url "http://notmuchmail.org"
   "The `notmuch' web site.")
 
@@ -103,6 +110,17 @@ So:
 	 notmuch-recent-searches-max)
       (setq notmuch-hello-recent-searches (butlast notmuch-hello-recent-searches))))
 
+(defun notmuch-hello-nice-number (n)
+  (let (result)
+    (while (> n 0)
+      (push (% n 1000) result)
+      (setq n (/ n 1000)))
+    (apply #'concat
+     (number-to-string (car result))
+     (mapcar (lambda (elem)
+	      (format "%s%03d" notmuch-decimal-separator elem))
+	     (cdr result)))))
+
 (defun notmuch-hello-trim (search)
   "Trim whitespace."
   (if (string-match "^[[:space:]]*\\(.*[^[:space:]]\\)[[:space:]]*$" search)
@@ -180,9 +198,9 @@ should be. Returns a cons cell `(tags-per-line width)'."
 	  ((integerp notmuch-column-control)
 	   (max 1
 		(/ (- (window-width) notmuch-hello-indent)
-		   ;; Count is 7 wide (6 digits plus space), 1 for the space
+		   ;; Count is 9 wide (8 digits plus space), 1 for the space
 		   ;; after the name.
-		   (+ 7 1 (max notmuch-column-control widest)))))
+		   (+ 9 1 (max notmuch-column-control widest)))))
 
 	  ((floatp notmuch-column-control)
 	   (let* ((available-width (- (window-width) notmuch-hello-indent))
@@ -192,12 +210,15 @@ should be. Returns a cons cell `(tags-per-line width)'."
 	  (t
 	   (max 1
 		(/ (- (window-width) notmuch-hello-indent)
-		   ;; Count is 7 wide (6 digits plus space), 1 for the space
+		   ;; Count is 9 wide (8 digits plus space), 1 for the space
 		   ;; after the name.
-		   (+ 7 1 widest)))))))
+		   (+ 9 1 widest)))))))
 
     (cons tags-per-line (/ (- (window-width) notmuch-hello-indent
-			      (* tags-per-line (+ 7 1)))
+			      ;; Count is 9 wide (8 digits plus
+			      ;; space), 1 for the space after the
+			      ;; name.
+			      (* tags-per-line (+ 9 1)))
 			   tags-per-line))))
 
 (defun notmuch-hello-insert-tags (tag-alist widest target)
@@ -218,7 +239,9 @@ should be. Returns a cons cell `(tags-per-line width)'."
 	      (let* ((name (car elem))
 		     (query (cdr elem))
 		     (formatted-name (format "%s " name)))
-		(widget-insert (format "%6s " (notmuch-saved-search-count query)))
+		(widget-insert (format "%8s "
+				       (notmuch-hello-nice-number
+					(string-to-number (notmuch-saved-search-count query)))))
 		(if (string= formatted-name target)
 		    (setq found-target-pos (point-marker)))
 		(widget-create 'push-button
@@ -323,7 +346,8 @@ should be. Returns a cons cell `(tags-per-line width)'."
 		     :notify (lambda (&rest ignore)
 			       (notmuch-hello-update))
 		     :help-echo "Refresh"
-		     (car (process-lines notmuch-command "count")))
+		     (notmuch-hello-nice-number
+		      (string-to-number (car (process-lines notmuch-command "count")))))
       (widget-insert " messages (that's not much mail).\n"))
 
     (let ((found-target-pos nil)
-- 
1.7.0



More information about the notmuch mailing list