emacs: Pretty print the numbers of matching messages.

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.
This commit is contained in:
David Edmondson 2010-05-04 14:44:39 +01:00 committed by Carl Worth
parent 9ccd978665
commit 636925b40b

View file

@ -91,6 +91,13 @@ So:
(integer :tag "Number of characters") (integer :tag "Number of characters")
(float :tag "Fraction of window"))) (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" (defvar notmuch-hello-url "http://notmuchmail.org"
"The `notmuch' web site.") "The `notmuch' web site.")
@ -103,6 +110,17 @@ So:
notmuch-recent-searches-max) notmuch-recent-searches-max)
(setq notmuch-hello-recent-searches (butlast notmuch-hello-recent-searches)))) (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) (defun notmuch-hello-trim (search)
"Trim whitespace." "Trim whitespace."
(if (string-match "^[[:space:]]*\\(.*[^[:space:]]\\)[[:space:]]*$" search) (if (string-match "^[[:space:]]*\\(.*[^[:space:]]\\)[[:space:]]*$" search)
@ -175,9 +193,9 @@ should be. Returns a cons cell `(tags-per-line width)'."
((integerp notmuch-column-control) ((integerp notmuch-column-control)
(max 1 (max 1
(/ (- (window-width) notmuch-hello-indent) (/ (- (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. ;; after the name.
(+ 7 1 (max notmuch-column-control widest))))) (+ 9 1 (max notmuch-column-control widest)))))
((floatp notmuch-column-control) ((floatp notmuch-column-control)
(let* ((available-width (- (window-width) notmuch-hello-indent)) (let* ((available-width (- (window-width) notmuch-hello-indent))
@ -187,12 +205,15 @@ should be. Returns a cons cell `(tags-per-line width)'."
(t (t
(max 1 (max 1
(/ (- (window-width) notmuch-hello-indent) (/ (- (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. ;; after the name.
(+ 7 1 widest))))))) (+ 9 1 widest)))))))
(cons tags-per-line (/ (- (window-width) notmuch-hello-indent (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)))) tags-per-line))))
(defun notmuch-hello-insert-tags (tag-alist widest target) (defun notmuch-hello-insert-tags (tag-alist widest target)
@ -213,7 +234,9 @@ should be. Returns a cons cell `(tags-per-line width)'."
(let* ((name (car elem)) (let* ((name (car elem))
(query (cdr elem)) (query (cdr elem))
(formatted-name (format "%s " name))) (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) (if (string= formatted-name target)
(setq found-target-pos (point-marker))) (setq found-target-pos (point-marker)))
(widget-create 'push-button (widget-create 'push-button
@ -353,7 +376,8 @@ Complete list of currently available key bindings:
:notify (lambda (&rest ignore) :notify (lambda (&rest ignore)
(notmuch-hello-update)) (notmuch-hello-update))
:help-echo "Refresh" :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")) (widget-insert " messages (that's not much mail).\n"))
(let ((found-target-pos nil) (let ((found-target-pos nil)