Add +eww and further customize eww

This commit is contained in:
Case Duckworth 2021-12-26 22:49:25 -06:00
parent 93545db7a8
commit d7a6880805
3 changed files with 97 additions and 16 deletions

11
init.el
View File

@ -236,7 +236,16 @@
(setenv "PAGER" "cat")))
(setup eww
(:hook 'reading-mode))
(:also-load +eww)
(:option eww-search-prefix "https://duckduckgo.com/html?q="
url-privacy-level '(email agent cookies lastloc))
(add-hook 'eww-after-render-hook 'reading-mode)
(:hook '+eww-bookmark-setup
'+eww-track-readable-mode)
(:bind "b" 'bookmark-set
"B" 'bookmark-jump
"M-n" nil
"M-p" nil))
(setup ibuffer
(:also-load ibuf-ext)

71
lisp/+eww.el Normal file
View File

@ -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

View File

@ -115,21 +115,22 @@ The order of elements matters: whichever one matches first is applied."
"Display an indication that the buffer is in `reading-mode'."
(when reading-mode
(concat " "
(propertize "R"
'help-echo (format "%s\n%s"
"Buffer is in reading-mode."
"mouse-2: disable reading-mode.")
'local-map (purecopy
(simple-modeline-make-mouse-map
'mouse-2 (lambda (ev)
(interactive "e")
(with-selected-window
(posn-window
(event-start ev))
(reading-mode -1)
(force-mode-line-update)))))
'face 'font-lock-doc-face
'mouse-face 'mode-line-highlight))))
(propertize
(concat "R" (when (bound-and-true-p +eww-readable-p) "w"))
'help-echo (format "%s\n%s"
"Buffer is in reading-mode."
"mouse-2: disable reading-mode.")
'local-map (purecopy
(simple-modeline-make-mouse-map
'mouse-2 (lambda (ev)
(interactive "e")
(with-selected-window
(posn-window
(event-start ev))
(reading-mode -1)
(force-mode-line-update)))))
'face 'font-lock-doc-face
'mouse-face 'mode-line-highlight))))
(define-minor-mode file-percentage-mode
"Toggle the percentage display in the mode line (File Percentage Mode)."