summaryrefslogtreecommitdiffhomepage
path: root/custom/jao-custom-gnus.el
diff options
context:
space:
mode:
Diffstat (limited to 'custom/jao-custom-gnus.el')
-rw-r--r--custom/jao-custom-gnus.el194
1 files changed, 127 insertions, 67 deletions
diff --git a/custom/jao-custom-gnus.el b/custom/jao-custom-gnus.el
index 0d75b43..3165372 100644
--- a/custom/jao-custom-gnus.el
+++ b/custom/jao-custom-gnus.el
@@ -42,51 +42,39 @@
gnus-generate-tree-function 'gnus-generate-horizontal-tree
gnus-tree-minimize-window nil)
-(when jao-gnus-use-three-panes
-
- ;; (dolist (m '(calendar-mode org-agenda-mode gnus-group-mode))
- ;; (add-to-list 'display-buffer-alist `((major-mode . ,m) (dedicated t))))
-
- (setq calendar-left-margin 6)
-
- (let ((side-bar '(vertical 1.0
- ("inbox.org" 0.4)
- ("*Org Agenda*" 1.0)
- ("*Calendar*" 8)))
- (wide-len jao-gnus-wide-width)
- (groups-len jao-gnus-groups-width)
- (summary-len (- jao-gnus-wide-width jao-gnus-groups-width)))
- (gnus-add-configuration
- `(article
- (horizontal 1.0
- (vertical ,groups-len (group 1.0))
- (vertical ,summary-len
- (summary 0.25 point)
- (article 1.0))
- ,side-bar)))
-
- (gnus-add-configuration
- `(group (horizontal 1.0 (group ,wide-len point) ,side-bar)))
-
- (gnus-add-configuration
- `(message (horizontal 1.0 (message ,wide-len point) ,side-bar)))
-
- (gnus-add-configuration
- `(reply-yank (horizontal 1.0 (message ,wide-len point) ,side-bar)))
-
- (gnus-add-configuration
- `(summary
- (horizontal 1.0
- (vertical ,groups-len (group 1.0))
- (vertical ,summary-len (summary 1.0 point))
- ,side-bar)))
-
- (gnus-add-configuration
- `(reply
- (horizontal 1.0
- (message ,(- wide-len 100) point)
- (article 100)
- ,side-bar)))))
+(setq calendar-left-margin 6)
+
+(let ((wide-len jao-gnus-wide-width)
+ (groups-len jao-gnus-groups-width)
+ (summary-len (- jao-gnus-wide-width jao-gnus-groups-width)))
+ (gnus-add-configuration
+ `(article
+ (horizontal 1.0
+ (vertical ,groups-len (group 1.0))
+ (vertical 1.0
+ (summary 0.25 point)
+ (article 1.0)))))
+
+ ;; (gnus-add-configuration
+ ;; `(group (horizontal 1.0 (group ,wide-len point))))
+
+ (gnus-add-configuration
+ `(message (horizontal 1.0 (message ,wide-len point))))
+
+ (gnus-add-configuration
+ `(reply-yank (horizontal 1.0 (message ,wide-len point))))
+
+ (gnus-add-configuration
+ `(summary
+ (horizontal 1.0
+ (vertical ,groups-len (group 1.0))
+ (vertical 1.0 (summary 1.0 point)))))
+
+ (gnus-add-configuration
+ `(reply
+ (horizontal 1.0
+ (message ,(- wide-len 100) point)
+ (article 100)))))
;;;; no blue icon
(advice-add 'gnus-mode-line-buffer-identification :override #'identity)
@@ -114,7 +102,7 @@
(cl-defmethod gnus-search-indexed-search-command ((engine gnus-search-recoll)
(qstring string)
- _query
+ query
&optional groups)
(let* ((subdir (slot-value engine 'remove-prefix))
(sep (slot-value engine 'separator))
@@ -128,8 +116,18 @@
(mapconcat (lambda (d) (format "dir:%s" d))
gdirs " OR ")
")")))
- (q (concat "mime:message " dirsq " (" qstring ")")))
- ;; (message "query is: %s" q)
+ (qstring (if (string-prefix-p "id:" qstring)
+ (replace-regexp-in-string "<\\|>" "\"" qstring)
+ qstring))
+ (qstring (if (cdr (assoc 'thread query))
+ (concat qstring " OR "
+ (replace-regexp-in-string "id:\"" "ref:\""
+ qstring))
+ qstring))
+ (qstring (replace-regexp-in-string " or " " OR " qstring))
+ (qstring (replace-regexp-in-string " and " " AND " qstring))
+ (q (format "mime:message %s (%s)" dirsq qstring)))
+ ;; (message "query is: %s -- %S" q query)
`("-b" "-t" "-q" ,q))))
;; (add-to-list 'gnus-parameters '("^nnselect:.*" (nnselect-rescan . t)))
@@ -202,8 +200,10 @@
(when jao-gnus-use-nnml
(add-to-list
'gnus-secondary-select-methods
- `(nnml "" (gnus-search-engine gnus-search-recoll
- (remove-prefix ,(jao-gnus-dir "Mail/"))))))
+ ;; `(nnml "" (gnus-search-engine gnus-search-recoll
+ ;; (remove-prefix ,(jao-gnus-dir "Mail/"))))
+ `(nnml "" (gnus-search-engine gnus-search-notmuch
+ (remove-prefix "/home/jao/var/mail/gnus")))))
(when jao-gnus-use-nnml
(dolist (p jao-gnus-nnml-group-params)
@@ -312,8 +312,8 @@
(w (- (or w (window-width)) d)))
(setq gnus-summary-line-format (format jao-gnus--summary-line-fmt w))))
-(add-hook 'gnus-select-group-hook 'jao-gnus--set-summary-line)
-;; (jao-gnus--set-summary-line 187)
+;; (add-hook 'gnus-select-group-hook 'jao-gnus--set-summary-line)
+;; (jao-gnus--set-summary-line 150)
(add-to-list 'nnmail-extra-headers 'Cc)
(add-to-list 'nnmail-extra-headers 'BCc)
@@ -437,20 +437,49 @@
(use-package org-capture
:config
(add-to-list 'org-capture-templates
+ '("x" "arXiv" entry (file "notes/physics/arxiv.org")
+ "* %(jao-gnus-subject)\n\n %i\n\n %(jao-gnus-org-url)"
+ :immediate-finish t)
+ t)
+ (add-to-list 'org-capture-templates
'("X" "arXiv" entry (file "notes/physics/arxiv.org")
- "* %:subject\n %i" :immediate-finish t)
+ "* %(jao-gnus-subject)\n\n%(jao-gnus-org-paragraph \"%i\")"
+ :immediate-finish t)
t)
(org-capture-upgrade-templates org-capture-templates))
+(defvar jao-gnus-org-url nil)
+(defun jao-gnus-org-url () jao-gnus-org-url)
+(defun jao-gnus-org-paragraph (x)
+ (with-temp-buffer
+ (insert " " (string-trim (or x "")) "\n ")
+ (goto-char 0)
+ (fill-paragraph)
+ (goto-char (point-max))
+ (open-rectangle 0 (point))
+ (concat (buffer-string) "\n " (or jao-gnus-org-url ""))))
+(defvar jao-gnus-subject nil)
+(defun jao-gnus-subject () jao-gnus-subject)
+
(defun jao-gnus-arXiv-capture ()
(interactive)
+ (unless (derived-mode-p '(gnus-summary-mode)) (gnus-article-show-summary))
+ (setq jao-gnus-subject (gnus-summary-article-subject))
(gnus-summary-select-article-buffer)
(gnus-article-goto-part 0)
- (forward-paragraph)
- (setq-local transient-mark-mode 'lambda)
- (set-mark (point))
- (goto-char (point-max))
- (org-capture nil "X"))
+ (let ((transient-mark-mode t))
+ (set-mark (point))
+ (forward-paragraph)
+ (or (and (save-excursion
+ (when (re-search-forward "^Link" nil t)
+ (beginning-of-line)
+ (setq jao-gnus-org-url (org-eww-url-below-point))))
+ (org-capture nil "X"))
+ (and (save-excursion
+ (when (re-search-forward "^URL: " nil t)
+ (setq jao-gnus-org-url (thing-at-point-url-at-point))))
+ (org-capture nil "x"))))
+ (gnus-article-show-summary))
;;; article
;;;; config, headers
@@ -530,12 +559,21 @@
(save-excursion
(goto-char (point-min))
(when (or (search-forward-regexp "^Via: h" nil t)
- (search-forward-regexp "^URL: h" nil t)
+ (search-forward-regexp "^URL:[\n ]h" nil t)
(and (search-forward-regexp "^Link$" nil t)
(not (beginning-of-line))))
- (if external
- (jao-browse-with-external-browser)
- (browse-url (jao-url-around-point))))))
+ (cond (external (jao-browse-with-external-browser))
+ ((featurep 'jao-custom-eww) (eww (jao-url-around-point)))
+ (t (browse-url (jao-url-around-point)))))))
+
+(defun jao-gnus-from-eww (keep-eww-buffer)
+ (interactive "P")
+ (unless keep-eww-buffer (jao-eww-close))
+ (jao-afio-goto-mail)
+ (gnus-article-show-summary))
+
+(with-eval-after-load 'eww
+ (define-key eww-mode-map (kbd "h") #'jao-gnus-from-eww))
(defun jao-gnus-open-enclosure ()
(interactive)
@@ -543,7 +581,7 @@
(gnus-summary-select-article-buffer)
(save-excursion
(goto-char (point-min))
- (let ((offset (or (and (search-forward-regexp "^Enclosure: " nil t) 2)
+ (let ((offset (or (and (search-forward-regexp "^Enclosure: ?" nil t) 2)
(and (search-forward-regexp "^Enclosure$" nil t) -2))))
(when offset (forward-char offset))
(if-let ((url (jao-url-around-point)))
@@ -576,7 +614,17 @@
(gnus-demon-scan-news)
(jao-gnus--notify)))
-(gnus-demon-add-handler 'jao-gnus--scan 5 1)
+(defun jao-gnus-add-demon ()
+ (interactive)
+ (gnus-demon-add-handler 'jao-gnus--scan 5 1))
+
+(jao-when-linux
+ (jao-gnus-add-demon)
+ ;; (gnus-demon-remove-handler 'jao-gnus--scan)
+ (gnus-demon-init)
+ ;; this is, in theory, not needed; but at some point in the way to emacs
+ ;; version 31 this idle timers have ceased to work after a sleep/awake cycle
+ (jao-when-linux (add-to-list 'jao-sleep-awake-functions #'jao-gnus-add-demon)))
;;; add-ons
;;;; notifications
@@ -587,13 +635,14 @@
(seq-difference '("feeds.trove")))))
`(("nnml:bigml\\.inbox" "B" jao-themes-f00)
("nnml:bigml\\.alba" "A" jao-themes-f00)
+ ("nnml:bigml\\.ryou" "R" jao-themes-f00)
("nnml:bigml\\.bugs" "b" jao-themes-error)
("nnml:bigml\\.support" "S" default)
+ ("nnml:bigml\\.[^aibsr]" "W" jao-themes-dimm)
("nnml:jao\\.\\(inbox\\|trove\\)" "I" jao-themes-f01)
- ("nnml:bigml\\.[^aibs]" "W" jao-themes-dimm)
("nnml:jao.hacking" "H" jao-themes-dimm)
- ("nnml:jao.write" "W" jao-themes-error)
- ("nnml:jao.[^isthw]" "J" jao-themes-dimm)
+ ("nnml:jao.write" "W" jao-themes-warning)
+ ("nnml:jao.[^ithw]" "J" jao-themes-dimm)
(,(format "^nnml:%s" (regexp-opt feeds)) "F" jao-themes-dimm)
("feeds\\.e" "E" jao-themes-dimm)
("nnml:local" "l" jao-themes-dimm)
@@ -643,6 +692,7 @@
(jao-gnus--notify)))
(add-hook 'gnus-summary-exit-hook #'jao-gnus--on-summary-exit)
+(add-hook 'gnus-exit-group-hook #'jao-gnus--notify)
;;;; open mail file in gnus
(defun jao-gnus-file-to-group (file &optional maildir newsdir m-server n-server)
@@ -717,6 +767,16 @@
(with-eval-after-load "consult-recoll"
(add-to-list 'consult-recoll-open-fns
'("message/rfc822" . jao-gnus-goto-file))))
+;;;; notmuch
+(use-package jao-notmuch-gnus
+ :demand t)
+
+(jao-load-path "consult-notmuch")
+
+(use-package consult-notmuch
+ :ensure t
+ :bind (:map gnus-group-mode-map ("S" . #'jao-gnus-consult-notmuch)))
+
;;; keyboard shortcuts
(define-key gnus-article-mode-map "i" 'jao-gnus-show-images)
(define-key gnus-summary-mode-map "i" 'jao-gnus-show-images)