From d7a6880805833d8b07caf4daa2b65b8abfe9f67b Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Sun, 26 Dec 2021 22:49:25 -0600 Subject: Add +eww and further customize eww --- lisp/+eww.el | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lisp/+eww.el (limited to 'lisp/+eww.el') diff --git a/lisp/+eww.el b/lisp/+eww.el new file mode 100644 index 0000000..aad602f --- /dev/null +++ b/lisp/+eww.el @@ -0,0 +1,71 @@ +;;; +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 -- cgit 1.4.1-21-gabe81