]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.el
buttonize signatures as well
[notmuch] / notmuch.el
index 4b2936a9645b980b8654ec71788e010c17ab3c0b..93f3914fb7ded43b8913a6b7cfcae036e7778102 100644 (file)
 ;
 ; Authors: Carl Worth <cworth@cworth.org>
 
+; This is an emacs-based interface to the notmuch mail system.
+;
+; You will first need to have the notmuch program installed and have a
+; notmuch database built in order to use this. See
+; http://notmuchmail.org for details.
+;
+; To install this software, copy it to a directory that is on the
+; `load-path' variable within emacs (a good candidate is
+; /usr/local/share/emacs/site-lisp). If you are viewing this from the
+; notmuch source distribution then you can simply run:
+;
+;      sudo make install-emacs
+;
+; to install it.
+;
+; Then, to actually run it, add:
+;
+;      (require 'notmuch)
+;
+; to your ~/.emacs file, and then run "M-x notmuch" from within emacs,
+; or run:
+;
+;      emacs -f notmuch
+;
+; Have fun, and let us know if you have any comment, questions, or
+; kudos: Notmuch list <notmuch@notmuchmail.org> (subscription is not
+; required, but is available from http://notmuchmail.org).
+
 (require 'cl)
 (require 'mm-view)
 
@@ -74,22 +102,28 @@ pattern can still test against the entire line).")
 (defvar notmuch-command "notmuch"
   "Command to run the notmuch binary.")
 
-(set 'notmuch-show-message-begin-regexp    "\fmessage{")
-(set 'notmuch-show-message-end-regexp      "\fmessage}")
-(set 'notmuch-show-header-begin-regexp     "\fheader{")
-(set 'notmuch-show-header-end-regexp       "\fheader}")
-(set 'notmuch-show-body-begin-regexp       "\fbody{")
-(set 'notmuch-show-body-end-regexp         "\fbody}")
-(set 'notmuch-show-attachment-begin-regexp "\fattachment{")
-(set 'notmuch-show-attachment-end-regexp   "\fattachment}")
-(set 'notmuch-show-part-begin-regexp       "\fpart{")
-(set 'notmuch-show-part-end-regexp         "\fpart}")
-(set 'notmuch-show-marker-regexp "\f\\(message\\|header\\|body\\|attachment\\|part\\)[{}].*$")
-
-(set 'notmuch-show-id-regexp "\\(id:[^ ]*\\)")
-(set 'notmuch-show-depth-regexp " depth:\\([0-9]*\\) ")
-(set 'notmuch-show-filename-regexp "filename:\\(.*\\)$")
-(set 'notmuch-show-tags-regexp "(\\([^)]*\\))$")
+(defvar notmuch-show-message-begin-regexp    "\fmessage{")
+(defvar notmuch-show-message-end-regexp      "\fmessage}")
+(defvar notmuch-show-header-begin-regexp     "\fheader{")
+(defvar notmuch-show-header-end-regexp       "\fheader}")
+(defvar notmuch-show-body-begin-regexp       "\fbody{")
+(defvar notmuch-show-body-end-regexp         "\fbody}")
+(defvar notmuch-show-attachment-begin-regexp "\fattachment{")
+(defvar notmuch-show-attachment-end-regexp   "\fattachment}")
+(defvar notmuch-show-part-begin-regexp       "\fpart{")
+(defvar notmuch-show-part-end-regexp         "\fpart}")
+(defvar notmuch-show-marker-regexp "\f\\(message\\|header\\|body\\|attachment\\|part\\)[{}].*$")
+
+(defvar notmuch-show-id-regexp "\\(id:[^ ]*\\)")
+(defvar notmuch-show-depth-regexp " depth:\\([0-9]*\\) ")
+(defvar notmuch-show-filename-regexp "filename:\\(.*\\)$")
+(defvar notmuch-show-tags-regexp "(\\([^)]*\\))$")
+
+(defvar notmuch-show-parent-buffer nil)
+(defvar notmuch-show-body-read-visible nil)
+(defvar notmuch-show-citations-visible nil)
+(defvar notmuch-show-signatures-visible nil)
+(defvar notmuch-show-headers-visible nil)
 
 ; XXX: This should be a generic function in emacs somewhere, not here
 (defun point-invisible-p ()
@@ -456,10 +490,17 @@ which this thread was originally shown."
              (forward-line))
            (let ((overlay (make-overlay beg-sub (point))))
              (overlay-put overlay 'invisible 'notmuch-show-citation)
-             (overlay-put overlay 'before-string
-                          (concat indent
-                                  "[" (number-to-string (count-lines beg-sub (point)))
-                                  "-line citation. Press 'c' to show.]\n")))))
+              (let (
+                    (p (point))
+                    (cite-button-text (concat "[" (number-to-string (count-lines beg-sub (point)))
+                                              "-line citation. Press 'c' to show.]"))
+                    )
+                (goto-char (- beg-sub 1))
+                (insert (concat "\n" indent))
+                (insert-button cite-button-text)
+                (insert "\n")
+                (goto-char (+ (length cite-button-text) p))
+              ))))
       (move-to-column depth)
       (if (looking-at notmuch-show-signature-regexp)
          (let ((sig-lines (- (count-lines beg-sub end) 1)))
@@ -467,11 +508,11 @@ which this thread was originally shown."
                (progn
                  (overlay-put (make-overlay beg-sub end)
                               'invisible 'notmuch-show-signature)
-                 (overlay-put (make-overlay beg (- beg-sub 1))
-                              'after-string
-                              (concat "\n" indent
-                                      "[" (number-to-string sig-lines)
-                                      "-line signature. Press 's' to show.]"))
+                  (goto-char (- beg-sub 1))
+                  (insert (concat "\n" indent))
+                  (insert-button (concat "[" (number-to-string sig-lines)
+                                         "-line signature. Press 's' to show.]"))
+                  (insert "\n")
                  (goto-char end)))))
       (forward-line))))
 
@@ -519,7 +560,7 @@ which this thread was originally shown."
   (let ((beg (point-marker)))
     (end-of-line)
     ; Inverse video for subject
-    (overlay-put (make-overlay beg (point)) 'face '((cons :inverse-video t)))
+    (overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
     (forward-line 2)
     (let ((beg-hidden (point-marker)))
       (re-search-forward notmuch-show-header-end-regexp)
@@ -688,7 +729,7 @@ thread from that buffer can be show when done with this one)."
     (let ((proc (get-buffer-process (current-buffer)))
          (inhibit-read-only t))
       (if proc
-         (error "notmuch search process already running for query `%s'" query)
+         (error "notmuch search process already running for query `%s'" thread-id)
        )
       (erase-buffer)
       (goto-char (point-min))
@@ -741,6 +782,9 @@ thread from that buffer can be show when done with this one)."
   "Keymap for \"notmuch search\" buffers.")
 (fset 'notmuch-search-mode-map notmuch-search-mode-map)
 
+(defvar notmuch-search-query-string)
+(defvar notmuch-search-oldest-first)
+
 (defun notmuch-search-scroll-up ()
   "Scroll up, moving point to last message in thread if at end."
   (interactive)
@@ -763,10 +807,10 @@ thread from that buffer can be show when done with this one)."
       (goto-char (window-start))
     (scroll-down nil)))
 
-(defun notmuch-search-goto-last-thread (&optional arg)
+(defun notmuch-search-goto-last-thread ()
   "Move point to the last thread in the buffer."
-  (interactive "^P")
-  (end-of-buffer arg)
+  (interactive)
+  (goto-char (point-max))
   (forward-line -1))
 
 ;;;###autoload