72 lines
2.3 KiB
EmacsLisp
72 lines
2.3 KiB
EmacsLisp
;;; +eww.el -*- lexical-binding: t; -*-
|
|
|
|
;;; Code:
|
|
|
|
(require 'bookmark)
|
|
(require 'eww)
|
|
|
|
;; Track whether the current page is readable
|
|
|
|
(defvar-local +eww-readable-p nil
|
|
"Whether `eww-readable' has been toggled on the current buffer.")
|
|
|
|
(defun +eww-mark-readable (&rest _)
|
|
"ADVICE to mark current eww buffer \"readable.\""
|
|
(setq-local +eww-readable-p t))
|
|
|
|
(defun +eww-mark-unreadable (&rest _)
|
|
"ADVICE to mark current eww buffer \"unreadable.\""
|
|
(setq-local +eww-readable-p nil))
|
|
|
|
(defvar +eww-readable-unreadable-after-functions '(eww-render
|
|
eww-reload
|
|
eww-back-url)
|
|
"Functions after which the page is rendered \"unreadable\".")
|
|
|
|
;;;###autoload
|
|
(define-minor-mode +eww-track-readable-mode
|
|
"Track whether the current webpage has been rendered readable."
|
|
:lighter ""
|
|
(if +eww-track-readable-mode
|
|
(progn
|
|
(advice-add 'eww-readable :after #'+eww-mark-readable)
|
|
(dolist (func +eww-readable-unreadable-after-functions)
|
|
(advice-add func :after #'+eww-mark-unreadable)))
|
|
(dolist (func +eww-readable-unreadable-after-functions)
|
|
(advice-remove func #'+eww-mark-unreadable))
|
|
(advice-remove 'eww-readable #'+eww-mark-readable)))
|
|
|
|
;; Integrate bookmarks in eww
|
|
|
|
(defun +eww-bookmark--make ()
|
|
"Make eww bookmark record."
|
|
`((filename . ,(plist-get eww-data :url))
|
|
(title . ,(plist-get eww-data :title))
|
|
(time . ,(current-time-string))
|
|
(handler . ,#'+eww-bookmark-handler)
|
|
(defaults . (,(concat
|
|
;; url without the https and path
|
|
(replace-regexp-in-string
|
|
"/.*" ""
|
|
(replace-regexp-in-string
|
|
"\\`https?://" ""
|
|
(plist-get eww-data :url)))
|
|
" - "
|
|
;; page title
|
|
(replace-regexp-in-string
|
|
"\\` +\\| +\\'" ""
|
|
(replace-regexp-in-string
|
|
"[\n\t\r ]+" " "
|
|
(plist-get eww-data :title))))))))
|
|
|
|
(defun +eww-bookmark-handler (bm)
|
|
"Handler for eww bookmarks."
|
|
(eww-browse-url (alist-get 'filename bm)))
|
|
|
|
(defun +eww-bookmark-setup ()
|
|
"Setup eww bookmark integration."
|
|
(setq-local bookmark-make-record-function #'eww-bookmark--make))
|
|
|
|
(provide '+eww)
|
|
;;; +eww.el ends here
|