X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.el;h=a5474158929857710129ed6b6b455c568a5fdc0e;hp=cbb240f31eab688920134989edde5e3e58b82420;hb=6b823b6fba4b2802f9d72f62ff4f6e44809d5449;hpb=2cc316516356f12d21e066121ce64317b3783a9f diff --git a/notmuch.el b/notmuch.el index cbb240f3..a5474158 100644 --- a/notmuch.el +++ b/notmuch.el @@ -19,6 +19,34 @@ ; ; Authors: Carl Worth +; 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 (subscription is not +; required, but is available from http://notmuchmail.org). + (require 'cl) (require 'mm-view) @@ -71,22 +99,31 @@ pattern can still test against the entire line).") (defvar notmuch-show-signature-lines-max 12 "Maximum length of signature that will be hidden by default.") -(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-command "notmuch" + "Command to run the notmuch binary.") + +(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 () @@ -251,7 +288,7 @@ buffer." (defun notmuch-reply (query-string) (switch-to-buffer (generate-new-buffer "notmuch-draft")) - (call-process "notmuch" nil t nil "reply" query-string) + (call-process notmuch-command nil t nil "reply" query-string) (goto-char (point-min)) (if (re-search-forward "^$" nil t) (progn @@ -516,7 +553,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) @@ -685,12 +722,12 @@ 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)) (save-excursion - (call-process "notmuch" nil t nil "show" thread-id) + (call-process notmuch-command nil t nil "show" thread-id) (notmuch-show-markup-messages) ) (run-hooks 'notmuch-show-hook) @@ -738,6 +775,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) @@ -760,10 +800,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 @@ -851,7 +891,7 @@ and will also appear in a buffer named \"*Notmuch errors*\"." (let ((error-buffer (get-buffer-create "*Notmuch errors*"))) (with-current-buffer error-buffer (erase-buffer)) - (if (eq (apply 'call-process "notmuch" nil error-buffer nil args) 0) + (if (eq (apply 'call-process notmuch-command nil error-buffer nil args) 0) (point) (progn (with-current-buffer error-buffer @@ -917,8 +957,8 @@ This function advances point to the next line when finished." (goto-char (point-min)) (save-excursion (if oldest-first - (call-process "notmuch" nil t nil "search" "--sort=oldest-first" query) - (call-process "notmuch" nil t nil "search" "--sort=newest-first" query)) + (call-process notmuch-command nil t nil "search" "--sort=oldest-first" query) + (call-process notmuch-command nil t nil "search" "--sort=newest-first" query)) (notmuch-search-markup-thread-ids) )) (run-hooks 'notmuch-search-hook)))