[emacs/gnus] bindings and posting styles fixes
[~bandali/configs] / init.org
index 477eef2..c784100 100644 (file)
--- a/init.org
+++ b/init.org
@@ -729,9 +729,6 @@ In short, my favourite way of life.
 
 (use-package ox-beamer)
 
-(use-package org-notmuch
-  :after (:any org notmuch))
-
 (use-package orgalist
   :hook (message-mode . orgalist-mode))
 #+end_src
@@ -1403,7 +1400,7 @@ instead.
 
 *** meghanada
 
-#+begin_src emacs-lisp :tangle yes
+#+begin_src emacs-lisp :tangle no
 (use-package meghanada
   :bind
   (:map meghanada-mode-map
@@ -1414,8 +1411,25 @@ instead.
 
 *** lsp-java
 
+#+begin_comment
+dependencies:
+
+ace-window
+avy
+bui
+company-lsp
+dap-mode
+lsp-java
+lsp-mode
+lsp-ui
+pfuture
+tree-mode
+treemacs
+#+end_comment
+
 #+begin_src emacs-lisp :tangle no
-(use-package treemacs)
+(use-package treemacs
+  :config (setq treemacs-never-persist t))
 
 (use-package yasnippet
   :config
@@ -1746,31 +1760,101 @@ Hopefully temporary.
 (setq amin-gnus-init-file (no-littering-expand-etc-file-name "gnus"))
 
 (use-package gnus
-  :bind ("C-c m" . gnus)
+  :bind ("s-m" . gnus)
   :init
   (setq
-   gnus-init-file        amin-gnus-init-file
+   gnus-select-method
+   '(nnimap "amin"
+            (nnimap-stream plain)
+            (nnimap-address "127.0.0.1")
+            (nnimap-server-port 143)
+            (nnimap-authenticator plain)
+            (nnimap-user "amin@aminb.org"))
+   gnus-secondary-select-methods
+   '((nnimap "uwaterloo"
+             (nnimap-stream plain)
+             (nnimap-address "127.0.0.1")
+             (nnimap-server-port 143)
+             (nnimap-authenticator plain)
+             (nnimap-user "abandali@uwaterloo.ca")))
+   gnus-message-archive-group "nnimap:Sent"
+   gnus-parameters
+   '(("amin"
+      (display . 20))
+     ("uwaterloo"
+      (display . 20)
+      (posting-style
+       (address "abandali@uwaterloo.ca")
+       (gcc "\"nnimap+uwaterloo:Sent Items\""))))
    gnus-home-directory   (no-littering-expand-var-file-name "gnus/")
    gnus-directory        (no-littering-expand-var-file-name "gnus/News/")
    message-directory     amin-maildir
    gnus-save-newsrc-file nil
    gnus-read-newsrc-file nil
+   gnus-interactive-exit nil
    gnus-gcc-mark-as-read t))
 
