diff --git a/toys/mm/mm-hdrs.el b/toys/mm/mm-hdrs.el index 6e260886..47b8b146 100644 --- a/toys/mm/mm-hdrs.el +++ b/toys/mm/mm-hdrs.el @@ -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 "") 'mm/mark-for-trash) - - (define-key map "D" 'mm/mark-for-delete) - (define-key map (kbd "") '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 "") 'mm/mark-for-trash) + (define-key map "d" 'mm/mark-for-trash) + + (define-key map (kbd "") '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) diff --git a/toys/mm/mm-proc.el b/toys/mm/mm-proc.el index c304cad1..e9f196fa 100644 --- a/toys/mm/mm-proc.el +++ b/toys/mm/mm-proc.el @@ -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 diff --git a/toys/mm/mm-view.el b/toys/mm/mm-view.el index a2fb665f..35bbefb7 100644 --- a/toys/mm/mm-view.el +++ b/toys/mm/mm-view.el @@ -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 "") - '(lambda () (interactive) (goto-char (point-min)))) - (define-key map (kbd "") - '(lambda () (interactive) (goto-char (point-max)))) - (define-key map (kbd "RET") - '(lambda () (interactive) (scroll-up 1))) - (define-key map (kbd "") - '(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 "") 'mm/mark-for-trash) - - (define-key map "D" 'mm/view-mark-for-delete) - (define-key map (kbd "") '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 "") + '(lambda () (interactive) (goto-char (point-min)))) + (define-key map (kbd "") + '(lambda () (interactive) (goto-char (point-max)))) + (define-key map (kbd "RET") + '(lambda () (interactive) (scroll-up 1))) + (define-key map (kbd "") + '(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 "") 'mm/mark-for-trash) + (define-key map "d" 'mm/view-mark-for-trash) + + (define-key map (kbd "") '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