;;; my-elfeed.el --- Configure elfeed -*- lexical-binding: t -*- ;;; Commentary: ;;; Code: (require 'use-package) (use-package elfeed :ensure t :init (setq elfeed-db-directory (expand-file-name "var/elfeed" user-emacs-directory)) :config (eval-after-load 'elfeed-search '(define-key elfeed-search-mode-map (kbd "*") 'elfeed-toggle-star))) (use-package elfeed-org :ensure t :config (elfeed-org) (setq rmh-elfeed-org-files (list (expand-file-name "etc/elfeed.org" user-emacs-directory)))) (defun copy-elfeed-link-title-to-org (entry) "Copy the ENTRY title and URL as org link to the clipboard." (interactive) (let* ((link (elfeed-entry-link entry)) (title (elfeed-entry-title entry)) (titlelink (concat "[[" link "][" title "]]"))) (when titlelink (kill-new titlelink) (x-set-selection 'PRIMARY titlelink) (message "Yanked: %s" titlelink)))) (defun elfeed-show-quick-url-note () "Fastest way to capture entry link to org agenda from elfeed show mode" (interactive) (copy-elfeed-link-title-to-org elfeed-show-entry) (org-capture nil "n") (yank) (org-capture-finalize)) (defun elfeed-search-quick-url-note () "In search mode, capture the title and link for the selected entry or entries in org aganda." (interactive) (let ((entries (elfeed-search-selected))) (cl-loop for entry in entries do (elfeed-untag entry 'unread) when (elfeed-entry-link entry) do (copy-elfeed-link-title-to-org entry) do (org-capture nil "f") do (yank) do (org-capture-finalize) (mapc #'elfeed-search-update-entry entries)) (unless (use-region-p) (forward-line)))) (defalias 'elfeed-toggle-star (elfeed-expose #'elfeed-search-toggle-all 'star)) (defface elfeed-search-mustread-title-face '((t :foreground "red")) "Marks a mustread Elfeed entry.") (defun my/elfeed-eww-open (&optional use-generic-p) "open with eww" (interactive "P") (let ((entries (elfeed-search-selected))) (cl-loop for entry in entries do (elfeed-untag entry 'unread) when (elfeed-entry-link entry) do (eww-browse-url it)) (mapc #'elfeed-search-update-entry entries) (unless (use-region-p) (forward-line)))) (defun my/yt-dlp-it (url) "Downloads the URL in an async shell" (let ((default-directory "~/media/videos")) (async-shell-command (format "yt-dlp %s" (shell-quote-argument url))))) (defun my/elfeed-youtube-dl (&optional use-generic-p) "Youtube-DL link" (interactive "P") (let ((entries (elfeed-search-selected))) (cl-loop for entry in entries do (elfeed-untag entry 'unread) when (elfeed-entry-link entry) do (my/yt-dlp-it it)) (mapc #'elfeed-search-update-entry entries) (unless (use-region-p) (forward-line)))) (define-key elfeed-search-mode-map (kbd "d") 'my/elfeed-youtube-dl) (define-key elfeed-search-mode-map (kbd "t") 'my/elfeed-eww-open) (push '(mustread elfeed-search-must-read-title-face) elfeed-search-face-alist) (provide 'my-elfeed) ;;; my-elfeed.el ends here