From a8501755558988b401128f643863aaf049c4472a Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Mon, 1 Jan 2018 16:49:54 -0800 Subject: [PATCH] Move gnus init to main org file --- emacs/.emacs.d/GNUmakefile | 4 +- emacs/.emacs.d/init.org | 131 ++++++++++++++++++++++++++ emacs/.emacs.d/init/oni-gnus-init.org | 112 ---------------------- emacs/.emacs.d/site-lisp/oni-gnus.el | 39 -------- 4 files changed, 133 insertions(+), 153 deletions(-) delete mode 100644 emacs/.emacs.d/init/oni-gnus-init.org delete mode 100644 emacs/.emacs.d/site-lisp/oni-gnus.el diff --git a/emacs/.emacs.d/GNUmakefile b/emacs/.emacs.d/GNUmakefile index 83b9876..ff24e20 100644 --- a/emacs/.emacs.d/GNUmakefile +++ b/emacs/.emacs.d/GNUmakefile @@ -5,14 +5,14 @@ include ../../dotfiles.mk AUTOLOADS_FILE = site-lisp/site-autoloads.el UNWANTED = $(AUTOLOADS_FILE) site-lisp/flycheck_% site-lisp/flycheck-% SITE_LISPS = $(addsuffix c,$(filter-out $(UNWANTED),$(wildcard site-lisp/*.el))) -INIT_LISPS = init/oni-org-init.elc init/oni-js2-init.elc \ +INIT_LISPS = init/oni-org-init.elc init/oni-js2-init.elc init/oni-gnus-init.elc \ $(addsuffix .elc,$(basename $(wildcard init/*.org))) VENDOR_DIRS = $(wildcard vendor-lisp/*) .PHONE: all snippets all: $(SITE_LISPS) init.elc $(INIT_LISPS) $(AUTOLOADS_FILE) snippets -init.el init/oni-org-init.el init/oni-js2-init.el: init.org +init.el init/oni-org-init.el init/oni-js2-init.el init/oni-gnus-init.el: init.org $(call tangle,emacs-lisp) %.el: %.org diff --git a/emacs/.emacs.d/init.org b/emacs/.emacs.d/init.org index fab9b4d..eec029a 100644 --- a/emacs/.emacs.d/init.org +++ b/emacs/.emacs.d/init.org @@ -1406,6 +1406,137 @@ Computing Environment". (add-hook 'jabber-chat-mode-hook 'oni:set-default-directory) #+END_SRC +** Gnus + :PROPERTIES: + :header-args: :tangle "init/oni-gnus-init.el" + :END: + + Gnus is the very extensible Emacs news reader, which just happens + to also function very well as a mail reader. Since it is so + extensible and also configurable the configuration for it tends to + get big, so I split it into a separate file. + + #+BEGIN_SRC emacs-lisp :tangle yes + (with-eval-after-load 'gnus (load "oni-gnus-init")) + #+END_SRC + + Configuring Gnus is actually configuring a handful of packages, so + I require them all when Gnus is loaded so the byte compiler won't + yell at me. + + #+BEGIN_SRC emacs-lisp + (require 'gnus) + (require 'gnus-msg) + (require 'mail-source) + (require 'message) + (require 'nnfolder) + (require 'sendmail) + #+END_SRC + + I don't like having a lot of files spread around in my =.emacs.d= + directory, so put all of Gnus', Message's and nnfolder's data in + =.emacs.d/data=. + + #+BEGIN_SRC emacs-lisp + (setq gnus-directory (locate-user-emacs-file "data/News") + gnus-article-save-directory gnus-directory + gnus-cache-directory gnus-directory + gnus-kill-files-directory gnus-directory) + + (setq mail-source-directory (locate-user-emacs-file "data/Mail") + message-directory mail-source-directory + nnfolder-directory mail-source-directory) + #+END_SRC + + Use msmtp to send my messages. + + #+BEGIN_SRC emacs-lisp + (setq send-mail-function 'send-mail-send-it + message-send-mail-function 'message-send-mail-with-sendmail + sendmail-program "/usr/bin/msmtp") + #+END_SRC + + I've been using Gnus for a while now and I don't think I fit the + profile of a novice anymore. Turning this off will stop Gnus from + asking me if I'm sure I want to delete a certain message, I do this + a lot because expiring messages seems to take too long for my + tastes. + + #+BEGIN_SRC emacs-lisp + (setq gnus-novice-user nil) + #+END_SRC + + Add a keybinding to the Gnus summary mode to easily delete + messages. + + #+BEGIN_SRC emacs-lisp + (defun oni-gnus-delete-forward (&optional n) + "Delete the article under point and move to the next one. + Do this N times." + (interactive "p") + (dotimes (_ (or n 1)) + (gnus-summary-delete-article) + (gnus-summary-next-subject 1))) + + (define-key gnus-summary-mode-map (kbd "M-d") #'oni-gnus-delete-forward) + #+END_SRC + + Change the format of how each line for a group in the Group buffer + is displayed. This shows the group name, the select method, group + subscription status, the process mark (whatever that is), whether + there is a summary buffer open for that group, number of unread + articles and the number of ticked articles. + + #+BEGIN_SRC emacs-lisp + (setq gnus-group-line-format "%P%(%20G%): %-10s %S%p%B %5y %5T\n") + #+END_SRC + +*** Mail accounts + + I mostly use two email accounts. + +**** ryuslash.org + + Set my main email account as the primary select method for Gnus. + + #+BEGIN_SRC emacs-lisp + (setq gnus-select-method + '(nnmaildir "ryuslash" (directory "~/documents/mail/ryuslash/"))) + #+END_SRC + + When sending mail from the ryuslash inbox, use the ryuslash msmtp + account. + + #+BEGIN_SRC emacs-lisp + (add-to-list 'gnus-posting-styles + '(".*" + (address "tom@ryuslash.org") + (eval (setq message-sendmail-extra-arguments + '("-a" "ryuslash"))))) + #+END_SRC + +**** gmail.com + + Add my other personal email as a secondary select method. + + #+BEGIN_SRC emacs-lisp + (add-to-list 'gnus-secondary-select-methods + '(nnmaildir "gmail" + (directory "~/documents/mail/gmail/"))) + #+END_SRC + + When sending mail from the gmail account, use the gmail msmtp + accound and set the proper email address. + + #+BEGIN_SRC emacs-lisp + (add-to-list 'gnus-posting-styles + '("gmail:" + (name "Tom Willemse") + (address "ryuslash@gmail.com") + (eval (setq message-sendmail-extra-arguments + '("-a" "gmail"))))) + #+END_SRC + ** Org mode :PROPERTIES: :header-args: :tangle "init/oni-org-init.el" diff --git a/emacs/.emacs.d/init/oni-gnus-init.org b/emacs/.emacs.d/init/oni-gnus-init.org deleted file mode 100644 index 0eddf9e..0000000 --- a/emacs/.emacs.d/init/oni-gnus-init.org +++ /dev/null @@ -1,112 +0,0 @@ -Gnus is one of the most extensible Email programs on the -planet. And it's not even made for email but NNTP. - -#+BEGIN_SRC emacs-lisp - (require 'gnus) - (require 'gnus-msg) - (require 'mail-source) - (require 'message) - (require 'nnfolder) - (require 'sendmail) - - (require 'oni-helpers) -#+END_SRC - -Store all Gnus-related data in my data directory. - -#+BEGIN_SRC emacs-lisp - (setq gnus-directory (oni:data-location "News") - gnus-article-save-directory gnus-directory - gnus-cache-directory gnus-directory - gnus-kill-files-directory gnus-directory) -#+END_SRC - -Store all Mail source-related data in my data directory. - -#+BEGIN_SRC emacs-lisp - (setq mail-source-directory (oni:data-location "Mail")) -#+END_SRC - -Store all message-related data in the same place as the Mail source -data. - -#+BEGIN_SRC emacs-lisp - (setq message-directory (oni:data-location "Mail")) -#+END_SRC - -Store all nnfolder-related data in the same place as the Mail -source data. - -#+BEGIN_SRC emacs-lisp - (setq nnfolder-directory (oni:data-location "Mail")) -#+END_SRC - -Use msmtp to send mail. - -#+BEGIN_SRC emacs-lisp - (setq send-mail-function 'sendmail-send-it) - (setq sendmail-program "/usr/bin/msmtp") -#+END_SRC - -Tell Gnus I'm not a novice anymore. One of the features of Gnus I -use a lot is deleting messages and as long as Gnus thinks I'm a -novice it will ask me if I'm sure every single time. - -#+BEGIN_SRC emacs-lisp - (setq gnus-novice-user nil) -#+END_SRC - -Add a keybinding to the Gnus summary mode to easily delete -messages. - -#+BEGIN_SRC emacs-lisp - (define-key gnus-summary-mode-map (kbd "M-d") 'oni-gnus-delete-forward) -#+END_SRC - -Change the Gnus group buffer line format. - -#+BEGIN_SRC emacs-lisp - (setq gnus-group-line-format "%P%(%20G%): %-10s %S%p%B %5y %5T\n") -#+END_SRC - -* ryuslash.org - - Set my main email address as the primary select method for Gnus. - - #+BEGIN_SRC emacs-lisp - (setq gnus-select-method - '(nnmaildir "ryuslash" (directory "~/documents/mail/ryuslash/"))) - #+END_SRC - - When sending mail from the ryuslash inbox, use the ryuslash msmtp - account. - - #+BEGIN_SRC emacs-lisp - (add-to-list 'gnus-posting-styles - '(".*" - (address "tom@ryuslash.org") - (eval (setq message-sendmail-extra-arguments - '("-a" "ryuslash"))))) - #+END_SRC - -* gmail - - Add my other personal email as a secondary select method. - - #+BEGIN_SRC emacs-lisp - (add-to-list 'gnus-secondary-select-methods - '(nnmaildir "gmail" - (directory "~/documents/mail/gmail/"))) - #+END_SRC - - When sending mail from the gmail account, use the gmail msmtp - accound and set the proper email address. - - #+BEGIN_SRC emacs-lisp - (add-to-list 'gnus-posting-styles - '("gmail:" - (name "Tom Willemse") - (address "ryuslash@gmail.com") - (eval (setq message-sendmail-extra-arguments - '("-a" "gmail"))))) - #+END_SRC diff --git a/emacs/.emacs.d/site-lisp/oni-gnus.el b/emacs/.emacs.d/site-lisp/oni-gnus.el deleted file mode 100644 index 2009160..0000000 --- a/emacs/.emacs.d/site-lisp/oni-gnus.el +++ /dev/null @@ -1,39 +0,0 @@ -;;; oni-gnus.el --- Extra commands and functions for gnus -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Tom Willemse - -;; Author: Tom Willemse -;; Keywords: - -;; This program 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. - -;; This program 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 this program. If not, see . - -;;; Commentary: - -;; Here are some extra commands and functions for gnus. - -;;; Code: - -(require 'gnus-sum) - -;;;###autoload -(defun oni-gnus-delete-forward (&optional n) - "Delete the article under point and move to the next one. -Do this N times." - (interactive "p") - (dotimes (_ (or n 1)) - (gnus-summary-delete-article) - (gnus-summary-next-subject 1))) - -(provide 'oni-gnus) -;;; oni-gnus.el ends here