121 lines
4.0 KiB
EmacsLisp
121 lines
4.0 KiB
EmacsLisp
;;; Code:
|
|
|
|
(defcustom eaf-rss-reader-split-horizontally t
|
|
"Split web page horizontally, split web page vertically if this option set with nil."
|
|
:type 'boolean)
|
|
|
|
(defcustom eaf-rss-reader-web-page-other-window t
|
|
"Whether open eaf rss webpage in other window"
|
|
:type 'boolean)
|
|
|
|
(defcustom eaf-rss-reader-refresh-time "600"
|
|
"The default feed refresh time."
|
|
:type 'int)
|
|
|
|
(defcustom eaf-rss-reader-keybinding
|
|
'(("A" . "add_feed")
|
|
("R" . "remove_feed")
|
|
("g" . "refresh_feed")
|
|
("i" . "import_opml")
|
|
("o" . "export_opml")
|
|
("n" . "js_select_next_feed")
|
|
("p" . "js_select_prev_feed")
|
|
("j" . "js_select_next_article")
|
|
("k" . "js_select_prev_article")
|
|
("m" . "js_mark_article_as_read")
|
|
("M" . "js_mark_feed_as_read")
|
|
("N" . "js_select_last_feed")
|
|
("P" . "js_select_first_feed")
|
|
("J" . "js_select_last_article")
|
|
("K" . "js_select_first_article")
|
|
("-" . "zoom_out")
|
|
("=" . "zoom_in")
|
|
("x" . "eaf-rss-reader-close-page-or-quit")
|
|
("," . "eaf-rss-reader-scroll-up-web-page")
|
|
("." . "eaf-rss-reader-scroll-down-web-page")
|
|
("r" . "eaf-rss-reader-refresh-web-page")
|
|
("u" . "jump_to_unread")
|
|
("C-j" . "jump_to_unread")
|
|
("f" . "open_link")
|
|
("<f12>" . "open_devtools")
|
|
)
|
|
"The keybinding of EAF RSS Reader."
|
|
:type 'cons)
|
|
|
|
;;;###autoload
|
|
(add-to-list 'eaf-app-binding-alist '("rss-reader" . eaf-rss-reader-keybinding))
|
|
|
|
(setq eaf-rss-reader-module-path (concat (file-name-directory load-file-name) "buffer.py"))
|
|
(add-to-list 'eaf-app-module-path-alist '("rss-reader" . eaf-rss-reader-module-path))
|
|
|
|
(defun eaf-open-rss-reader ()
|
|
"Open EAF Rss Reader"
|
|
(interactive)
|
|
(eaf-open "eaf-rss-reader" "rss-reader"))
|
|
|
|
(defun eaf-rss-reader-web-page ()
|
|
(catch 'found-rss-reader-buffer
|
|
(eaf-for-each-eaf-buffer
|
|
(when (and (boundp 'eaf--buffer-type)
|
|
(string= eaf--buffer-type "eaf-rss-reader"))
|
|
(throw 'found-rss-reader-buffer buffer)))))
|
|
|
|
(defun eaf-open-rss-link (url)
|
|
"Open RSS link in other window."
|
|
(interactive "M[EAF/browser] URL: ")
|
|
;; Try split window to open web pag.
|
|
(when (< (length (cl-remove-if #'window-dedicated-p (window-list))) 2) ;we need remove dedicated window, such as sort-tab window
|
|
(if eaf-rss-reader-split-horizontally
|
|
(split-window-right)
|
|
(split-window-below)))
|
|
(other-window 1)
|
|
|
|
;; Open web page.
|
|
(let ((rss-url (eaf-wrap-url url))
|
|
rss-web-page)
|
|
(cond ((setq rss-web-page (eaf-rss-reader-web-page))
|
|
(switch-to-buffer rss-web-page)
|
|
(with-current-buffer rss-web-page
|
|
(unless (string= eaf--buffer-url rss-url)
|
|
(eaf-call-async "execute_function_with_args" eaf--buffer-id "change_url" rss-url))))
|
|
(t
|
|
(eaf-open rss-url "browser")
|
|
(setq-local eaf--buffer-type "eaf-rss-reader"))))
|
|
|
|
;; Switch back to rss reader buffer according to `eaf-rss-reader-web-page-other-window'
|
|
(if eaf-rss-reader-web-page-other-window
|
|
(other-window -1)
|
|
(delete-other-windows)))
|
|
|
|
(defun eaf-rss-reader-close-page-or-quit ()
|
|
(interactive)
|
|
(save-excursion
|
|
(let ((rss-web-page (eaf-rss-reader-web-page)))
|
|
(if rss-web-page
|
|
(progn
|
|
(switch-to-buffer rss-web-page)
|
|
(kill-buffer-and-window))
|
|
(eaf-call-async "eval_function" eaf--buffer-id "insert_or_close_buffer" (key-description (this-command-keys-vector)))))))
|
|
|
|
(defun eaf-rss-reader-run-in-web-page (command)
|
|
(let ((rss-web-page (eaf-rss-reader-web-page)))
|
|
(when rss-web-page
|
|
(with-current-buffer rss-web-page
|
|
(eaf-call-async "eval_function" eaf--buffer-id command (key-description (this-command-keys-vector)))))))
|
|
|
|
(defun eaf-rss-reader-scroll-up-web-page ()
|
|
(interactive)
|
|
(eaf-rss-reader-run-in-web-page "scroll_up"))
|
|
|
|
(defun eaf-rss-reader-scroll-down-web-page ()
|
|
(interactive)
|
|
(eaf-rss-reader-run-in-web-page "scroll_down"))
|
|
|
|
(defun eaf-rss-reader-refresh-web-page ()
|
|
(interactive)
|
|
(eaf-rss-reader-run-in-web-page "refresh_page"))
|
|
|
|
(provide 'eaf-rss-reader)
|
|
|
|
;;; eaf-rss-reader.el ends here
|