#+TITLE: Gnus layer #+TAGS: e-mail|layer [[file:img/gnus.gif]] * Table of Contents :TOC_5_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] - [[#basic-concepts][Basic Concepts]] - [[#adding-news-sources][Adding news sources]] - [[#configuring-gmail][Configuring gmail]] - [[#org-mime-in-org-layer][Org MIME in Org layer]] - [[#setup-variables][Setup variables]] - [[#key-bindings][Key bindings]] * Description This layer integrates a general purpose email/newsgroup client into Spacemacs. ** Features: - Support for reading RSS feeds, newsgroups and mails directly within Emacs via [[http://www.gnus.org/][Gnus]]. - Support for beautiful HTML mails generated from any =org= buffer. - Support for credential management via [[https://gnupg.org/][GnuPG]]. * Install To use this configuration layer, add it to your =~/.spacemacs=. You will need to add =gnus= to the existing =dotspacemacs-configuration-layers= list in this file. * Basic Concepts Gnus is a news reading application. The Gnus terminology can be confusing for new users so the basics are listed here: - A Newsgroup but can also be a RSS Feed or a mail directory - Newsgroups can be assigned to topics which will be used to structure the Group Buffer if Topic Mode is enabled(default). * Adding news sources Adding news sources can be done in your =.spacemacs= file by adding the following: #+BEGIN_SRC emacs-lisp ;; Get email, and store in nnml (setq gnus-secondary-select-methods '( (nntp "gmane" (nntp-address "news.gmane.org")) (nntp "news.eternal-september.org") (nntp "nntp.aioe.org") (nntp "news.gwene.org") )) #+END_SRC For adding RSS Feeds please see the [[#key-bindings][key bindings section]]. * Configuring gmail To configure Gnus with gmail support you can add the following to your =.spacemacs= file. #+BEGIN_SRC emacs-lisp ;; Get email, and store in nnml (setq gnus-secondary-select-methods '( (nnimap "gmail" (nnimap-address "imap.gmail.com") (nnimap-server-port 993) (nnimap-stream ssl)) )) ;; Send email via Gmail: (setq message-send-mail-function 'smtpmail-send-it smtpmail-default-smtp-server "smtp.gmail.com") ;; Archive outgoing email in Sent folder on imap.gmail.com: (setq gnus-message-archive-method '(nnimap "imap.gmail.com") gnus-message-archive-group "[Gmail]/Sent Mail") ;; Set return email address based on incoming email address (setq gnus-posting-styles '(((header "to" "address@outlook.com") (address "address@outlook.com")) ((header "to" "address@gmail.com") (address "address@gmail.com")))) ;; Store email in ~/gmail directory (setq nnml-directory "~/gmail") (setq message-directory "~/gmail") #+END_SRC Authentication for your gmail account is best stored in an =authinfo= or =authinfo.pgp= file. It must be of the form: #+BEGIN_EXAMPLE machine smtp.gmail.com login name@gmail.com password SUPER_SECRET_PASS machine imap.gmail.com login name@gmail.com port 993 password SUPER_SECRET_PASS #+END_EXAMPLE If you use two-step verification the password has to be an [[https://support.google.com/accounts/answer/185833?hl=en][application specific password]]. * Org MIME in Org layer It is possible to send beautiful HTML emails using org mode. Pressing ~SPC m e m~ in a message buffer will convert the current message from org mode to html. An org mode buffer can be sent via html email by pressing ~SPC m e m~ in any org mode buffer. * Setup variables The Gnus layer defines the following variables like this: #+BEGIN_SRC emacs-lisp gnus-summary-line-format "%U%R%z %(%&user-date; %-15,15f %B (%c) %s%)\n" gnus-user-date-format-alist '((t . "%Y-%m-%d %H:%M")) gnus-group-line-format "%M%S%p%P%5y:%B %G\n";;"%B%(%g%)" gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references gnus-thread-sort-functions '(gnus-thread-sort-by-most-recent-date) gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\”]\”[#’()]" gnus-sum-thread-tree-false-root "" gnus-sum-thread-tree-indent " " gnus-sum-thread-tree-leaf-with-other "├► " gnus-sum-thread-tree-root "" gnus-sum-thread-tree-single-leaf "╰► " gnus-sum-thread-tree-vertical "│" gnus-article-browse-delete-temp t gnus-treat-strip-trailing-blank-lines 'last gnus-keep-backlog 'nil gnus-summary-display-arrow nil ; Don't show that annoying arrow: gnus-mime-display-multipart-related-as-mixed t ; Show more MIME-stuff: gnus-auto-select-first nil ; Don't get the first article automatically: smiley-style 'medium gnus-keep-backlog '0 #+END_SRC They can be configured as layer variables or from the =dotspacemacs/user-config= section of =.spacemacs=. * Key bindings Gnus has very modal default keybindings. Please see the [[http://www.gnus.org/manual.html][manual]] for a complete list. Basic and Spacemacs specific key bindings can be found in the following table. | Key binding | Gnus mode - Description | |----------------------+-----------------------------------------------------| | ~SPC a e g~ | Starts Gnus | | ~m~ | New Message | | ~O R~, ~G R~ (emacs) | Group Buffer - Add RSS feed | | ~g r~ | Group Buffer - Check for new mail | | ~^~ | Open Server Buffer. Browse Newsgroups. | | ~T n~ | Group Buffer - new Topic | | ~T m~ | Group Buffer - Move Group to Topic | | ~K~ | Article Buffer - Previous article | | ~J~ | Article Buffer - Next article | | ~RET~ | Summary Buffer(RSS) - Open article Link in browser | | ~TAB~ | Summary Buffer(RSS) - Open article and switch to it |