Move gnus init to main org file
This commit is contained in:
parent
9ae6f7f1be
commit
a850175555
4 changed files with 133 additions and 153 deletions
|
@ -5,14 +5,14 @@ include ../../dotfiles.mk
|
||||||
AUTOLOADS_FILE = site-lisp/site-autoloads.el
|
AUTOLOADS_FILE = site-lisp/site-autoloads.el
|
||||||
UNWANTED = $(AUTOLOADS_FILE) site-lisp/flycheck_% site-lisp/flycheck-%
|
UNWANTED = $(AUTOLOADS_FILE) site-lisp/flycheck_% site-lisp/flycheck-%
|
||||||
SITE_LISPS = $(addsuffix c,$(filter-out $(UNWANTED),$(wildcard site-lisp/*.el)))
|
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)))
|
$(addsuffix .elc,$(basename $(wildcard init/*.org)))
|
||||||
VENDOR_DIRS = $(wildcard vendor-lisp/*)
|
VENDOR_DIRS = $(wildcard vendor-lisp/*)
|
||||||
|
|
||||||
.PHONE: all snippets
|
.PHONE: all snippets
|
||||||
all: $(SITE_LISPS) init.elc $(INIT_LISPS) $(AUTOLOADS_FILE) 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)
|
$(call tangle,emacs-lisp)
|
||||||
|
|
||||||
%.el: %.org
|
%.el: %.org
|
||||||
|
|
|
@ -1406,6 +1406,137 @@ Computing Environment".
|
||||||
(add-hook 'jabber-chat-mode-hook 'oni:set-default-directory)
|
(add-hook 'jabber-chat-mode-hook 'oni:set-default-directory)
|
||||||
#+END_SRC
|
#+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
|
** Org mode
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args: :tangle "init/oni-org-init.el"
|
:header-args: :tangle "init/oni-org-init.el"
|
||||||
|
|
|
@ -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
|
|
|
@ -1,39 +0,0 @@
|
||||||
;;; oni-gnus.el --- Extra commands and functions for gnus -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; Copyright (C) 2016 Tom Willemse
|
|
||||||
|
|
||||||
;; Author: Tom Willemse <tom@ryuslash.org>
|
|
||||||
;; 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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
;;; 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
|
|
Loading…
Reference in a new issue