about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--init.el11
-rw-r--r--lisp/+eww.el71
-rw-r--r--lisp/+modeline.el31
3 files changed, 97 insertions, 16 deletions
diff --git a/init.el b/init.el index ab08e10..ddb755c 100644 --- a/init.el +++ b/init.el
@@ -236,7 +236,16 @@
236 (setenv "PAGER" "cat"))) 236 (setenv "PAGER" "cat")))
237 237
238(setup eww 238(setup eww
239 (:hook 'reading-mode)) 239 (:also-load +eww)
240 (:option eww-search-prefix "https://duckduckgo.com/html?q="
241 url-privacy-level '(email agent cookies lastloc))
242 (add-hook 'eww-after-render-hook 'reading-mode)
243 (:hook '+eww-bookmark-setup
244 '+eww-track-readable-mode)
245 (:bind "b" 'bookmark-set
246 "B" 'bookmark-jump
247 "M-n" nil
248 "M-p" nil))
240 249
241(setup ibuffer 250(setup ibuffer
242 (:also-load ibuf-ext) 251 (:also-load ibuf-ext)
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 @@
1;;; +eww.el -*- lexical-binding: t; -*-
2
3;;; Code:
4
5(require 'bookmark)
6(require 'eww)
7
8;; Track whether the current page is readable
9
10(defvar-local +eww-readable-p nil
11 "Whether `eww-readable' has been toggled on the current buffer.")
12
13(defun +eww-mark-readable (&rest _)
14 "ADVICE to mark current eww buffer \"readable.\""
15 (setq-local +eww-readable-p t))
16
17(defun +eww-mark-unreadable (&rest _)
18 "ADVICE to mark current eww buffer \"unreadable.\""
19 (setq-local +eww-readable-p nil))
20
21(defvar +eww-readable-unreadable-after-functions '(eww-render
22 eww-reload
23 eww-back-url)
24 "Functions after which the page is rendered \"unreadable\".")
25
26;;;###autoload
27(define-minor-mode +eww-track-readable-mode
28 "Track whether the current webpage has been rendered readable."
29 :lighter ""
30 (if +eww-track-readable-mode
31 (progn
32 (advice-add 'eww-readable :after #'+eww-mark-readable)
33 (dolist (func +eww-readable-unreadable-after-functions)
34 (advice-add func :after #'+eww-mark-unreadable)))
35 (dolist (func +eww-readable-unreadable-after-functions)
36 (advice-remove func #'+eww-mark-unreadable))
37 (advice-remove 'eww-readable #'+eww-mark-readable)))
38
39;; Integrate bookmarks in eww
40
41(defun +eww-bookmark--make ()
42 "Make eww bookmark record."
43 `((filename . ,(plist-get eww-data :url))
44 (title . ,(plist-get eww-data :title))
45 (time . ,(current-time-string))
46 (handler . ,#'+eww-bookmark-handler)
47 (defaults . (,(concat
48 ;; url without the https and path
49 (replace-regexp-in-string
50 "/.*" ""
51 (replace-regexp-in-string
52 "\\`https?://" ""
53 (plist-get eww-data :url)))
54 " - "
55 ;; page title
56 (replace-regexp-in-string
57 "\\` +\\| +\\'" ""
58 (replace-regexp-in-string
59 "[\n\t\r ]+" " "
60 (plist-get eww-data :title))))))))
61
62(defun +eww-bookmark-handler (bm)
63 "Handler for eww bookmarks."
64 (eww-browse-url (alist-get 'filename bm)))
65
66(defun +eww-bookmark-setup ()
67 "Setup eww bookmark integration."
68 (setq-local bookmark-make-record-function #'eww-bookmark--make))
69
70(provide '+eww)
71;;; +eww.el ends here
diff --git a/lisp/+modeline.el b/lisp/+modeline.el index 855ff50..5354e5b 100644 --- a/lisp/+modeline.el +++ b/lisp/+modeline.el
@@ -115,21 +115,22 @@ The order of elements matters: whichever one matches first is applied."
115 "Display an indication that the buffer is in `reading-mode'." 115 "Display an indication that the buffer is in `reading-mode'."
116 (when reading-mode 116 (when reading-mode
117 (concat " " 117 (concat " "
118 (propertize "R" 118 (propertize
119 'help-echo (format "%s\n%s" 119 (concat "R" (when (bound-and-true-p +eww-readable-p) "w"))
120 "Buffer is in reading-mode." 120 'help-echo (format "%s\n%s"
121 "mouse-2: disable reading-mode.") 121 "Buffer is in reading-mode."
122 'local-map (purecopy 122 "mouse-2: disable reading-mode.")
123 (simple-modeline-make-mouse-map 123 'local-map (purecopy
124 'mouse-2 (lambda (ev) 124 (simple-modeline-make-mouse-map
125 (interactive "e") 125 'mouse-2 (lambda (ev)
126 (with-selected-window 126 (interactive "e")
127 (posn-window 127 (with-selected-window
128 (event-start ev)) 128 (posn-window
129 (reading-mode -1) 129 (event-start ev))
130 (force-mode-line-update))))) 130 (reading-mode -1)
131 'face 'font-lock-doc-face 131 (force-mode-line-update)))))
132 'mouse-face 'mode-line-highlight)))) 132 'face 'font-lock-doc-face
133 'mouse-face 'mode-line-highlight))))
133 134
134(define-minor-mode file-percentage-mode 135(define-minor-mode file-percentage-mode
135 "Toggle the percentage display in the mode line (File Percentage Mode)." 136 "Toggle the percentage display in the mode line (File Percentage Mode)."