* mm updates (add menus for view, headers)

This commit is contained in:
djcb 2011-10-18 10:39:49 +01:00
parent ac6c5b4598
commit f51e78066e
3 changed files with 175 additions and 112 deletions

View File

@ -170,49 +170,83 @@ if provided, or at the end of the buffer otherwise."
;;; hdrs-mode and mode-map ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar mm/hdrs-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "s" 'mm/search)
(define-key map "q" 'mm/quit-buffer)
(define-key map "o" 'mm/change-sort)
(define-key map "g" 'mm/rerun-search)
;; navigation
(define-key map "n" 'mm/next-header)
(define-key map "p" 'mm/prev-header)
(define-key map "j" 'mm/jump-to-maildir)
;; marking/unmarking/executing
(define-key map "m" 'mm/mark-for-move)
(define-key map "d" 'mm/mark-for-trash)
(define-key map (kbd "<backspace>") 'mm/mark-for-trash)
(define-key map "D" 'mm/mark-for-delete)
(define-key map (kbd "<delete>") 'mm/mark-for-delete)
(define-key map "u" 'mm/unmark)
(define-key map "U" 'mm/unmark-all)
(define-key map "x" 'mm/execute-marks)
(define-key map " " 'mm/select)
(define-key map "*" 'mm/select)
;; message composition
(define-key map "r" 'mm/compose-reply)
(define-key map "f" 'mm/compose-forward)
(define-key map "c" 'mm/compose-new)
(define-key map "e" 'mm/edit-draft)
(define-key map (kbd "RET") 'mm/view-message)
map)
(setq mm/hdrs-mode-map nil)
(defvar mm/hdrs-mode-map nil
"Keymap for *mm-headers* buffers.")
(unless mm/hdrs-mode-map
(setq mm/hdrs-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "s" 'mm/search)
(define-key map "q" 'mm/quit-buffer)
;; (define-key map "o" 'mm/change-sort)
(define-key map "g" 'mm/rerun-search)
;; navigation
(define-key map "n" 'mm/next-header)
(define-key map "p" 'mm/prev-header)
(define-key map "j" 'mm/jump-to-maildir)
;; marking/unmarking/executing
(define-key map "m" 'mm/mark-for-move)
(define-key map (kbd "<backspace>") 'mm/mark-for-trash)
(define-key map "d" 'mm/mark-for-trash)
(define-key map (kbd "<delete>") 'mm/mark-for-delete)
(define-key map "D" 'mm/mark-for-delete)
(define-key map "u" 'mm/unmark)
(define-key map "U" 'mm/unmark-all)
(define-key map "x" 'mm/execute-marks)
;; message composition
(define-key map "r" 'mm/compose-reply)
(define-key map "f" 'mm/compose-forward)
(define-key map "c" 'mm/compose-new)
(define-key map "e" 'mm/edit-draft)
(define-key map (kbd "RET") 'mm/view-message)
;; menu
(define-key map [menu-bar] (make-sparse-keymap))
(let ((menumap (make-sparse-keymap "Headers")))
(define-key map [menu-bar headers] (cons "Headers" menumap))
(define-key menumap [quit-buffer] '("Quit" . mm/quit-buffer))
(define-key menumap [sepa0] '("--"))
(define-key menumap [execute-marks] '("Execute marks" . mm/execute-marks))
(define-key menumap [unmark-all] '("Unmark all" . mm/unmark-all))
(define-key menumap [unmark] '("Unmark" . mm/unmark))
(define-key menumap [mark-delete] '("Mark for deletion" . mm/mark-for-delete))
(define-key menumap [mark-trash] '("Mark for trash" . mm/mark-for-trash))
(define-key menumap [mark-move] '("Mark for move" . mm/mark-for-move))
(define-key menumap [sepa1] '("--"))
(define-key menumap [compose-new] '("Compose new" . mm/compose-new))
(define-key menumap [forward] '("Forward" . mm/compose-forward))
(define-key menumap [reply] '("Reply" . mm/compose-reply))
(define-key menumap [sepa2] '("--"))
(define-key menumap [refresh] '("Refresh" . mm/rerun-search))
(define-key menumap [search] '("Search" . mm/search))
(define-key menumap [jump] '("Jump to maildir" . mm/jump-to-maildir))
(define-key menumap [sepa3] '("--"))
(define-key menumap [view] '("View" . mm/view-message))
(define-key menumap [next] '("Next" . mm/next-header))
(define-key menumap [previous] '("Previous" . mm/prev-header))
(define-key menumap [sepa4] '("--")))
;;(define-key menumap [draft] '("Edit draft" . mm/compose-new))
map)))
(fset 'mm/hdrs-mode-map mm/hdrs-mode-map)
(defun mm/hdrs-mode ()
"Major mode for displaying mua search results."
(interactive)
@ -502,8 +536,7 @@ the new docid. Otherwise, return nil."
(interactive)
(with-current-buffer mm/hdrs-buffer
(when (= 0 (forward-line 1))
(let ((docid (mm/hdrs-get-docid)))
(if docid docid (mm/next-header))))))
(or (mm/hdrs-get-docid) (mm/next-header))))) ;; skip non-headers
(defun mm/prev-header ()
"Move point to the previous message header. If this succeeds,
@ -511,8 +544,7 @@ return the new docid. Otherwise, return nil."
(interactive)
(with-current-buffer mm/hdrs-buffer
(when (= 0 (forward-line -1))
(let ((docid (mm/hdrs-get-docid)))
(if docid docid (mm/prev-header)))))) ;; skip non-headers
(or (mm/hdrs-get-docid) (mm/prev-header))))) ;; skip non-headers
(defun mm/jump-to-maildir ()
@ -522,7 +554,6 @@ return the new docid. Otherwise, return nil."
(mm/hdrs-search (concat "maildir:" fld))))
(defun mm/mark-for-move ()
"Mark message at point for moving to a maildir."
(interactive)

View File

@ -112,7 +112,6 @@ process."
"*internal* Name of the server process, buffer.")
(defun mm/start-proc ()
"Start the mu server process."
;; TODO: add version check
@ -297,9 +296,7 @@ terminates."
(mm/start-proc))
(let ((cmd (apply 'format frm args)))
(mm/proc-log (concat "-> " cmd))
(process-send-string mm/mu-proc (concat cmd "\n"))
(accept-process-output mm/mu-proc 0.5)))
(process-send-string mm/mu-proc (concat cmd "\n"))))
(defun mm/proc-remove-msg (docid)
"Remove message identified by DOCID. The results are reporter

View File

@ -164,61 +164,106 @@ or if not available, :body-html converted to text)."
atts ", ")))
(mm/view-header (format "Attachments(%d):" id) vals)))))
(defvar mm/view-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "q" 'mm/view-quit-buffer)
(define-key map "s" 'mm/search)
(define-key map "j" 'mm/jump-to-maildir)
(define-key map "g" 'mm/view-go-to-url)
(define-key map "f" 'mm/compose-forward)
(define-key map "r" 'mm/compose-reply)
(define-key map "c" 'mm/compose-new)
(define-key map "e" 'mm/edit-draft)
;; intra-message navigation
(define-key map (kbd "SPC") 'scroll-up)
(define-key map (kbd "<home>")
'(lambda () (interactive) (goto-char (point-min))))
(define-key map (kbd "<end>")
'(lambda () (interactive) (goto-char (point-max))))
(define-key map (kbd "RET")
'(lambda () (interactive) (scroll-up 1)))
(define-key map (kbd "<backspace>")
'(lambda () (interactive) (scroll-up -1)))
;; navigation between messages
(define-key map "n" 'mm/view-next-header)
(define-key map "p" 'mm/view-prev-header)
;; attachments
(define-key map "e" 'mm/view-extract-attachment)
(define-key map "o" 'mm/view-open-attachment)
;; marking/unmarking
(define-key map "d" 'mm/view-mark-for-trash)
(define-key map (kbd "<backspace>") 'mm/mark-for-trash)
(define-key map "D" 'mm/view-mark-for-delete)
(define-key map (kbd "<delete>") 'mm/view-mark-for-delete)
(define-key map "m" 'mm/view-mark-for-move)
;; misc
(define-key map "w" 'mm/view-toggle-wrap-lines)
(define-key map "h" 'mm/view-toggle-hide-cited)
(define-key map "R" 'mm/view-refresh)
;; next 3 only warn user when attempt in the message view
(define-key map "u" 'mm/view-unmark)
(define-key map "U" 'mm/view-unmark)
(define-key map "x" 'mm/view-marked-execute)
map)
(setq mm/view-mode-map nil)
(defvar mm/view-mode-map nil
"Keymap for \"*mm-view*\" buffers.")
(unless mm/view-mode-map
(setq mm/view-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "q" 'mm/view-quit-buffer)
(define-key map "s" 'mm/search)
(define-key map "j" 'mm/jump-to-maildir)
(define-key map "g" 'mm/view-go-to-url)
(define-key map "f" 'mm/compose-forward)
(define-key map "r" 'mm/compose-reply)
(define-key map "c" 'mm/compose-new)
(define-key map "e" 'mm/edit-draft)
;; intra-message navigation
(define-key map (kbd "SPC") 'scroll-up)
(define-key map (kbd "<home>")
'(lambda () (interactive) (goto-char (point-min))))
(define-key map (kbd "<end>")
'(lambda () (interactive) (goto-char (point-max))))
(define-key map (kbd "RET")
'(lambda () (interactive) (scroll-up 1)))
(define-key map (kbd "<backspace>")
'(lambda () (interactive) (scroll-up -1)))
;; navigation between messages
(define-key map "n" 'mm/view-next-header)
(define-key map "p" 'mm/view-prev-header)
;; attachments
(define-key map "e" 'mm/view-extract-attachment)
(define-key map "o" 'mm/view-open-attachment)
;; marking/unmarking
(define-key map (kbd "<backspace>") 'mm/mark-for-trash)
(define-key map "d" 'mm/view-mark-for-trash)
(define-key map (kbd "<delete>") 'mm/view-mark-for-delete)
(define-key map "D" 'mm/view-mark-for-delete)
(define-key map "m" 'mm/view-mark-for-move)
;; misc
(define-key map "w" 'mm/view-toggle-wrap-lines)
(define-key map "h" 'mm/view-toggle-hide-cited)
(define-key map "R" 'mm/view-refresh)
;; next 3 only warn user when attempt in the message view
(define-key map "u" 'mm/view-unmark)
(define-key map "U" 'mm/view-unmark)
(define-key map "x" 'mm/view-marked-execute)
;; menu
(define-key map [menu-bar] (make-sparse-keymap))
(let ((menumap (make-sparse-keymap "View")))
(define-key map [menu-bar headers] (cons "View" menumap))
(define-key menumap [quit-buffer] '("Quit" . mm/quit-buffer))
(define-key menumap [sepa0] '("--"))
(define-key menumap [wrap-lines]
'("Toggle wrap lines" . mm/view-toggle-wrap-lines))
(define-key menumap [hide-cited]
'("Toggle hide cited" . mm/view-toggle-hide-cited))
(define-key menumap [sepa8] '("--"))
(define-key menumap [open-att]
'("Open attachment" . mm/view-open-attachment))
(define-key menumap [extract-att]
'("Extract attachment" . mm/view-extract-attachment))
(define-key menumap [goto-url]
'("Visit URL" . mm/view-go-to-url))
(define-key menumap [sepa1] '("--"))
(define-key menumap [mark-delete]
'("Mark for deletion" . mm/view-mark-for-delete))
(define-key menumap [mark-trash]
'("Mark for trash" . mm/view-mark-for-trash))
(define-key menumap [mark-move]
'("Mark for move" . mm/view-mark-for-move))
(define-key menumap [sepa2] '("--"))
(define-key menumap [compose-new] '("Compose new" . mm/compose-new))
(define-key menumap [forward] '("Forward" . mm/compose-forward))
(define-key menumap [reply] '("Reply" . mm/compose-reply))
(define-key menumap [sepa3] '("--"))
(define-key menumap [search] '("Search" . mm/search))
(define-key menumap [jump] '("Jump to maildir" . mm/jump-to-maildir))
(define-key menumap [sepa4] '("--"))
(define-key menumap [next] '("Next" . mm/view-next-header))
(define-key menumap [previous] '("Previous" . mm/view-prev-header)))
map)))
(fset 'mm/view-mode-map mm/view-mode-map)
@ -293,8 +338,6 @@ removing '^M' etc."
'face 'mm/view-url-number-face))))))))
;;;; raw view
;; (defun mm/view-raw-mode ()
;; "Major mode for viewing of raw e-mail message."
@ -307,14 +350,6 @@ removing '^M' etc."
;; (setq truncate-lines t buffer-read-only t))
;; Interactive functions