+(use-package gnus-art
+  :config
+  (setq
+   gnus-visible-headers
+   (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:")
+   gnus-sorted-header-list
+   '("^From:" "^Subject:" "^Summary:" "^Keywords:"
+     "^Followup-To:" "^To:" "^Cc:" "X-RT-Originator"
+     "^Newsgroups:" "List-Id:" "^Organization:"
+     "^Date:")
+  ;; local-lapsed article dates
+  ;; from https://www.emacswiki.org/emacs/GnusFormatting#toc11
+  gnus-article-date-headers '(user-defined)
+  gnus-article-time-format
+  (lambda (time)
+    (let* ((date (format-time-string "%a, %d %b %Y %T %z" time))
+           (local (article-make-date-line date 'local))
+           (combined-lapsed (article-make-date-line date
+                                                    'combined-lapsed))
+           (lapsed (progn
+                     (string-match " (.+" combined-lapsed)
+                     (match-string 0 combined-lapsed))))
+      (concat local lapsed))))
+  (bind-keys
+   :map gnus-article-mode-map
+   ("r" . gnus-article-reply-with-original)
+   ("R" . gnus-article-wide-reply-with-original)))
+
+(use-package gnus-sum
+  :bind (:map gnus-summary-mode-map
+              :prefix-map amin--gnus-summary-prefix-map
+              :prefix "v"
+              ("r" . gnus-summary-reply)
+              ("w" . gnus-summary-wide-reply)
+              ("v" . gnus-summary-show-raw-article))
+  :config
+  (setq gnus-extra-headers (append gnus-extra-headers
+                                   '(List-Id X-RT-Originator)))
+  (bind-keys
+   :map gnus-summary-mode-map
+   ("r" . gnus-summary-reply-with-original)
+   ("R" . gnus-summary-wide-reply-with-original)))
+
+(use-package nnmail
+  :config
+  (setq nnmail-extra-headers (append nnmail-extra-headers
+                                     '(List-Id X-RT-Originator))))
+
+(use-package gnus-msg
+  :config
+  (setq gnus-posting-styles
+        '(((header "delivered-to" "amin@aminb.org")
+           (address "amin@aminb.org"))
+          ((header "delivered-to" "gnu@aminb.org")
+           (address "bandali@gnu.org")))))
+
 (use-package mm-decode
   :config
   (setq mm-discouraged-alternatives '("text/html" "text/richtext")))
 #+end_src
 
-# #+begin_src emacs-lisp :tangle (concat gnus-init-file ".el") :mkdirp yes
-#+begin_src emacs-lisp :tangle no
-(setq gnus-select-method
-      '(nnmaildir "gnu"
-                  (directory "~/mail/gnu/")
-                  (directory-files nnheader-directory-files-safe)
-                  (get-new-mail nil)))
-#+end_src
-
 ** sendmail
 
 #+begin_src emacs-lisp
@@ -1809,7 +1893,58 @@ Hopefully temporary.
         mml-secure-openpgp-sign-with-sender t))
 #+end_src
 
-** [[https://notmuchmail.org][notmuch]]
+** supercite
+
+#+begin_src emacs-lisp :tangle no
+(use-package supercite
+  :commands sc-cite-original
+  :init
+  (add-hook 'mail-citation-hook 'sc-cite-original)
+
+  (defun sc-remove-existing-signature ()
+    (save-excursion
+      (goto-char (region-beginning))
+      (when (re-search-forward message-signature-separator (region-end) t)
+        (delete-region (match-beginning 0) (region-end)))))
+
+  (add-hook 'mail-citation-hook 'sc-remove-existing-signature)
+
+  (defun sc-remove-if-not-mailing-list ()
+    (unless (assoc "list-id" sc-mail-info)
+      (setq attribution sc-default-attribution
+            citation (concat sc-citation-delimiter
+                             sc-citation-separator))))
+
+  (add-hook 'sc-attribs-postselect-hook 'sc-remove-if-not-mailing-list)
+
+  :config
+  (defun sc-fill-if-different (&optional prefix)
+    "Fill the region bounded by `sc-fill-begin' and point.
+Only fill if optional PREFIX is different than
+`sc-fill-line-prefix'.  If `sc-auto-fill-region-p' is nil, do not
+fill region.  If PREFIX is not supplied, initialize fill
+variables.  This is useful for a regi `begin' frame-entry."
+    (if (not prefix)
+        (setq sc-fill-line-prefix ""
+              sc-fill-begin (line-beginning-position))
+      (if (and sc-auto-fill-region-p
+               (not (string= prefix sc-fill-line-prefix)))
+          (let ((fill-prefix sc-fill-line-prefix))
+            (unless (or (string= fill-prefix "")
+                        (save-excursion
+                          (goto-char sc-fill-begin)
+                          (or (looking-at ">+  +")
+                              (< (length
+                                  (buffer-substring (point)
+                                                    (line-end-position)))
+                                 65))))
+              (fill-region sc-fill-begin (line-beginning-position)))
+            (setq sc-fill-line-prefix prefix
+                  sc-fill-begin (line-beginning-position)))))
+nil))
+#+end_src
+
+** COMMENT [[https://notmuchmail.org][notmuch]]                                                 :ARCHIVE:
 
 See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]].
 
@@ -1938,57 +2073,9 @@ See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]].
 
 (after! notmuch-crypto
   (setq notmuch-crypto-process-mime t))
-#+end_src
-
-** supercite
 
-#+begin_src emacs-lisp :tangle no
-(use-package supercite
-  :commands sc-cite-original
-  :init
-  (add-hook 'mail-citation-hook 'sc-cite-original)
-
-  (defun sc-remove-existing-signature ()
-    (save-excursion
-      (goto-char (region-beginning))
-      (when (re-search-forward message-signature-separator (region-end) t)
-        (delete-region (match-beginning 0) (region-end)))))
-
-  (add-hook 'mail-citation-hook 'sc-remove-existing-signature)
-
-  (defun sc-remove-if-not-mailing-list ()
-    (unless (assoc "list-id" sc-mail-info)
-      (setq attribution sc-default-attribution
-            citation (concat sc-citation-delimiter
-                             sc-citation-separator))))
-
-  (add-hook 'sc-attribs-postselect-hook 'sc-remove-if-not-mailing-list)
-
-  :config
-  (defun sc-fill-if-different (&optional prefix)
-    "Fill the region bounded by `sc-fill-begin' and point.
-Only fill if optional PREFIX is different than
-`sc-fill-line-prefix'.  If `sc-auto-fill-region-p' is nil, do not
-fill region.  If PREFIX is not supplied, initialize fill
-variables.  This is useful for a regi `begin' frame-entry."
-    (if (not prefix)
-        (setq sc-fill-line-prefix ""
-              sc-fill-begin (line-beginning-position))
-      (if (and sc-auto-fill-region-p
-               (not (string= prefix sc-fill-line-prefix)))
-          (let ((fill-prefix sc-fill-line-prefix))
-            (unless (or (string= fill-prefix "")
-                        (save-excursion
-                          (goto-char sc-fill-begin)
-                          (or (looking-at ">+  +")
-                              (< (length
-                                  (buffer-substring (point)
-                                                    (line-end-position)))
-                                 65))))
-              (fill-region sc-fill-begin (line-beginning-position)))
-            (setq sc-fill-line-prefix prefix
-                  sc-fill-begin (line-beginning-position)))))
-nil))
+(use-package org-notmuch
+  :after (:any org notmuch))
 #+end_src
 
 * Blogging