Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 8B02C4196F0 for ; Tue, 27 Apr 2010 00:00:38 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] autolearn=ham Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XMxjARX42NHx for ; Tue, 27 Apr 2010 00:00:36 -0700 (PDT) Received: from mail-ww0-f53.google.com (mail-ww0-f53.google.com [74.125.82.53]) by olra.theworths.org (Postfix) with ESMTP id 5F381431FC1 for ; Tue, 27 Apr 2010 00:00:36 -0700 (PDT) Received: by wwi18 with SMTP id 18so984078wwi.26 for ; Tue, 27 Apr 2010 00:00:35 -0700 (PDT) Received: by 10.216.187.142 with SMTP id y14mr3849386wem.114.1272351634997; Tue, 27 Apr 2010 00:00:34 -0700 (PDT) Received: from ut.hh.sledj.net (host83-217-165-81.dsl.vispa.com [83.217.165.81]) by mx.google.com with ESMTPS id z3sm5053974wbs.22.2010.04.27.00.00.33 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 27 Apr 2010 00:00:34 -0700 (PDT) Received: by ut.hh.sledj.net (Postfix, from userid 1000) id 07CB059413B; Tue, 27 Apr 2010 08:00:46 +0100 (BST) From: dme@dme.org To: notmuch@notmuchmail.org Subject: [PATCH] emacs: Fix column alignment in `notmuch-hello-insert-tags' Date: Tue, 27 Apr 2010 08:00:44 +0100 Message-Id: <1272351644-11843-1-git-send-email-dme@dme.org> X-Mailer: git-send-email 1.7.0 X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Apr 2010 07:00:38 -0000 From: David Edmondson 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 files changed, 27 insertions(+), 17 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index cbe414f..50d8911 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. -- 1.7.0