From df35498e13cba4793ad4951ba50633e7633bcfeb Mon Sep 17 00:00:00 2001 From: djcb Date: Sun, 4 Dec 2011 23:49:15 +0200 Subject: [PATCH] * split main view into mm-mail.el --- toys/mm/mm-main.el | 139 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 toys/mm/mm-main.el diff --git a/toys/mm/mm-main.el b/toys/mm/mm-main.el new file mode 100644 index 00000000..0f285307 --- /dev/null +++ b/toys/mm/mm-main.el @@ -0,0 +1,139 @@ +;;; mm-main.el -- part of mm, the mu mail user agent +;; +;; Copyright (C) 2011 Dirk-Jan C. Binnema + +;; Author: Dirk-Jan C. Binnema +;; Maintainer: Dirk-Jan C. Binnema +;; Keywords: email +;; Version: 0.0 + +;; This file is not part of GNU Emacs. +;; +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;;; Code: + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; mm main view mode + keybindings +(defvar mm/mm-mode-map + (let ((map (make-sparse-keymap))) + + (define-key map "b" 'mm/search-bookmark) + (define-key map "s" 'mm/search) + (define-key map "q" 'mm/quit-mm) + (define-key map "j" 'mm/jump-to-maildir) + (define-key map "c" 'mm/compose-new) + + (define-key map "m" 'mm/toggle-mail-sending-mode) + (define-key map "f" 'smtpmail-send-queued-mail) + (define-key map "u" 'mm/retrieve-mail-update-db) + + map) + "Keymap for the *mm* buffer.") +(fset 'mm/mm-mode-map mm/mm-mode-map) + +(defun mm/mm-mode () + "Major mode for the mm main screen." + (interactive) + + (kill-all-local-variables) + (use-local-map mm/mm-mode-map) + + (setq + mm/marks-map (make-hash-table :size 16 :rehash-size 2) + major-mode 'mm/mm-mode + mode-name "mm: main view" + truncate-lines t + buffer-read-only t + overwrite-mode 'overwrite-mode-binary)) + +(defun mm/action-str (str) + "Highlight the first occurence of [..] in STR." + (if (string-match "\\[\\(\\w+\\)\\]" str) + (let* ((key (match-string 1 str)) + (keystr (propertize key 'face 'mm/highlight-face))) + (replace-match keystr nil t str 1)) + str)) + + +(defun mm() + "Start mm; should not be called directly, instead, use `mm'" + (interactive) + (let ((buf (get-buffer-create mm/mm-buffer-name)) + (inhibit-read-only t)) + (with-current-buffer buf + (erase-buffer) + (insert + "* " + (propertize "mm - mu mail for emacs version " 'face 'mm/title-face) + (propertize mm/mu-version 'face 'mm/view-header-key-face) + "\n\n" + (propertize " Basics\n\n" 'face 'mm/title-face) + (mm/action-str "\t* [j]ump to some maildir\n") + (mm/action-str "\t* enter a [s]earch query\n") + (mm/action-str "\t* [c]ompose a new message\n") + "\n" + (propertize " Bookmarks\n\n" 'face 'mm/title-face) + (mapconcat + (lambda (bm) + (let* ((query (nth 0 bm)) (title (nth 1 bm)) (key (nth 2 bm))) + (mm/action-str + (concat "\t* [b" (make-string 1 key) "] " title)))) + mm/bookmarks "\n") + + "\n" + (propertize " Misc\n\n" 'face 'mm/title-face) + (mm/action-str "\t* [u]pdate email & database\n") + (mm/action-str "\t* toggle [m]ail sending mode ") + "(" (propertize (if smtpmail-queue-mail "queued" "direct") + 'face 'mm/view-header-key-face) ")\n" + (mm/action-str "\t* [f]lush queued mail\n") + "\n" + (mm/action-str "\t* [q]uit mm\n")) + (mm/mm-mode) + (switch-to-buffer buf)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Interactive functions + +(defun mm/retrieve-mail-update-db () + "Get new mail and update the database." + (interactive) + (mm/proc-retrieve-mail-update-db)) + +(defun mm/toggle-mail-sending-mode () + "Toggle sending mail mode, either queued or direct." + (interactive) + (setq smtpmail-queue-mail (not smtpmail-queue-mail)) + (message + (if smtpmail-queue-mail + "Outgoing mail will now be queued" + "Outgoing mail will now be sent directly")) + (mm)) + + +(defun mm/quit-mm() + "Quit the mm session." + (interactive) + (when (y-or-n-p "Are you sure you want to quit mm? ") + (message nil) + (mm/kill-proc) + (kill-buffer))) + +(provide 'mm-main)