2017-10-22 16:06:43 +02:00
|
|
|
;;; Elfeed
|
|
|
|
|
2018-07-28 12:18:53 +02:00
|
|
|
(setq elfeed-db-directory (expand-file-name "elfeed" user-emacs-directory)
|
|
|
|
elfeed-search-title-max-width 100)
|
2017-10-22 16:06:43 +02:00
|
|
|
|
2018-07-28 13:01:40 +02:00
|
|
|
(defun ambrevar/elfeed-add-bookmark ()
|
|
|
|
"Add bookmark using `eww-add-bookmark'."
|
|
|
|
(interactive)
|
|
|
|
(let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single))))
|
|
|
|
(eww-add-bookmark (elfeed-entry-link entry)
|
|
|
|
(elfeed-entry-title entry))))
|
|
|
|
(define-key elfeed-search-mode-map "m" #'ambrevar/elfeed-add-bookmark)
|
|
|
|
(define-key elfeed-show-mode-map "m" #'ambrevar/elfeed-add-bookmark)
|
|
|
|
|
2018-02-15 13:28:49 +01:00
|
|
|
(defun ambrevar/elfeed-play-with-mpv ()
|
2017-10-22 16:06:43 +02:00
|
|
|
"Play entry link with mpv."
|
|
|
|
(interactive)
|
|
|
|
(let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single)))
|
|
|
|
(quality-arg "")
|
|
|
|
(quality-val (completing-read "Max height resolution (0 for unlimited): " '("0" "480" "720") nil nil)))
|
|
|
|
(setq quality-val (string-to-number quality-val))
|
|
|
|
(message "Opening %s with height≤%s with mpv..." (elfeed-entry-link entry) quality-val)
|
|
|
|
(when (< 0 quality-val)
|
|
|
|
(setq quality-arg (format "--ytdl-format=[height<=?%s]" quality-val)))
|
|
|
|
(start-process "elfeed-mpv" nil "mpv" quality-arg (elfeed-entry-link entry))))
|
|
|
|
|
2018-02-15 13:28:49 +01:00
|
|
|
(defun ambrevar/elfeed-open-with-eww ()
|
2018-02-12 13:00:13 +01:00
|
|
|
"Open in eww with `eww-readable'."
|
|
|
|
(interactive)
|
|
|
|
(let ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :single))))
|
|
|
|
(eww (elfeed-entry-link entry))
|
|
|
|
(add-hook 'eww-after-render-hook 'eww-readable nil t)))
|
|
|
|
|
2018-02-15 13:28:49 +01:00
|
|
|
(defvar ambrevar/elfeed-visit-patterns
|
2018-07-30 09:44:40 +02:00
|
|
|
'(("//[^/]*youtu\\.?be" . ambrevar/elfeed-play-with-mpv)
|
2018-02-15 13:28:49 +01:00
|
|
|
("phoronix" . ambrevar/elfeed-open-with-eww))
|
2018-02-12 13:00:13 +01:00
|
|
|
"List of (regexps . function) to match against elfeed entry link to know
|
|
|
|
whether how to visit the link.")
|
|
|
|
|
2018-02-15 23:40:15 +01:00
|
|
|
(defun ambrevar/elfeed-visit-maybe-external ()
|
2018-02-15 13:28:49 +01:00
|
|
|
"Visit with external function if entry link matches `ambrevar/elfeed-visit-patterns',
|
2018-02-12 13:00:13 +01:00
|
|
|
visit otherwise."
|
2017-10-22 16:06:43 +02:00
|
|
|
(interactive)
|
2018-06-12 11:51:37 +02:00
|
|
|
(let ((entry (if (eq major-mode 'elfeed-show-mode)
|
|
|
|
elfeed-show-entry
|
|
|
|
(elfeed-search-selected :single)))
|
2018-02-15 13:28:49 +01:00
|
|
|
(patterns ambrevar/elfeed-visit-patterns))
|
2018-02-12 13:00:13 +01:00
|
|
|
(while (and patterns (not (string-match (caar patterns) (elfeed-entry-link entry))))
|
2017-10-22 16:06:43 +02:00
|
|
|
(setq patterns (cdr patterns)))
|
2018-06-12 11:51:37 +02:00
|
|
|
(cond
|
|
|
|
(patterns
|
2018-06-28 18:53:39 +02:00
|
|
|
(elfeed-untag entry 'unread)
|
|
|
|
(elfeed-search-update-entry entry)
|
2018-06-12 11:51:37 +02:00
|
|
|
(funcall (cdar patterns)))
|
|
|
|
((eq major-mode 'elfeed-search-mode)
|
2018-06-16 15:00:28 +02:00
|
|
|
(call-interactively 'elfeed-search-show-entry))
|
2018-06-12 11:51:37 +02:00
|
|
|
(t (elfeed-show-visit)))))
|
2017-10-22 16:06:43 +02:00
|
|
|
|
2018-02-15 13:28:49 +01:00
|
|
|
(defun ambrevar/elfeed-kill-entry ()
|
2018-02-12 13:01:08 +01:00
|
|
|
"Like `elfeed-kill-buffer' but pop elfeed search."
|
|
|
|
(interactive)
|
|
|
|
(elfeed-kill-buffer)
|
|
|
|
(switch-to-buffer "*elfeed-search*"))
|
2018-02-15 13:28:49 +01:00
|
|
|
(define-key elfeed-show-mode-map "q" #'ambrevar/elfeed-kill-entry)
|
2018-02-12 13:01:08 +01:00
|
|
|
|
2018-02-15 13:28:49 +01:00
|
|
|
(defun ambrevar/elfeed-switch-back ()
|
2018-02-12 12:58:24 +01:00
|
|
|
"Back to the last elfeed buffer, entry or search."
|
|
|
|
(interactive)
|
|
|
|
(let ((buffer (get-buffer "*elfeed-entry*")))
|
|
|
|
(if buffer
|
|
|
|
(switch-to-buffer buffer)
|
|
|
|
(elfeed))))
|
|
|
|
|
2018-08-27 10:10:05 +02:00
|
|
|
(defun ambrevar/elfeed-setup ()
|
|
|
|
(add-hook 'window-configuration-change-hook 'elfeed-search-update--force nil t))
|
2018-09-03 23:52:56 +02:00
|
|
|
;; This is too slow on big buffers.
|
|
|
|
;; (add-hook 'elfeed-search-mode-hook 'ambrevar/elfeed-setup)
|
2018-08-27 10:10:05 +02:00
|
|
|
|
2018-07-14 15:35:53 +02:00
|
|
|
(load "~/personal/news/elfeed.el.gpg" t)
|
2017-10-22 16:06:43 +02:00
|
|
|
|
|
|
|
(provide 'init-elfeed)
|