X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/748bd8acfa59861bc22a5f0017bfb830f9ac743e..a23fd4a0bbff7f5085ee0c14acaf9d2dcf0675b5:/.emacs.d/init.el diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 14b9b37..2d0d8f9 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -1559,6 +1559,8 @@ For disabling the behaviour for certain buffers and/or modes." ("M-RET" . image-previous-line)) :config (pdf-tools-install nil t)) +(use-package biblio) + ;;; Email (with Gnus) @@ -1596,45 +1598,23 @@ For disabling the behaviour for certain buffers and/or modes." ;; (: gnus-registry-split-fancy-with-parent) ;; (: gnus-group-split-fancy "INBOX" t "INBOX") ;; gnu - (list ".*emacs-devel.gnu.org" "l.gnu.emacs.devel") - (list ".*help-gnu-emacs.gnu.org" "l.gnu.emacs.help") - (list ".*info-gnu-emacs.gnu.org" "l.gnu.emacs.info") - (list ".*emacs-orgmode.gnu.org" "l.gnu.emacs.orgmode") - (list ".*emacs-tangents.gnu.org" "l.gnu.emacs.tangents") - (list ".*emacsconf-discuss.gnu.org" "l.gnu.emacsconf.discuss") - (list ".*emacsconf-register.gnu.org" "l.gnu.emacsconf.register") - (list ".*emacsconf-submit.gnu.org" "l.gnu.emacsconf.submit") - (list ".*fencepost-users.gnu.org" "l.gnu.fencepost.users") - (list ".*gnunet-developers.gnu.org" "l.gnu.gnunet.developers") - (list ".*help-gnunet.gnu.org" "l.gnu.gnunet.help") - (list ".*bug-gnuzilla.gnu.org" "l.gnu.gnuzilla.bug") - (list ".*gnuzilla-dev.gnu.org" "l.gnu.gnuzilla.dev") - (list ".*guile-devel.gnu.org" "l.gnu.guile.devel") - (list ".*guile-user.gnu.org" "l.gnu.guile.user") - (list ".*guix-devel.gnu.org" "l.gnu.guix.devel") - (list ".*help-guix.gnu.org" "l.gnu.guix.help") - (list ".*info-guix.gnu.org" "l.gnu.guix.info") - (list ".*savannah-hackers-public.gnu.org" "l.gnu.savannah.hackers.public") - (list ".*savannah-users.gnu.org" "l.gnu.savannah.users") - (list ".*www-commits.gnu.org" "l.gnu.www.commits") - (list ".*www-discuss.gnu.org" "l.gnu.www.discuss") + (list ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1") + ;; *@lists.sr.ht, omitting one dot if present + ;; add more \\.?\\([^.@]*\\) if needed + (list ".*<~\\(.*\\)/\\([^.@]*\\)\\.?\\([^.@]*\\)@lists.sr.ht>.*" "l.~\\1.\\2\\3") ;; webmasters (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters") - ;; haskell - (list ".*haskell-art.we.lurk.org" "l.haskell.art") - (list ".*haskell-cafe.haskell.org" "l.haskell.cafe") ;; other (list ".*atreus.freelists.org" "l.atreus") (list ".*deepspec.lists.cs.princeton.edu" "l.deepspec") - (list ".*notmuch.notmuchmail.org" "l.notmuch") - (list ".*dev.lists.parabola.nu" "l.parabola.dev") - ;; *@lists.sr.ht - (list ".*~bandali/public-inbox@lists.sr.ht" "l.~bandali.public-inbox") - (list ".*~sircmpwn/free-writers-club@lists.sr.ht" "l.~sircmpwn.free-writers-club") - (list ".*~sircmpwn/sr.ht-admins@lists.sr.ht" "l.~sircmpwn.srht.admins") - (list ".*~sircmpwn/sr.ht-announce@lists.sr.ht" "l.~sircmpwn.srht.announce") - (list ".*~sircmpwn/sr.ht-dev@lists.sr.ht" "l.~sircmpwn.srht.dev") - (list ".*~sircmpwn/sr.ht-discuss@lists.sr.ht" "l.~sircmpwn.srht.discuss") + ;; (list ".*haskell-art.we.lurk.org" "l.haskell.art") ;d + (list ".*haskell-cafe.haskell.org" "l.haskell-cafe") + ;; (list ".*notmuch.notmuchmail.org" "l.notmuch") ;u + ;; (list ".*dev.lists.parabola.nu" "l.parabola-dev") ;u + ;; ---------------------------------- + ;; legend: (u)nsubscribed | (d)ead + ;; ---------------------------------- + ;; otherwise, leave mail in INBOX "INBOX"))) (nnimap "uw" (nnimap-stream plain) @@ -1646,9 +1626,9 @@ For disabling the behaviour for certain buffers and/or modes." (nnimap-split-methods 'nnimap-split-fancy) (nnimap-split-fancy (| ;; (: gnus-registry-split-fancy-with-parent) - ;; se463-s19 - ("subject" "\\(SE\\s-?463\\|Deliverable\\)" "course.se463-s19") - (from "\\(SE\\s-?463\\|Gema\\|Hemant\\|Davood\\|Camilo\\|Reza\\|Michael\\|Sandy\\)" "course.se463-s19") + ;; se212-f19 + ("subject" "SE\\s-?212" "course.se463-s19") + (from "SE\\s-?212" "course.se463-s19") ;; catch-all "INBOX"))) (nnimap "csc" @@ -1666,90 +1646,102 @@ For disabling the behaviour for certain buffers and/or modes." (to-address . "deepspec@lists.cs.princeton.edu") (to-list . "deepspec@lists.cs.princeton.edu") (list-identifier . "\\[deepspec\\]")) - ("l\\.gnu\\.emacs\\.devel" + ("l\\.emacs-devel" (to-address . "emacs-devel@gnu.org") (to-list . "emacs-devel@gnu.org")) - ("l\\.gnu\\.emacs\\.help" + ("l\\.help-gnu-emacs" (to-address . "help-gnu-emacs@gnu.org") (to-list . "help-gnu-emacs@gnu.org")) - ("l\\.gnu\\.emacs\\.info" + ("l\\.info-gnu-emacs" (to-address . "info-gnu-emacs@gnu.org") (to-list . "info-gnu-emacs@gnu.org")) - ("l\\.gnu\\.emacs\\.orgmode" + ("l\\.emacs-orgmode" (to-address . "emacs-orgmode@gnu.org") (to-list . "emacs-orgmode@gnu.org") (list-identifier . "\\[O\\]")) - ("l\\.gnu\\.emacs\\.tangents" + ("l\\.emacs-tangents" (to-address . "emacs-tangents@gnu.org") (to-list . "emacs-tangents@gnu.org")) - ("l\\.gnu\\.emacsconf\\.discuss" + ("l\\.emacsconf-discuss" (to-address . "emacsconf-discuss@gnu.org") (to-list . "emacsconf-discuss@gnu.org")) - ("l\\.gnu\\.emacsconf\\.register" + ("l\\.emacsconf-register" (to-address . "emacsconf-register@gnu.org") (to-list . "emacsconf-register@gnu.org")) - ("l\\.gnu\\.emacsconf\\.submit" + ("l\\.emacsconf-submit" (to-address . "emacsconf-submit@gnu.org") (to-list . "emacsconf-submit@gnu.org")) - ("l\\.gnu\\.fencepost\\.users" + ("l\\.fencepost-users" (to-address . "fencepost-users@gnu.org") (to-list . "fencepost-users@gnu.org") (list-identifier . "\\[Fencepost-users\\]")) - ("l\\.gnu\\.gnunet\\.developers" + ("l\\.gnewsense-art" + (to-address . "gnewsense-art@nongnu.org") + (to-list . "gnewsense-art@nongnu.org") + (list-identifier . "\\[gNewSense-art\\]")) + ("l\\.gnewsense-dev" + (to-address . "gnewsense-dev@nongnu.org") + (to-list . "gnewsense-dev@nongnu.org") + (list-identifier . "\\[Gnewsense-dev\\]")) + ("l\\.gnewsense-users" + (to-address . "gnewsense-users@nongnu.org") + (to-list . "gnewsense-users@nongnu.org") + (list-identifier . "\\[gNewSense-users\\]")) + ("l\\.gnunet-developers" (to-address . "gnunet-developers@gnu.org") (to-list . "gnunet-developers@gnu.org") (list-identifier . "\\[GNUnet-developers\\]")) - ("l\\.gnu\\.gnunet\\.help" + ("l\\.help-gnunet" (to-address . "help-gnunet@gnu.org") (to-list . "help-gnunet@gnu.org") (list-identifier . "\\[Help-gnunet\\]")) - ("l\\.gnu\\.gnuzilla\\.bug" + ("l\\.bug-gnuzilla" (to-address . "bug-gnuzilla@gnu.org") (to-list . "bug-gnuzilla@gnu.org") (list-identifier . "\\[Bug-gnuzilla\\]")) - ("l\\.gnu\\.gnuzilla\\.dev" + ("l\\.gnuzilla-dev" (to-address . "gnuzilla-dev@gnu.org") (to-list . "gnuzilla-dev@gnu.org") (list-identifier . "\\[Gnuzilla-dev\\]")) - ("l\\.gnu\\.guile\\.devel" + ("l\\.guile-devel" (to-address . "guile-devel@gnu.org") (to-list . "guile-devel@gnu.org")) - ("l\\.gnu\\.guile\\.user" + ("l\\.guile-user" (to-address . "guile-user@gnu.org") (to-list . "guile-user@gnu.org")) - ("l\\.gnu\\.guix\\.devel" + ("l\\.guix-devel" (to-address . "guix-devel@gnu.org") (to-list . "guix-devel@gnu.org")) - ("l\\.gnu\\.guix\\.help" + ("l\\.help-guix" (to-address . "help-guix@gnu.org") (to-list . "help-guix@gnu.org")) - ("l\\.gnu\\.guix\\.info" + ("l\\.info-guix" (to-address . "info-guix@gnu.org") (to-list . "info-guix@gnu.org")) - ("l\\.gnu\\.savannah\\.hackers\\.public" + ("l\\.savannah-hackers-public" (to-address . "savannah-hackers-public@gnu.org") (to-list . "savannah-hackers-public@gnu.org")) - ("l\\.gnu\\.savannah\\.users" + ("l\\.savannah-users" (to-address . "savannah-users@gnu.org") (to-list . "savannah-users@gnu.org")) - ("l\\.gnu\\.www\\.commits" + ("l\\.www-commits" (to-address . "www-commits@gnu.org") (to-list . "www-commits@gnu.org")) - ("l\\.gnu\\.www\\.discuss" + ("l\\.www-discuss" (to-address . "www-discuss@gnu.org") (to-list . "www-discuss@gnu.org")) - ("l\\.haskell\\.art" + ("l\\.haskell-art" (to-address . "haskell-art@we.lurk.org") (to-list . "haskell-art@we.lurk.org") (list-identifier . "\\[haskell-art\\]")) - ("l\\.haskell\\.cafe" + ("l\\.haskell-cafe" (to-address . "haskell-cafe@haskell.org") (to-list . "haskell-cafe@haskell.org") (list-identifier . "\\[Haskell-cafe\\]")) ("l\\.notmuch" (to-address . "notmuch@notmuchmail.org") (to-list . "notmuch@notmuchmail.org")) - ("l\\.parabola\\.dev" + ("l\\.parabola-dev" (to-address . "dev@lists.parabola.nu") (to-list . "dev@lists.parabola.nu") (list-identifier . "\\[Dev\\]")) @@ -1759,16 +1751,16 @@ For disabling the behaviour for certain buffers and/or modes." ("l\\.~sircmpwn\\.free-writers-club" (to-address . "~sircmpwn/free-writers-club@lists.sr.ht") (to-list . "~sircmpwn/free-writers-club@lists.sr.ht")) - ("l\\.~sircmpwn\\.srht\\.admins" + ("l\\.~sircmpwn\\.srht-admins" (to-address . "~sircmpwn/sr.ht-admins@lists.sr.ht") (to-list . "~sircmpwn/sr.ht-admins@lists.sr.ht")) - ("l\\.~sircmpwn\\.srht\\.announce" + ("l\\.~sircmpwn\\.srht-announce" (to-address . "~sircmpwn/sr.ht-announce@lists.sr.ht") (to-list . "~sircmpwn/sr.ht-announce@lists.sr.ht")) - ("l\\.~sircmpwn\\.srht\\.dev" + ("l\\.~sircmpwn\\.srht-dev" (to-address . "~sircmpwn/sr.ht-dev@lists.sr.ht") (to-list . "~sircmpwn/sr.ht-dev@lists.sr.ht")) - ("l\\.~sircmpwn\\.srht\\.discuss" + ("l\\.~sircmpwn\\.srht-discuss" (to-address . "~sircmpwn/sr.ht-discuss@lists.sr.ht") (to-list . "~sircmpwn/sr.ht-discuss@lists.sr.ht")) ("webmasters" @@ -1794,6 +1786,12 @@ For disabling the behaviour for certain buffers and/or modes." (require 'ebdb-mua) (require 'ebdb-gnus) + (when (version< emacs-version "27") + (add-to-list + 'nnmail-split-abbrev-alist + '(list . "list-id\\|list-post\\|x-mailing-list\\|x-beenthere\\|x-loop") + t)) + ;; (gnus-registry-initialize) (with-eval-after-load 'recentf @@ -1849,15 +1847,15 @@ https://shemshak.org/~amin") (defvar b/gnu-signature "Amin Bandali Free Software Activist | GNU Webmaster & Volunteer GPG: BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103 -https://bandalis.org") +https://bandali.eu.org") (defvar b/uw-signature "Amin Bandali, MMath Student Cheriton School of Computer Science University of Waterloo -https://bandalis.org") +https://bandali.eu.org") (defvar b/csc-signature "Amin Bandali -Termcom, Computer Science Club -University of Waterloo -https://bandalis.org") +Systems Committee +Computer Science Club, University of Waterloo +https://csclub.uwaterloo.ca/~abandali") (setq gnus-posting-styles '((".*" (address "amin@shemshak.org") @@ -2089,7 +2087,80 @@ https://bandalis.org") (add-to-list 'erc-modules 'notifications) (add-to-list 'erc-modules 'spelling) (add-to-list 'erc-modules 'scrolltoplace) - (erc-update-modules)) + (erc-update-modules) + + (when (and (version<= "24.4" emacs-version) + (version< emacs-version "27")) + ;; fix erc-lurker bug + ;; patch submitted: https://bugs.gnu.org/36843#10 + ;; TODO: remove when patch is merged and emacs 27 is released + (defvar erc-message-parsed) + (defun erc-display-message (parsed type buffer msg &rest args) + "Display MSG in BUFFER. + +ARGS, PARSED, and TYPE are used to format MSG sensibly. + +See also `erc-format-message' and `erc-display-line'." + (let ((string (if (symbolp msg) + (apply #'erc-format-message msg args) + msg)) + (erc-message-parsed parsed)) + (setq string + (cond + ((null type) + string) + ((listp type) + (mapc (lambda (type) + (setq string + (erc-display-message-highlight type string))) + type) + string) + ((symbolp type) + (erc-display-message-highlight type string)))) + + (if (not (erc-response-p parsed)) + (erc-display-line string buffer) + (unless (erc-hide-current-message-p parsed) + (erc-put-text-property 0 (length string) 'erc-parsed parsed string) + (erc-put-text-property 0 (length string) 'rear-sticky t string) + (when (erc-response.tags parsed) + (erc-put-text-property 0 (length string) 'tags (erc-response.tags parsed) + string)) + (erc-display-line string buffer))))) + + (defun erc-lurker-update-status (_message) + "Update `erc-lurker-state' if necessary. + +This function is called from `erc-insert-pre-hook'. If the +current message is a PRIVMSG, update `erc-lurker-state' to +reflect the fact that its sender has issued a PRIVMSG at the +current time. Otherwise, take no action. + +This function depends on the fact that `erc-display-message' +lexically binds `erc-message-parsed', which is used to check if +the current message is a PRIVMSG and to determine its sender. +See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'. + +In order to limit memory consumption, this function also calls +`erc-lurker-cleanup' once every `erc-lurker-cleanup-interval' +updates of `erc-lurker-state'." + (when (and (boundp 'erc-message-parsed) + (erc-response-p erc-message-parsed)) + (let* ((command (erc-response.command erc-message-parsed)) + (sender + (erc-lurker-maybe-trim + (car (erc-parse-user (erc-response.sender erc-message-parsed))))) + (server + (erc-canonicalize-server-name erc-server-announced-name))) + (when (equal command "PRIVMSG") + (when (>= (cl-incf erc-lurker-cleanup-count) + erc-lurker-cleanup-interval) + (setq erc-lurker-cleanup-count 0) + (erc-lurker-cleanup)) + (unless (gethash server erc-lurker-state) + (puthash server (make-hash-table :test 'equal) erc-lurker-state)) + (puthash sender (current-time) + (gethash server erc-lurker-state)))))))) (use-package erc-fill :after erc