unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: David Edmondson <dme@dme.org>
To: notmuch@notmuchmail.org
Subject: [PATCH 07/13] emacs: Allow tuning of the tag/saved search layout.
Date: Wed, 19 May 2010 08:03:34 +0100	[thread overview]
Message-ID: <1274252620-1249-8-git-send-email-dme@dme.org> (raw)
In-Reply-To: <1274252620-1249-1-git-send-email-dme@dme.org>

Add `notmuch-column-control', which has three potential sets of
values:

- t: automatically calculate the number of columns per line based on
  the tags to be shown and the window width,
- an integer: a lower bound on the number of characters that will be
  used to display each column,
- a float: a fraction of the window width that is the lower bound on
  the number of characters that should be used for each column.

So:
- if you would like two columns of tags, set this to 0.5.
- if you would like a single column of tags, set this to 1.0.
- if you would like tags to be 30 characters wide, set this to
  30.
- if you don't want to worry about all of this nonsense, leave
  this set to `t'.
---
 emacs/notmuch-hello.el |   63 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index 1358387..acf40bc 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -65,6 +65,32 @@
   "Background colour for the notmuch logo."
   :group 'notmuch)
 
+(defcustom notmuch-column-control t
+  "Controls the number of columns for saved searches/tags in notmuch view.
+
+This variable has three potential sets of values:
+
+- t: automatically calculate the number of columns possible based
+  on the tags to be shown and the window width,
+- an integer: a lower bound on the number of characters that will
+  be used to display each column,
+- a float: a fraction of the window width that is the lower bound
+  on the number of characters that should be used for each
+  column.
+
+So:
+- if you would like two columns of tags, set this to 0.5.
+- if you would like a single column of tags, set this to 1.0.
+- if you would like tags to be 30 characters wide, set this to
+  30.
+- if you don't want to worry about all of this nonsense, leave
+  this set to `t'."
+  :group 'notmuch
+  :type '(choice
+	  (const :tag "Automatically calculated" t)
+	  (integer :tag "Number of characters")
+	  (float :tag "Fraction of window")))
+
 (defvar notmuch-hello-url "http://notmuchmail.org"
   "The `notmuch' web site.")
 
@@ -146,13 +172,38 @@ diagonal."
 (defun notmuch-saved-search-count (search)
   (car (process-lines notmuch-command "count" search)))
 
+(defun notmuch-hello-tags-per-line (widest)
+  "Determine how many tags to show per line and how wide they
+should be. Returns a cons cell `(tags-per-line width)'."
+  (let ((tags-per-line
+	 (cond
+	  ((integerp notmuch-column-control)
+	   (max 1
+		(/ (- (window-width) notmuch-hello-indent)
+		   ;; Count is 7 wide (6 digits plus space), 1 for the space
+		   ;; after the name.
+		   (+ 7 1 (max notmuch-column-control widest)))))
+
+	  ((floatp notmuch-column-control)
+	   (let* ((available-width (- (window-width) notmuch-hello-indent))
+		  (proposed-width (max (* available-width notmuch-column-control) widest)))
+	     (floor available-width proposed-width)))
+
+	  (t
+	   (max 1
+		(/ (- (window-width) notmuch-hello-indent)
+		   ;; Count is 7 wide (6 digits plus space), 1 for the space
+		   ;; after the name.
+		   (+ 7 1 widest)))))))
+
+    (cons tags-per-line (/ (- (window-width) notmuch-hello-indent
+			      (* tags-per-line (+ 7 1)))
+			   tags-per-line))))
+
 (defun notmuch-hello-insert-tags (tag-alist widest target)
-  (let* ((tags-per-line (max 1
-			     (/ (- (window-width) notmuch-hello-indent)
-				;; Count is 7 wide (6 digits plus
-				;; space), 1 for the space after the
-				;; name.
-				(+ 7 1 widest))))
+  (let* ((tags-and-width (notmuch-hello-tags-per-line widest))
+	 (tags-per-line (car tags-and-width))
+	 (widest (cdr tags-and-width))
 	 (count 0)
 	 (reordered-list (notmuch-hello-reflect tag-alist tags-per-line))
 	 ;; Hack the display of the buttons used.
-- 
1.7.1

  parent reply	other threads:[~2010-05-19  8:55 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-19  7:03 patches for 0.4 David Edmondson
2010-05-19  7:03 ` [PATCH 01/13] emacs: Usability improvements for `notmuch-hello' David Edmondson
2010-05-19  7:03 ` [PATCH 02/13] notmuch: Fix off-by-one errors if a header is >200 characters long David Edmondson
2010-05-19  7:03 ` [PATCH 03/13] emacs: Adjust comment to avoid confusing font-lock David Edmondson
2010-05-19  7:03 ` [PATCH 04/13] emacs: Display non-matching authors with a different face David Edmondson
2010-05-19  7:03 ` [PATCH 05/13] emacs: Set the `face' property rather than `font-lock-face' David Edmondson
2010-05-19  7:03 ` [PATCH 06/13] emacs: Allow control over faces for search mode columns David Edmondson
2010-05-19  7:03 ` David Edmondson [this message]
2010-05-19  7:03 ` [PATCH 08/13] emacs: Reuse rather than reinvent message header filtering David Edmondson
2010-05-19  7:03 ` [PATCH 09/13] emacs: Avoid runtime use of `cl' David Edmondson
2010-05-19  7:03 ` [PATCH 10/13] emacs: In search mode, truncate authors using invisible text David Edmondson
2010-06-04  2:13   ` Carl Worth
2010-05-19  7:03 ` [PATCH 11/13] emacs: Pretty print the numbers of matching messages David Edmondson
2010-05-19  7:03 ` [PATCH 12/13] emacs: Tags should be shown with `notmuch-tag-face' David Edmondson
2010-05-19  7:03 ` [PATCH 13/13] emacs: Allow the display of absolute dates in the header line David Edmondson
2010-06-04  2:20 ` patches for 0.4 Carl Worth
2010-06-07 13:51   ` David Edmondson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1274252620-1249-8-git-send-email-dme@dme.org \
    --to=dme@dme.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).