From 1e1871154341cdd3413fe3f32e3aae477826d815 Mon Sep 17 00:00:00 2001 From: David Edmondson Date: Tue, 27 Apr 2010 08:00:44 +0100 Subject: [PATCH] emacs: Fix column alignment in `notmuch-hello-insert-tags' Re-working the saved search/tag insertion to buttonize only the name of the saved search/tag plus one space broke the calculation of how much filler is required to complete the column, resulting in lines wider than the window. --- emacs/notmuch-hello.el | 44 ++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index cbe414f1..50d89110 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -148,8 +148,9 @@ diagonal." (defun notmuch-hello-insert-tags (tag-alist widest target) (let* ((tags-per-line (max 1 (/ (- (window-width) notmuch-hello-indent) - ;; Count is 7 wide, 1 for the space - ;; after the name. + ;; Count is 7 wide (6 digits plus + ;; space), 1 for the space after the + ;; name. (+ 7 1 widest)))) (count 0) (reordered-list (notmuch-hello-reflect tag-alist tags-per-line)) @@ -159,21 +160,30 @@ diagonal." (found-target-pos nil)) ;; dme: It feels as though there should be a better way to ;; implement this loop than using an incrementing counter. - (loop for elem in reordered-list - do (progn - ;; (not elem) indicates an empty slot in the matrix. - (when elem - (widget-insert (format "%6s " (notmuch-saved-search-count (cdr elem)))) - (if (string= (format "%s " (car elem)) target) - (setq found-target-pos (point-marker))) - (widget-create 'push-button - :notify #'notmuch-hello-widget-search - :notmuch-search-terms (cdr elem) - (format "%s " (car elem))) - (insert (make-string (1+ (- widest (length (car elem)))) ? ))) - (setq count (1+ count)) - (if (eq (% count tags-per-line) 0) - (widget-insert "\n")))) + (mapc (lambda (elem) + ;; (not elem) indicates an empty slot in the matrix. + (when elem + (let* ((name (car elem)) + (query (cdr elem)) + (formatted-name (format "%s " name))) + (widget-insert (format "%6s " (notmuch-saved-search-count query))) + (if (string= formatted-name target) + (setq found-target-pos (point-marker))) + (widget-create 'push-button + :notify #'notmuch-hello-widget-search + :notmuch-search-terms query + formatted-name) + ;; Insert enough space to consume the rest of the + ;; column. Because the button for the name is `(1+ + ;; (length name))' long (due to the trailing space) we + ;; can just insert `(- widest (length name))' spaces - + ;; the column separator is included in the button if + ;; `(equal widest (length name)'. + (widget-insert (make-string (- widest (length name)) ? ))) + (setq count (1+ count)) + (if (eq (% count tags-per-line) 0) + (widget-insert "\n")))) + reordered-list) ;; If the last line was not full (and hence did not include a ;; carriage return), insert one now.