summaryrefslogtreecommitdiffhomepage
path: root/lib/net/jao-notmuch.el
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2021-08-03 15:16:35 +0100
committerjao <jao@gnu.org>2021-08-03 15:16:48 +0100
commita812744c54681603ca07efddea749e210aee0511 (patch)
tree59271f5c164ddb075f91e8b498fe4d376f7c839f /lib/net/jao-notmuch.el
parent8a3718bf2866dfa322a8b1d5c5f293a422154fa9 (diff)
downloadelibs-a812744c54681603ca07efddea749e210aee0511.tar.gz
elibs-a812744c54681603ca07efddea749e210aee0511.tar.bz2
notmuch: scrolling and closing message window
Diffstat (limited to 'lib/net/jao-notmuch.el')
-rw-r--r--lib/net/jao-notmuch.el67
1 files changed, 42 insertions, 25 deletions
diff --git a/lib/net/jao-notmuch.el b/lib/net/jao-notmuch.el
index 2a785b1..918171f 100644
--- a/lib/net/jao-notmuch.el
+++ b/lib/net/jao-notmuch.el
@@ -90,6 +90,12 @@
(cond ((eww--url-at-point) (shr-browse-url) 'url)
((button-at (point)) (push-button) 'button))))))
+(defun jao-notmuch-tree-toggle-message ()
+ (interactive)
+ (if (window-live-p notmuch-tree-message-window)
+ (notmuch-tree-close-message-window)
+ (notmuch-tree-show-message nil)))
+
(defun jao-notmuch-click-message-buffer ()
(interactive)
(let ((b (current-buffer)))
@@ -102,6 +108,31 @@
(pop-to-buffer jao-notmuch--tree-buffer nil no-record)
(user-error "No tree view for this buffer")))
+(defun jao-notmuch-tree-scroll-or-next ()
+ "Scroll or next message in forest or exit if none."
+ (interactive)
+ (if (notmuch-tree-scroll-message-window)
+ (notmuch-tree-next-matching-message t)
+ (when (not (window-live-p notmuch-tree-message-window))
+ (notmuch-tree-show-message nil)))
+ (jao-notmuch--tree-update-buffer-name))
+
+(defun jao-notmuch-tree-show-or-scroll ()
+ "Show current message, or scroll it if visible."
+ (interactive)
+ (if (window-live-p notmuch-tree-message-window)
+ (scroll-other-window 1)
+ (notmuch-tree-show-message nil)
+ (jao-notmuch--tree-update-buffer-name)))
+
+(notmuch-tree--define-do-in-message-window
+ jao-notmuch-tree-end-of-buffer
+ end-of-buffer)
+
+(notmuch-tree--define-do-in-message-window
+ jao-notmuch-tree-beginning-of-buffer
+ beginning-of-buffer)
+
(defun jao-notmuch-show-next-button ()
(interactive)
(when (get-text-property (point) 'w3m-href-anchor)
@@ -116,7 +147,7 @@
(goto-char (previous-single-property-change pos 'w3m-href-anchor))
(backward-button 1)))
-(defun jao-w3m-get-page-urls (res)
+(defun jao-notmuch--page-urls (res)
(save-excursion
(goto-char (point-min))
(let ((pos (point)))
@@ -129,7 +160,7 @@
(interactive "P")
(when (or (derived-mode-p 'notmuch-show-mode)
(jao-notmuch-goto-message-buffer))
- (let ((urls (jao-w3m-get-page-urls (notmuch-show--gather-urls)))
+ (let ((urls (jao-notmuch--page-urls (notmuch-show--gather-urls)))
(fn (if external browse-url-secondary-browser-function #'browse-url)))
(if urls
(funcall fn (completing-read "Browse URL: " urls))
@@ -199,16 +230,19 @@
notmuch-saved-searches)))
(or (plist-get q :name) notmuch-tree-basic-query))))))
+(defun jao-notmuch--looking-at-new-p (&optional p)
+ (when-let (ts (if p (plist-get p :tags) (notmuch-show-get-tags)))
+ (or (member "unread" ts) (member "new" ts))))
+
(defun jao-notmuch--unread-count ()
(save-excursion
(goto-char (point-min))
(let ((p) (cnt) (total))
(while (setq p (text-property-search-forward :notmuch-message-properties))
(unless cnt (setq cnt 0 total 0))
- (let ((tags (plist-get (prop-match-value p) :tags)))
- (setq total (1+ total))
- (when (or (member "unread" tags) (member "new" tags))
- (setq cnt (1+ cnt)))))
+ (setq total (1+ total))
+ (when (jao-notmuch--looking-at-new-p (prop-match-value p))
+ (setq cnt (1+ cnt))))
(when cnt (format "%s / %s messages" cnt total)))))
(defun jao-notmuch--tree-update-buffer-name (&optional n)
@@ -236,6 +270,8 @@
(interactive "P")
(if thread
(progn (notmuch-tree-next-thread)
+ (unless (jao-notmuch--looking-at-new-p)
+ (notmuch-tree-next-matching-message (not no-exit)))
(notmuch-tree-show-message nil))
(notmuch-tree-next-matching-message (not no-exit)))
(jao-notmuch--tree-update-buffer-name))
@@ -274,25 +310,6 @@
(let ((tags (if unmark '("-spam") '("-unread" "-new" "+spam"))))
(jao-notmuch-tree--tag-and-next tags nil nil)))
-;; Scrolling the shown message
-
-(defun jao-notmuch-tree-scroll-or-next ()
- "Scroll or next message in forest or exit if none."
- (interactive)
- (if (notmuch-tree-scroll-message-window)
- (notmuch-tree-next-matching-message t)
- (when (not (window-live-p notmuch-tree-message-window))
- (notmuch-tree-show-message nil)))
- (jao-notmuch--tree-update-buffer-name))
-
-(defun jao-notmuch-tree-show-or-scroll ()
- "Show current message, or scroll it if visible."
- (interactive)
- (if (window-live-p notmuch-tree-message-window)
- (scroll-other-window 1)
- (notmuch-tree-show-message nil)
- (jao-notmuch--tree-update-buffer-name)))
-
(provide 'jao-notmuch)
;;; jao-notmuch.el ends here