emacs: gnus: don’t show the References header for now
[~bandali/configs] / .emacs.d / init.el
index 6b8dd8e..8e0f9d7 100644 (file)
   (previous-line)
   (insert "\n\f\n;;; "))
 
+(defun b/insert-asterism ()
+  (interactive)
+  (insert "\n\n                                 * * *\n\n"))
+
 (defun b/no-mouse-autoselect-window ()
   "Conveniently disable `focus-follows-mouse'.
 For disabling the behaviour for certain buffers and/or modes."
@@ -468,6 +472,11 @@ For disabling the behaviour for certain buffers and/or modes."
 (use-feature vc
   :bind ("C-x v C-=" . vc-ediff))
 
+(use-feature vc-git
+  :after vc
+  :custom
+  (vc-git-print-log-follow t))
+
 (use-feature ediff
   :config (add-hook 'ediff-after-quit-hook-internal 'winner-undo)
   :custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
@@ -539,7 +548,7 @@ For disabling the behaviour for certain buffers and/or modes."
  ("<mouse-9>"      . next-buffer)
  ("<drag-mouse-9>" . next-buffer)
  ("<drag-mouse-2>" . kill-this-buffer)
- ("<drag-mouse-3>" . ivy-switch-buffer))
+ ("<drag-mouse-3>" . switch-to-buffer))
 
 (bind-keys
  :prefix-map b/straight-prefix-map
@@ -905,6 +914,7 @@ around if needed."
   :custom
   (magit-diff-refine-hunk t)
   (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
+  (magit-completing-read-function 'magit-ido-completing-read)
   :custom-face (magit-diff-file-heading ((t (:weight normal)))))
 
 ;; recently opened files
@@ -912,13 +922,73 @@ around if needed."
   :defer 0.2
   ;; :config
   ;; (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
+  :config
+  (recentf-mode)
   :custom
   (recentf-max-saved-items 2000))
 
 ;; smart M-x enhancement (needed by counsel for history)
-(use-package smex)
+;; (use-package smex)
+
+(bind-keys
+ ("C-c f ." . find-file)
+ ("C-c f l" . find-library)
+ ("C-c f r" . recentf-open-files)
+ ("C-c x"   . execute-extended-command))
+
+(use-feature ido
+  :demand
+  :bind
+  (:map ido-common-completion-map
+        ([escape] . minibuffer-keyboard-quit)
+        ("DEL"    . b/ido-backspace))
+  :config
+  (require 'delsel)
+  (defun b/ido-backspace ()
+    "Forward to `backward-delete-char'.  On error (read-only), quit."
+    (interactive)
+    (condition-case nil
+        (backward-delete-char 1)
+      (error
+       (minibuffer-keyboard-quit))))
+  (ido-mode 1)
+  (ido-everywhere 1)
+  :custom
+  (ido-enable-flex-matching t)
+  (ido-max-window-height 10)
+  (ido-use-virtual-buffers t))
+
+(use-package ido-vertical-mode
+  :defer 0.3
+  :config
+  (ido-vertical-mode 1)
+  :custom
+  (ido-vertical-define-keys 'C-n-C-p-up-and-down)
+  (ido-vertical-show-count t))
+
+(use-package ido-completing-read+
+  :defer 0.3
+  :after ido
+  :config
+  (ido-ubiquitous-mode 1))
+
+(use-package amx
+  :defer 0.3
+  :config
+  (amx-mode))
+
+(use-package crm-custom
+  :defer 0.3
+  :config
+  (crm-custom-mode 1))
+
+(use-feature icomplete
+  :defer 0.3
+  :config
+  (icomplete-mode 1))
 
 (use-package ivy
+  :disabled
   :defer 0.3
   :bind
   (:map ivy-minibuffer-map
@@ -953,25 +1023,25 @@ This function is intended for use with `ivy-ignore-buffers'."
 )
 
 (use-package swiper
-  :after ivy
-  :bind (("C-s"   . swiper-isearch)
-         ("C-r"   . swiper)
-         ("C-S-s" . isearch-forward)))
+  :commands (swiper swiper-isearch)
+  :bind (;; ("C-s"   . swiper-isearch)
+         ;; ("C-r"   . swiper)
+         ("C-S-s" . swiper-isearch)))
 
 (use-package counsel
-  :after ivy
-  :bind (([remap execute-extended-command] . counsel-M-x)
-         ([remap find-file]                . counsel-find-file)
-         ("C-c b b"                        . ivy-switch-buffer)
-         ("C-c f ."                        . counsel-find-file)
-         ("C-c f l"                        . counsel-find-library)
-         ("C-c f r"                        . counsel-recentf)
-         ("C-c x"                          . counsel-M-x)
-         :map minibuffer-local-map
-         ("C-r" . counsel-minibuffer-history))
-  :config
-  (counsel-mode 1)
-  (defalias 'locate #'counsel-locate))
+  :commands (counsel-linux-app))
+  ;; :bind (([remap execute-extended-command] . counsel-M-x)
+  ;;        ([remap find-file]                . counsel-find-file)
+  ;;        ("C-c f ."                        . counsel-find-file)
+  ;;        ("C-c f l"                        . counsel-find-library)
+  ;;        ("C-c f r"                        . counsel-recentf)
+  ;;        ("C-c x"                          . counsel-M-x)
+  ;;        :map minibuffer-local-map
+  ;;        ("C-r" . counsel-minibuffer-history))
+  ;; :config
+  ;; (counsel-mode 1)
+  ;; (defalias 'locate #'counsel-locate)
+  ;; )
 
 (comment
   (use-package helm
@@ -1015,7 +1085,8 @@ This function is intended for use with `ivy-ignore-buffers'."
                ("C-d"   . b/eshell-quit-or-delete-char)
                ("C-S-l" . b/eshell-clear)
                ("M-r"   . counsel-esh-history)
-               ([tab]   . company-complete)))
+               ;; ([tab]   . company-complete)
+               ))
 
   :hook (eshell-mode . b/eshell-setup)
   :custom
@@ -1240,6 +1311,7 @@ This function is intended for use with `ivy-ignore-buffers'."
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-feature text-mode
+  :bind (:map text-mode-map ("C-*" . b/insert-asterism))
   :hook (text-mode . indicate-buffer-boundaries-left))
 
 (use-feature conf-mode
@@ -1259,8 +1331,9 @@ This function is intended for use with `ivy-ignore-buffers'."
   (company-dabbrev-char-regexp "\\sw\\|\\s_\\|[-_]")
   (company-dabbrev-downcase nil)
   (company-dabbrev-ignore-case nil)
-  :config
-  (global-company-mode t))
+  ;; :config
+  ;; (global-company-mode t)
+  )
 
 (use-package flycheck
   :defer 0.6
@@ -1564,6 +1637,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (sml/apply-theme 'tangomod)
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords)
+  (when (featurep 'erc-hl-nicks)
+    (erc-hl-nicks-reset-face-table))
   (when (featurep 'exwm-systemtray)
     (exwm-systemtray--refresh)))
 
@@ -1575,6 +1650,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (sml/apply-theme 'automatic)
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t)
+  (when (featurep 'erc-hl-nicks)
+    (erc-hl-nicks-reset-face-table))
   (when (featurep 'exwm-systemtray)
     (exwm-systemtray--refresh)))
 
@@ -1697,7 +1774,7 @@ This function is intended for use with `ivy-ignore-buffers'."
        (advice-add 'magit-branch-and-checkout
                    :after #'my-projectile-invalidate-cache)))
   :custom
-  (projectile-completion-system 'ivy)
+  ;; (projectile-completion-system 'ivy)
   (projectile-mode-line-prefix " proj"))
 
 (use-package helpful
@@ -2029,6 +2106,10 @@ This function is intended for use with `ivy-ignore-buffers'."
   :custom
   (oddmuse-username "bandali"))
 
+(use-package debpaste
+  :custom
+  (debpaste-paste-is-hidden t))
+
 \f
 ;;; Email (with Gnus)
 
@@ -2270,13 +2351,34 @@ This function is intended for use with `ivy-ignore-buffers'."
   :config
   (setq
    gnus-buttonized-mime-types '("multipart/\\(signed\\|encrypted\\)")
-   gnus-visible-headers
-   (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:\\|^User-Agent:")
-   gnus-sorted-header-list
-   '("^From:" "^Subject:" "^Summary:" "^Keywords:"
-     "^Followup-To:" "^To:" "^Cc:" "X-RT-Originator"
-     "^Newsgroups:" "List-Id:" "^Organization:"
-     "^User-Agent:" "^Date:")
+   gnus-sorted-header-list '("^From:"
+                             "^X-RT-Originator"
+                             "^Newsgroups:"
+                             "^Subject:"
+                             "^Date:"
+                             "^Envelope-To:"
+                             "^Followup-To:"
+                             "^Reply-To:"
+                             "^Organization:"
+                             "^Summary:"
+                             "^Abstract:"
+                             "^Keywords:"
+                             "^To:"
+                             "^[BGF]?Cc:"
+                             "^Posted-To:"
+                             "^Mail-Copies-To:"
+                             "^Mail-Followup-To:"
+                             "^Apparently-To:"
+                             "^Resent-From:"
+                             "^User-Agent:"
+                             "^X-detected-operating-system:"
+                             "^Message-ID:"
+                             ;; "^References:"
+                             "^List-Id:"
+                             "^Gnus-Warning:")
+   gnus-visible-headers (mapconcat 'identity
+                                   gnus-sorted-header-list
+                                   "\\|")
   ;; local-lapsed article dates
   ;; from https://www.emacswiki.org/emacs/GnusFormatting#toc11
   gnus-article-date-headers '(user-defined)
@@ -2331,8 +2433,7 @@ https://csclub.uwaterloo.ca/~abandali")
         gnus-posting-styles
         '((".*"
            (address "bandali@gnu.org")
-           (signature b/gnu-signature)
-           (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
+           (signature b/gnu-signature))
           ("nnimap\\+gnu:l\\..*"
            (signature nil))
           ((header "subject" "ThankCRM")
@@ -2382,6 +2483,10 @@ https://csclub.uwaterloo.ca/~abandali")
   :init
   (add-hook 'dired-mode-hook 'gnus-dired-mode))
 
+(use-feature gnus-utils
+  :custom
+  (gnus-completing-read-function 'gnus-ido-completing-read))
+
 (use-feature mm-decode
   :config
   (setq mm-discouraged-alternatives '("text/html" "text/richtext")
@@ -2401,6 +2506,7 @@ https://csclub.uwaterloo.ca/~abandali")
         mail-envelope-from 'header))
 
 (use-feature message
+  :bind (:map message-mode-map ("<C-return>" . b/insert-asterism))
   :config
   ;; redefine for a simplified In-Reply-To header
   ;; (see https://todo.sr.ht/~sircmpwn/lists.sr.ht/67)
@@ -2433,7 +2539,7 @@ https://csclub.uwaterloo.ca/~abandali")
         '(gnus-find-subscribed-addresses)
         message-dont-reply-to-names
         "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
-  (require 'company-ebdb)
+  ;; (require 'company-ebdb)
   :hook (;; (message-setup . mml-secure-message-sign-pgpmime)
          (message-mode . flyspell-mode)
          (message-mode . (lambda ()
@@ -2485,14 +2591,19 @@ https://csclub.uwaterloo.ca/~abandali")
 (use-feature ebdb-com
   :after ebdb)
 
-;; (use-package ebdb-complete
-;;   :after ebdb
-;;   :config
-;;   (ebdb-complete-enable))
-
-(use-package company-ebdb
+(use-feature ebdb-complete
+  :after ebdb
   :config
-  (defun company-ebdb--post-complete (_) nil))
+  ;; (setq ebdb-complete-mail 'capf)
+  (ebdb-complete-enable))
+
+(use-feature ebdb-message
+  :demand
+  :after ebdb)
+
+;; (use-package company-ebdb
+;;   :config
+;;   (defun company-ebdb--post-complete (_) nil))
 
 (use-feature ebdb-gnus
   :after ebdb
@@ -2547,7 +2658,7 @@ https://csclub.uwaterloo.ca/~abandali")
 ;;; IRC (with ERC and ZNC)
 
 (use-feature erc
-  :bind (("C-c b e" . erc-switch-to-buffer)
+  :bind (("C-c b b" . erc-switch-to-buffer)
          :map erc-mode-map
          ("M-a" . erc-track-switch-buffer))
   :custom