]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-hello.el
NEWS: describe easier FCC configuration
[notmuch] / emacs / notmuch-hello.el
index 1b59ef19941656a30d468ce8e848ac5107c5f980..13583877a604464fd88b5f5bb18ec828de61ed64 100644 (file)
   (+ (/ dividend divisor)
      (if (> (% dividend divisor) 0) 1 0)))
 
-(defun notmuch-hello-reflect (list width)
-  "Reflect a `width' wide matrix represented by `list' along the
+(defun notmuch-hello-reflect-generate-row (ncols nrows row list)
+  (let ((len (length list)))
+    (loop for col from 0 to (- ncols 1)
+         collect (let ((offset (+ (* nrows col) row)))
+                   (if (< offset len)
+                       (nth offset list)
+                     ;; Don't forget to insert an empty slot in the
+                     ;; output matrix if there is no corresponding
+                     ;; value in the input matrix.
+                     nil)))))
+
+(defun notmuch-hello-reflect (list ncols)
+  "Reflect a `ncols' wide matrix represented by `list' along the
 diagonal."
   ;; Not very lispy...
-  (let* ((len (length list))
-        (nrows (notmuch-hello-roundup len width)))
+  (let ((nrows (notmuch-hello-roundup (length list) ncols)))
     (loop for row from 0 to (- nrows 1)
-         append (loop for col from 0 to (- width 1)
-                      ;; How could we calculate the offset just once
-                      ;; per inner-loop?
-                      if (< (+ (* nrows col) row) len)
-                      collect (nth (+ (* nrows col) row) list)
-                      else
-                      ;; Don't forget to insert an empty slot in the
-                      ;; output matrix if there is no corresponding
-                      ;; value in the input matrix.
-                      collect nil))))
+         append (notmuch-hello-reflect-generate-row ncols nrows row list))))
 
 (defun notmuch-hello-widget-search (widget &rest ignore)
   (notmuch-search (widget-get widget
@@ -179,10 +180,10 @@ diagonal."
                ;; 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"))))
+               (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
@@ -272,7 +273,7 @@ diagonal."
                               (notmuch-hello-update))
                     :help-echo "Refresh"
                     (car (process-lines notmuch-command "count")))
-      (widget-insert " messages (that's not much mail).\n\n"))
+      (widget-insert " messages (that's not much mail).\n"))
 
     (let ((found-target-pos nil)
          (final-target-pos nil))
@@ -291,7 +292,7 @@ diagonal."
             (widest (max saved-widest alltags-widest)))
 
        (when saved-alist
-         (widget-insert "Saved searches: ")
+         (widget-insert "\nSaved searches: ")
          (widget-create 'push-button
                         :notify (lambda (&rest ignore)
                                   (customize-variable 'notmuch-saved-searches))
@@ -304,18 +305,16 @@ diagonal."
                (setq final-target-pos found-target-pos))
            (indent-rigidly start (point) notmuch-hello-indent)))
 
-       (let ((start (point)))
-         (widget-insert "\nSearch: ")
-         (setq notmuch-hello-search-bar-marker (point-marker))
-         (widget-create 'editable-field
-                        ;; Leave some space at the start and end of the
-                        ;; search boxes.
-                        :size (max 8 (- (window-width) (* 2 notmuch-hello-indent)
-                                        (length "Search: ")))
-                        :action (lambda (widget &rest ignore)
-                                  (notmuch-hello-search (widget-value widget))))
-         (widget-insert "\n")
-         (indent-rigidly start (point) notmuch-hello-indent))
+       (widget-insert "\nSearch: ")
+       (setq notmuch-hello-search-bar-marker (point-marker))
+       (widget-create 'editable-field
+                      ;; Leave some space at the start and end of the
+                      ;; search boxes.
+                      :size (max 8 (- (window-width) notmuch-hello-indent
+                                      (length "Search: ")))
+                      :action (lambda (widget &rest ignore)
+                                (notmuch-hello-search (widget-value widget))))
+       (widget-insert "\n")
 
        (when notmuch-hello-recent-searches
          (widget-insert "\nRecent searches: ")
@@ -407,9 +406,13 @@ diagonal."
 
       (widget-setup)
 
-      (goto-char final-target-pos)
-      (if (not (widget-at))
-         (widget-forward 1)))))
+      (when final-target-pos
+       (goto-char final-target-pos)
+       (unless (widget-at)
+         (widget-forward 1)))
+
+      (unless (widget-at)
+       (notmuch-hello-goto-search)))))
 
 ;;;###autoload
 (defun notmuch-folder ()