From 7a81461a0d34ae4bb8841bcbd6f03ff03f19e832 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Wed, 1 Sep 2010 16:20:14 +0200 Subject: Import Signed-off-by: Julien Danjou --- offlineimap.el | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 offlineimap.el diff --git a/offlineimap.el b/offlineimap.el new file mode 100644 index 0000000..810770e --- /dev/null +++ b/offlineimap.el @@ -0,0 +1,119 @@ +;;; offlineimap.el --- Run OfflineIMAP from Emacs + +;; Copyright (C) 2010 Julien Danjou + +;; Author: Julien Danjou +;; URL: http://julien.danjou.info/offlineimap-el.html + +;; 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: +;; M-x offlineimap + +(defgroup offlineimap nil + "Run OfflineIMAP." + :group 'comm) + +(defcustom offlineimap-buffer-name "*OfflineIMAP*" + "Name of the buffer used to run offlineimap." + :group 'offlineimap + :type 'string) + +(defcustom offlineimap-command "offlineimap -u Noninteractive.Basic" + "Command to run to launch OfflineIMAP." + :group 'offlineimap + :type 'string) + +(defcustom offlineimap-buffer-maximum-size comint-buffer-maximum-size + "The maximum size in lines for OfflineIMAP buffer." + :group 'offlineimap + :type 'integer) + +(defvar offlineimap-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "q") 'offlineimap-quit) + (define-key map (kbd "g") 'offlineimap-resync) + map) + "Keymap for offlineimap-mode.") + +(defface offlineimap-syncing-face + '((t (:foreground "cyan"))) + "Face used to highlight syncing lines.") + +(defface offlineimap-scanning-face + '((t (:foreground "green"))) + "Face used to highlight scanning lines.") + +(defface offlineimap-copying-face + '((t (:foreground "blue"))) + "Face used to highlight copying lines.") + +(defface offlineimap-copy-message-face + '((t (:foreground "yellow"))) + "Face used to highlight message copy lines.") + +(defface offlineimap-adding-flags-face + '((t (:foreground "yellow" :weight bold))) + "Face used to highlight flags adding lines.") + +(defface offlineimap-next-sync-face + '((t (:foreground "red"))) + "Face used to highlight next sync lines.") + +(defvar offlineimap-mode-font-lock-keywords + '(("^Syncing .*$" . 'offlineimap-syncing-face) + ("^Scanning .*$" . 'offlineimap-scanning-face) + ("^Copying .*$" . 'offlineimap-copying-face) + ("^Adding flags .*$" . 'offlineimap-adding-flags-face) + ("^Next sync .*$" . 'offlineimap-next-sync-face) + ("^Copy message .*$" . 'offlineimap-copy-message-face)) + "Faces used to highlight things in OfflineIMAP mode.") + +(defun offlineimap-get-buffer () + "Get the offlineimap buffer." + (let ((buffer (get-buffer-create offlineimap-buffer-name))) + (with-current-buffer buffer + (offlineimap-mode)) + buffer)) + +;;;###autoload +(defun offlineimap () + "Start OfflineIMAP." + (interactive) + (comint-exec + (offlineimap-get-buffer) + "offlineimap" + shell-file-name nil + `("-c" ,offlineimap-command))) + +(defun offlineimap-quit () + "Quit OfflineIMAP." + (interactive) + (kill-buffer (current-buffer))) + +(defun offlineimap-resync () + "Send a USR1 signal to OfflineIMAP to force accounts synchronization." + (interactive) + (signal-process (get-buffer-process (current-buffer)) 'SIGUSR1)) + +(define-derived-mode offlineimap-mode comint-mode "OfflineIMAP" + "A major mode for OfflineIMAP interaction." + :group 'comm + (set (make-local-variable 'comint-output-filter-functions) + '(comint-postoutput-scroll-to-bottom comint-truncate-buffer)) + (set (make-local-variable 'comint-buffer-maximum-size + offlineimap-buffer-maximum-size)) + (font-lock-add-keywords nil offlineimap-mode-font-lock-keywords)) -- cgit v1.2.3