* more changes to emacs frontend

This commit is contained in:
Dirk-Jan C. Binnema
2011-08-02 08:11:04 +03:00
parent 47073006d2
commit 8e83a1c952
4 changed files with 67 additions and 29 deletions

View File

@ -56,6 +56,8 @@ notation) for the mail view and in replied/forwarded message quotations")
(defface mu-size-face '((t (:foreground "#889f7f"))) "")
(defface mu-body-face '((t (:foreground "#dcdccc"))) "")
(defface mu-flag-face '((t (:foreground "#dc56cc"))) "")
(defface mu-flag-face '((t (:foreground "#7f6677"))) "")
(defface mu-unread-face '((t (:bold t))) "")
(defface mu-face '((t (:foreground "Gray" :italic t))) "")
@ -90,6 +92,13 @@ etc.)"
(:subject . 40)))
(setq mu-find-date-format "%x %X")
(setq mu-header-fields
'( :from
:to
:subject
:date
:path))
(setq mu-own-address-regexp "djcb\\|diggler\\|bulkmeel")
(defun mu-ask-key (prompt)
@ -104,7 +113,8 @@ e.g. 'Reply to [a]ll or [s]ender only; returns the character chosen"
(let ((kar)
(prompt (replace-regexp-in-string
"\\[\\(.\\)\\]"
(lambda(s) (propertize (substring s 1 -1) 'face 'highlight))
(lambda(s)
(concat "[" (propertize (substring s 1 -1) 'face 'highlight) "]"))
prompt)))
(while (not kar)
(setq kar (read-char-exclusive prompt))
@ -124,17 +134,39 @@ viewing a message"
(unless path (message "No message at point"))
path))
(defun mu-reply ()
"reply to the message at point"
(interactive)
(let ((path (mu-get-path)))
(when path (mu-message-reply path))))
(defun mu-forward ()
"forward the message at point"
(interactive)
(let ((path (mu-find-get-path)))
(when path (mu-message-forward path))))
;; The message sexp looks something like:
;; (
;; :from (("Donald Duck" . "donald@example.com"))
;; :to (("Mickey Mouse" . "mickey@example.com"))
;; :subject "Wicked stuff"
;; :date (20023 26572 0)
;; :size 15165
;; :msgid "foobar32423847ef23@pluto.net"
;; :path "/home/mickey/Maildir/inbox/cur/1312254065_3.32282.pluto,4cd5bd4e9:2,"
;; :priority high
;; :flags (new unread)
;; :body-txt " <message body>"
;; )
(defun mu-get-message (path)
"use 'mu view --format=sexp' to get the message at PATH in the
form of an s-expression; parse this s-expression and return the
Lisp data as a plist. Returns nil in case of error"
(if (not (file-readable-p path))
(progn (message "Message is not readable") nil)
(let* ((cmd (concat mu-binary " view --format=sexp " path))
(str (shell-command-to-string cmd))
(msglst (read-from-string str)))
(if (msglst)
(car msglist)
(progn (message "Failed to parse message") nil)))))
(defun mu-move-to-updated-path (path newflags)
"move msg to an updated path based on newflags"
;; TODO
)
;; todo: check for unhandled marks
(defun mu-quit-buffer ()

View File

@ -66,6 +66,7 @@ the mu find output")
(setq mu-buf (substring mu-buf (match-end 0)))
(setq eom (string-match mu-eom mu-buf)))))))
(defun mu-find-process-sentinel (proc msg)
"Check the mu-find process upon completion"
(let ((status (process-status proc))
@ -89,7 +90,12 @@ the mu find output")
(save-excursion
(goto-char (point-max))
(insert (mu-str text)))))))))
;; Note, the 'mu find --format=sexp' sexp is almost the same as the ones that
;; 'mu view --format=sexp' produces (see mu-get-message), with the difference
;; that former may give more than one result, and that mu-find output comes from
;; the database rather than file, and does _not_ contain the message body
(defun mu-find (expr)
"search in the mu database"
(interactive "s[mu] match expr: ")

View File

@ -41,10 +41,6 @@
(defun mu-message-user-agent ()
(format "mu %s; emacs %s" (mu-binary-version) emacs-version))
(defun mu-message-attribution (msg)
"get an attribution line for a quoted message"
(format "On %s, %s wrote:\n"
@ -120,9 +116,15 @@ create a forwarded message. After creation, switch to the message editor"
(switch-to-buffer buf))))
(defun mu-message-reply (path)
"create a reply to the message at PATH; After creation, switch
(defun mu-message-reply ()
"create a reply to the message at point; After creation, switch
to the message editor"
(let ((path (mu-get-path)))
(when path
(let ())
(mu-ask-key "Reply to [s]ender only or to [a]ll?")
(mu-message-reply-or-forward path))

View File

@ -33,18 +33,12 @@
'( :from
:to
:subject
:date)
:date
:path)
"list of header fields to display in the message view")
(defconst mu-view-buffer-name " *mu-view*")
(defun mu-view-get (path)
"display the email message at PATH"
(let* ((cmd (concat mu-binary " view --format=sexp " path))
(str (shell-command-to-string cmd))
(msglst (read-from-string str)))
(when msglst (car msglst))))
(defun mu-view-header (field val val-face)
"get a header string (like 'Subject: foo')"
(when val
@ -68,12 +62,12 @@
(with-temp-buffer
(insert (plist-get msg :body-html))
(html2text)
(buffer-string))'face face))
(buffer-string)) 'face face))
(t "")))
(defun mu-view-message (path)
"display the email message at PATH"
(let ((msg (mu-view-get path)))
(let ((msg (mu-get-message path)))
(when msg
(concat
(mapconcat
@ -89,6 +83,8 @@
(mu-view-header-contact "Bcc" (plist-get msg :bcc) 'mu-to-face))
(:subject
(mu-view-header "Subject" (plist-get msg :subject) 'mu-subject-face))
(:path
(mu-view-header "Path" (plist-get msg :path) 'mu-path-face))
(:date
(mu-view-header "Date"
(format-time-string mu-date-format-long
@ -99,7 +95,9 @@
))))
(defun mu-view (path)
"display message at PATH in a new buffer"
"display message at PATH in a new buffer; note that the action
of viewing a message may cause it to be moved/renamed; this
function returns the resulting name"
(interactive)
(let ((str (mu-view-message path))
(buf (get-buffer mu-view-buffer-name)))