diff options
| -rw-r--r-- | config.el | 106 | ||||
| -rw-r--r-- | funcs.el | 128 | ||||
| -rw-r--r-- | keybindings.el | 28 | ||||
| -rw-r--r-- | packages.el | 58 | 
4 files changed, 320 insertions, 0 deletions
diff --git a/config.el b/config.el new file mode 100644 index 0000000..b9e36db --- /dev/null +++ b/config.el @@ -0,0 +1,106 @@ +;; Not much related configurations +(defvar notmuch-hello-refresh-count 0) +(setq mail-user-agent 'message-user-agent) + +(custom-set-variables + '(message-send-hook (quote (notmuch-message-mark-replied))) + '(notmuch-address-command "notmuch-addrlookup") + '(notmuch-always-prompt-for-sender t) + '(notmuch-crypto-process-mime t) + '(notmuch-fcc-dirs +   (quote +    (("vasudev-debian@copyninja.info" . "vasudev-debian/Sent") +     ("vasudev@debian.org" . "vasudev-debian/Sent") +     ("vasudev@copyninja.info" . "vasudev-copyninja.info/Sent") +     ("kamathvasudev@gmail.com" . "Gmail-1/Sent")))) + '(notmuch-hello-tag-list-make-query "tag:unread") + '(notmuch-message-headers (quote ("Subject" "To" "Cc" "Bcc" "Date" "Reply-To"))) + '(notmuch-saved-searches +   (quote +    ((:name "debian-devel" :query "tag:debian-devel and tag:unread") +     (:name "debian-fonts" :query "tag:debian-fonts and tag:unread") +     (:name "debian-india" :query "tag:debian-india and tag:Debian-India and tag:unread") +     (:name "debian-devel-announce" :query "tag:debian-devel-announce and tag:unread") +     (:name "Plan9 and 9Front" :query "tag:9fans and and tag:9front and tag:unread") +     (:name "rkrishnan" :query "tag:rkrishnan and tag:unread") +     (:name "Gmail/INBOX" :query "folder:Gmail-1/INBOX and tag:unread") +     (:name "vasudev/INBOX" :query "folder:vasudev-copyninja.info/INBOX and tag:unread") +     (:name "vasudev-debian/INBOX" :query "folder:vasudev-debian/INBOX and tag:unread") +     (:name "debian-project" :query "tag:debian-project and tag:unread") +     (:name "libindic-dev" :query "tag:libindic-dev and tag:unread") +     (:name "TODO" :query "tag:TODO") +     (:name "debian-rust" :query "tag:pkg-rust and tag:unread") +     (:name "Tahoe Development" :query "tag:tahoe-dev and tag:unread") +     (:name "Debian Multimedia (my packages)" +            :query "tag:pkg-multimedia and tag:unread and \( subject:(rem.*):.* or subject:(librem.*):.* \)") +     (:name "Debian VoIP (my packages)" +            :query "tag:pkg-voip and tag:unread and \( subject:(*libre*):.* or subject:(baresip*):.* or subject:(biboumi*):.* \)")))) + '(notmuch-search-line-faces +   (quote +    (("deleted" :foreground "red") +     ("unread" :weight bold) +     ("flagged" :foreground "blue")))) + '(notmuch-search-oldest-first nil) + '(notmuch-show-all-multipart/alternative-parts nil) + '(notmuch-show-all-tags-list t) + '(notmuch-show-insert-text/plain-hook +   (quote +    (notmuch-wash-convert-inline-patch-to-part notmuch-wash-tidy-citations +                                               notmuch-wash-elide-blank-lines +                                               notmuch-wash-excerpt-citations)))) + +(add-hook 'notmuch-hello-refresh-hook 'notmuch-hello-refresh-status-message) + +;; SMTP mail multi related configurations +(setq smtpmail-multi-accounts +      '((copyninja-mail "vasudev" "localhost" 25 +                        header nil nil nil "rudra") +        (gmail-primary nil "localhost" 25 +                       header nil nil nil "rudra"))) +(setq smtpmail-multi-assosications +      '((("From" . "kamathvasudev@gmail.com") +         gmail-primary) +        (("From" . "vasudev@copyninja.info") +         copyninja-mail) +        (("From" . "vasudev@debian.org") +         copyninja-mail))) + +;; Message sending functions +(setq send-mail-function 'smtpmail-multi-send-it +      message-send-mail-function 'smtpmail-multi-send-it +      smtpmail-auth-credntials "/home/vasudev/.authinfo.gpg") + + +;; GNUS posting style +(require 'gnus-art) +(setq gnus-posting-styles +      '(((header "to" "kamathvasudev@gmail.com") +         (address "kamathvasudev@gmail.com")) +        ((header "to" "vasudev@copyninja.info") +         (address "vasudev@copyninja.info")) +        ((header "to" "vasudev-debian@copyninja.info") +         (address "vasudev@debian.org")) +        ((header "to" "vasudev@debian.org") +         (address "vasudev@debian.org")))) + +;; Enable bbdb configurations +(bbdb-initialize 'message 'gnus 'sendmail) +(setq bbdb-file "~/.bbdb.db") + +;; size of bbdb popup +(setq bbdb-pop-up-window-size 10) + +;; What do we do when invoking bbdb interactively +(setq bbdb-mua-update-interactive-p '(query . create)) + +;; Make sure we look at every address in a message and not only the +;; first one +(setq bbdb-message-all-addresses t) + +(setq bbdb/mail-auto-create-p t +      bbdb/news-auto-create-p t) + +(add-hook 'message-mode-hook +          '(lambda () +             (flyspell-mode t) +             (local-set-key "<TAB>" 'bbdb-complete-name))) diff --git a/funcs.el b/funcs.el new file mode 100644 index 0000000..c0c6570 --- /dev/null +++ b/funcs.el @@ -0,0 +1,128 @@ +;; Display number of message on refresh of notmuch +(defun notmuch-hello-refresh-status-message () +  (unless no-display +    (let* ((new-count +            (string-to-number +             (car (process-lines notmuch-command "count")))) +           (diff-count (- new-count notmuch-hello-refresh-count))) +      (cond +       ((= notmuch-hello-refresh-count 0) +        (message "You have %s messages." +                 (notmuch-hello-nice-number new-count))) +       ((> diff-count 0) +        (message "You have %s more messages since last refresh." +                 (notmuch-hello-nice-number diff-count))) +       ((< diff-count 0) +        (message "You have %s fewer messages since last refresh." +                 (notmuch-hello-nice-number (- diff-count))))) +      (setq notmuch-hello-refresh-count new-count)))) + +(defun notmuch-mark-all-read() +  "Mark all as read in current search" +  (interactive) +  (notmuch-search-tag-all (list "-unread")) +  (notmuch-search-refresh-view)) + +(defun notmuch-search-tag-and-advance (&rest tags) +  "Add tag or set of tags to current thread" +  (mapc 'notmuch-search-tag tags) +  (notmuch-search-next-thread)) + +(defun notmuch-mark-as-read() +  "Mark current thread as read" +  (interactive) +  (notmuch-search-tag-and-advance (list "-unread"))) + +(defun notmuch-mark-as-spam() +  "Mark the current message as spam" +  (interactive) +  (notmuch-search-tag-and-advance (list "+Spam" "-inbox" "-unread"))) + +(defun notmuch-search-add-todo () +  "Add 'TODO' tag when in search-mode" +  (interactive) +  (notmuch-search-tag-and-advance (list "+TODO"))) + +(defun notmuch-search-remove-todo () +  "Remove a 'TODO' tag in search mode" +  (interactive) +  (notmuch-search-tag-and-advance (list "-TODO"))) + +(defun notmuch-mark-deleted () +  "Add 'deleted' tag in search mode" +  (interactive) +  (notmuch-search-tag-and-advance (list "+deleted"))) + +;; Functions copied from +;; https://notmuchmail.org/pipermail/notmuch/2012/011692.html +(require 'bbdb-snarf) +(defun bbdb/notmuch-snarf-header (header) +  (let ((text (notmuch-show-get-header header))) +    (with-temp-buffer +      (insert text) +      (bbdb-snarf-region (point-min) (point-max))))) + +(defun bbdb/notmuch-snarf-from () +  (interactive) +  (bbdb/notmuch-snarf-header :From)) + +(defun bbdb/notmuch-snarf-to () +  (interactive) +  (bbdb/notmuch-snarf-header :To)) + +;; color from line according to known / unknown sender +                                        ; code taken from bbdb-gnus.el +(defun bbdb/notmuch-known-sender () +  (let* ((from (plist-get headers :From)) +         (splits (mail-extract-address-components from)) +         (name (car splits)) +         (net (cadr splits)) +         (record (and splits +                      (bbdb-search-simple +                       name +                       (if (and net bbdb-canonicalize-net-hook) +                           (bbdb-canonicalize-address net) +                         net))))) +    (and record net (member (downcase net) (bbdb-record-net record))))) + +(defun bbdb/check-known-sender () +  (interactive) +  (if (bbdb/notmuch-known-sender) (message "Sender is known") (message "Sender is not known"))) + +(defface notmuch-show-known-addr +  '( +    (((class color) (background dark)) :foreground "spring green") +    (((class color) (background light)) :background "spring green" :foreground "black")) +  "Face for sender or recipient already listed in bbdb" +  :group 'notmuch-show +  :group 'notmuch-faces) + +(defface notmuch-show-unknown-addr +  '( +    (((class color) (background dark)) :foreground "dark orange") +    (((class color) (background light)) :background "gold" :foreground "black")) +  "Face for sender or recipient not listed in bbdb" +  :group 'notmuch-show +  :group 'notmuch-faces) + +                                        ; override function from notmuch-show +(defun notmuch-show-insert-headerline (headers date tags depth) +  "Insert a notmuch style headerline based on HEADERS for a +message at DEPTH in the current thread." +  (let ((start (point)) +        (face (if (bbdb/notmuch-known-sender) 'notmuch-show-known-addr 'notmuch-show-unknown-addr)) +        (end-from)) +    (insert (notmuch-show-spaces-n (* notmuch-show-indent-messages-width depth)) +            (notmuch-show-clean-address (plist-get headers :From))) +    (setq end-from (point)) +    (insert +     " (" +     date +     ") (" +     (propertize (mapconcat 'identity tags " ") +                 'face 'notmuch-tag-face) +     ")\n") +    (overlay-put (make-overlay start (point)) 'face 'notmuch-message-summary-face) +    (save-excursion +      (goto-char start) +      (overlay-put (make-overlay start end-from) 'face face)))) diff --git a/keybindings.el b/keybindings.el new file mode 100644 index 0000000..2efc7bc --- /dev/null +++ b/keybindings.el @@ -0,0 +1,28 @@ +(require 'notmuch) +(define-key notmuch-search-mode-map "u" 'notmuch-mark-as-read) +(define-key notmuch-search-mode-map "U" 'notmuch-mark-all-read) + +(define-key notmuch-search-mode-map (kbd "S-<f9>") 'notmuch-search-remove-todo) +(define-key notmuch-search-mode-map (kbd "<f9>") 'notmuch-search-add-todo) + +(define-key notmuch-search-mode-map "d" 'notmuch-mark-deleted) +(define-key notmuch-search-mode-map "s" 'notmuch-mark-as-spam) + +(define-key notmuch-show-mode-map "c" 'bbdb/notmuch-snarf-from) +(define-key notmuch-show-mode-map "C" 'bbdb/notmuch-snarf-to) + +;; Bounce key for bouncing message +(define-key notmuch-show-mode-map "b" +  (lambda (&optional address) +    "Bounce the current message." +    (interactive "sBounce To: ") +    (notmuch-show-view-raw-message) +    (message-resend address))) + +(define-key notmuch-show-mode-map "d" +  (lambda () +    "toggle deleted tag for message" +    (interactive) +    (if (member "deleted" (notmuch-show-get-tags)) +        (notmuch-show-tag (list "-deleted")) +      (notmuch-show-tag (list "+deleted"))))) diff --git a/packages.el b/packages.el new file mode 100644 index 0000000..42a5ad5 --- /dev/null +++ b/packages.el @@ -0,0 +1,58 @@ +;;; packages.el --- notmuch layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2017 Sylvain Benner & Contributors +;; +;; Author: Vasudev Kamath <vasudev@copyninja.info> +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Commentary: + +;; See the Spacemacs documentation and FAQs for instructions on how to implement +;; a new layer: +;; +;;   SPC h SPC layers RET +;; +;; +;; Briefly, each package to be installed or configured by this layer should be +;; added to `notmuch-packages'. Then, for each package PACKAGE: +;; +;; - If PACKAGE is not referenced by any other Spacemacs layer, define a +;;   function `notmuch/init-PACKAGE' to load and initialize the package. + +;; - Otherwise, PACKAGE is already referenced by another Spacemacs layer, so +;;   define the functions `notmuch/pre-init-PACKAGE' and/or +;;   `notmuch/post-init-PACKAGE' to customize the package as it is loaded. + +;;; Code: + +(defconst notmuch-packages +  '( +    notmuch +    smtpmail-multi +    gnus +    bbdb +    )) + +(defun notmuch/init-notmuch () +  (use-package notmuch +    :defer t +    )) + +(defun notmuch/init-smtpmail-multi () +  (use-package smtpmail-multi +    :defer t +    )) + +(defun notmuch/init-gnus () +  (use-package gnus +    :defer t +    )) + +(defun notmuch/init-bbdb () +  (use-package bbdb +    :defer t +    ))  | 
