diff --git a/layers/+web/eww/config.el b/layers/+web/eww/config.el new file mode 100644 index 000000000..ba668ec22 --- /dev/null +++ b/layers/+web/eww/config.el @@ -0,0 +1,33 @@ +;;; config.el --- EWW Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2022 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +(defvar spacemacs--eww-buffers nil + "A list of EWW buffers maintained by Spacemacs EWW layer.") + +(defvar spacemacs--eww-ts-full-hint-toggle t + "Toggle the state of the eww transient state documentation.") + +(defvar spacemacs--eww-ts-full-hint nil + "Display full pdf transient state documentation.") + +(defvar spacemacs--eww-ts-minified-hint nil + "Display minified pdf transient state documentation.") diff --git a/layers/+web/eww/funcs.el b/layers/+web/eww/funcs.el index c52f7aeae..f80b2168b 100644 --- a/layers/+web/eww/funcs.el +++ b/layers/+web/eww/funcs.el @@ -1,6 +1,6 @@ ;;; funcs.el --- EWW Layer funcs File for Spacemacs ;; -;; Copyright (c) 2012-2021 Sylvain Benner & Contributors +;; Copyright (c) 2012-2022 Sylvain Benner & Contributors ;; ;; Author: Colton Kopsa ;; URL: https://github.com/syl20bnr/spacemacs @@ -20,46 +20,45 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . -(defvar spacemacs--eww-buffers nil) +;;; Commentary: -(defun spacemacs/eww-render-latex () +;;; Code: + +;;;; Misc +(defun spacemacs/eww-toggle-render-latex () + "Toggle rendering of LaTeX fraagments." (interactive) (call-interactively #'texfrag-mode) (when texfrag-mode (eww-reload))) + +;;;; Transient State + +(defun spacemacs//eww-ts-toggle-hint () + "Toggle full hint docstring for EWW transient state." + (interactive) + (setq spacemacs--eww-ts-full-hint-toggle + (not spacemacs--eww-ts-full-hint-toggle))) + +(defun spacemacs//eww-ts-hint () + "Return a condensed/full hint for the eww transient state" + (concat + " " + (if spacemacs--eww-ts-full-hint-toggle + spacemacs--eww-ts-full-hint + (concat "[" (propertize "?" 'face 'hydra-face-red) "] help")))) + (defun spacemacs//eww-setup-transient-state () - "Setup eww transient state with toggleable help hint. + "Setup EWW transient state with toggleable help hint. Beware: due to transient state's implementation details this function must be called in the :init section of `use-package' or full hint text will not show up!" - (defvar spacemacs--eww-ts-full-hint-toggle t - "Toggle the state of the eww transient state documentation.") - - (defvar spacemacs--eww-ts-full-hint nil - "Display full pdf transient state documentation.") - - (defvar spacemacs--eww-ts-minified-hint nil - "Display minified pdf transient state documentation.") - - (defun spacemacs//eww-ts-toggle-hint () - "Toggle the full hint docstring for the eww transient state." - (interactive) - (setq spacemacs--eww-ts-full-hint-toggle - (not spacemacs--eww-ts-full-hint-toggle))) - - (defun spacemacs//eww-ts-hint () - "Return a condensed/full hint for the eww transient state" - (concat - " " - (if spacemacs--eww-ts-full-hint-toggle - spacemacs--eww-ts-full-hint - (concat "[" (propertize "?" 'face 'hydra-face-red) "] help")))) - (spacemacs|transient-state-format-hint eww spacemacs--eww-ts-full-hint - (format "\n[_?_] toggle help + " +[_?_] toggle help Navigation^^^^^^^^ Layout/Appearance^^ Zoom^^ List/view^^ Other^^ ----------^^^^^^^^--------------- ---------^^------------------ -----------^^------ -------^^----------- -----^^----------------------- [_h_/_j_/_k_/_l_] scroll l/d/u/r [_v_] toggle visual-line-mode [_+_] zoom-in [_W_] list buffers [_r_] reload page @@ -67,7 +66,7 @@ full hint text will not show up!" [_<_/_>_] history back/forw^^^^ [_c_] toggle colors [_=_] unzoom [_B_] list bookmarks [_d_] download [_[_/_]_] page previous/next^^^^ [_t_] toggle latex ^^ [_V_] view source [_B_] add bookmark [_u_] page up^^^^^^ [_C_] cycle theme ^^ ^^ [_q_] quit - [_t_] top url^^^^^^")) + [_t_] top url^^^^^^") (spacemacs|define-transient-state eww :title "Eww Transient State" :hint-is-doc t @@ -78,10 +77,10 @@ full hint text will not show up!" :bindings ("?" spacemacs//eww-ts-toggle-hint) ;; Navigation - ("j" evil-next-line) - ("k" evil-previous-line) - ("h" evil-backward-char) - ("l" evil-forward-char) + ;; ("j" evil-next-line) + ;; ("k" evil-previous-line) + ;; ("h" evil-backward-char) + ;; ("l" evil-forward-char) ("<" eww-back-url) (">" eww-forward-url) ("[" eww-previous-url) @@ -91,16 +90,16 @@ full hint text will not show up!" ("u" eww-up-url) ("t" eww-top-url) ;; Layout/Appearance - ("w" writeroom-mode) + ;; ("w" writeroom-mode) ("v" visual-line-mode) ("c" eww-toggle-colors) - ("t" spacemacs/eww-render-latex) + ("t" spacemacs/eww-toggle-render-latex) ("C" spacemacs/cycle-spacemacs-theme) ;; Zoom - ("+" zoom-frm-in) - ("-" zoom-frm-out) - ("=" zoom-frm-unzoom) - ;; Lit/view + ;; ("+" zoom-frm-in) + ;; ("-" zoom-frm-out) + ;; ("=" zoom-frm-unzoom) + ;; ;; Lit/view ("W" eww-list-buffers) ("S" eww-list-histories) ("B" eww-list-bookmarks) @@ -112,39 +111,52 @@ full hint text will not show up!" ("B" eww-add-bookmark) ("q" nil :exit t))) -(defun spacemacs//eww-get-buffers () - (dolist (buffer (buffer-list)) - (with-current-buffer buffer - (when (and (derived-mode-p 'eww-mode) - (not (memq buffer spacemacs--eww-buffers))) - (push buffer - spacemacs--eww-buffers)))) - (unless spacemacs--eww-buffers - (error "No eww buffers")) - ;; remove deleted buffers maintaining order - (dolist (buffer spacemacs--eww-buffers) - (if (not (memq buffer (buffer-list))) - (delq buffer spacemacs--eww-buffers))) - spacemacs--eww-buffers) + +;;;; EWW Buffers -(defun spacemacs//eww-next-buffer (buff) +(defun spacemacs//eww-get-buffers () + "Update and return the list of EWW buffers." + (let ((current-buffers (buffer-list)) + (current-eww-buffers)) + ;; add new eww buffers to a temporary list + (dolist (buffer current-buffers) + (with-current-buffer buffer + (when (and (derived-mode-p 'eww-mode) + (not (memq buffer spacemacs--eww-buffers))) + (push buffer current-eww-buffers)))) + (unless (or current-eww-buffers spacemacs--eww-buffers) + (user-error "No EWW buffers")) + ;; remove deleted buffers + (dolist (buffer spacemacs--eww-buffers) + (when (not (memq buffer current-buffers)) + (delq buffer spacemacs--eww-buffers))) + ;; append new buffers + (nconc spacemacs--eww-buffers current-eww-buffers))) + +(defun spacemacs//eww-next-buffer () + "Return the next EWW buffer or cycle to the oldest one." (let* ((eww-buffers (spacemacs//eww-get-buffers)) - (eww-buffer-pos (seq-position eww-buffers buff))) - (if (eq eww-buffer-pos (1- (length eww-buffers))) + (eww-buffer-pos (seq-position eww-buffers (current-buffer)))) + (if (eql eww-buffer-pos (1- (length eww-buffers))) (car eww-buffers) (nth (1+ eww-buffer-pos) eww-buffers)))) -(defun spacemacs//eww-previous-buffer (buff) +(defun spacemacs//eww-previous-buffer () + "Return the previous EWW buffer or cycle to the latest one." (let* ((eww-buffers (spacemacs//eww-get-buffers)) - (eww-buffer-pos (seq-position eww-buffers buff))) + (eww-buffer-pos (seq-position eww-buffers (current-buffer)))) (if (zerop eww-buffer-pos) (car (last eww-buffers)) (nth (1- eww-buffer-pos) eww-buffers)))) (defun spacemacs/eww-jump-next-buffer () + "Open the next EWW buffer or cycle to the oldest one." (interactive) - (pop-to-buffer-same-window (spacemacs//eww-next-buffer (current-buffer)))) + (pop-to-buffer-same-window (spacemacs//eww-next-buffer))) (defun spacemacs/eww-jump-previous-buffer () + "Open the previous EWW buffer or cycle to the latest one." (interactive) - (pop-to-buffer-same-window (spacemacs//eww-previous-buffer (current-buffer)))) + (pop-to-buffer-same-window (spacemacs//eww-previous-buffer))) + +;;; funcs.el ends here diff --git a/layers/+web/eww/packages.el b/layers/+web/eww/packages.el index ae4045cb6..80dd000a1 100644 --- a/layers/+web/eww/packages.el +++ b/layers/+web/eww/packages.el @@ -1,6 +1,6 @@ ;;; packages.el --- EWW Layer packages File for Spacemacs ;; -;; Copyright (c) 2012-2021 Sylvain Benner & Contributors +;; Copyright (c) 2012-2022 Sylvain Benner & Contributors ;; ;; Author: Colton Kopsa ;; URL: https://github.com/syl20bnr/spacemacs @@ -22,20 +22,29 @@ (defconst eww-packages '( + evil (eww :location built-in) - texfrag)) -;; (ace-link :location elpa) -;; (helm-net :location elpa) + texfrag + writeroom-mode + zoom-frm)) + +(defun eww/post-init-evil () + (spacemacs/transient-state-register-add-bindings 'eww + '(("j" evil-next-line) + ("k" evil-previous-line) + ("h" evil-backward-char) + ("l" evil-forward-char)))) (defun eww/init-eww () (use-package eww :defer t :init - (add-to-list 'evil-buffer-regexps '("\\*eww\\*" . normal)) - (spacemacs//eww-setup-transient-state) - (spacemacs/declare-prefix "awe" "eww") - (spacemacs/set-leader-keys "awee" 'eww) - (spacemacs/set-leader-keys "awew" 'eww-switch-to-buffer) + (progn + (add-to-list 'evil-buffer-regexps '("\\*eww\\*" . normal)) + (spacemacs//eww-setup-transient-state) + (spacemacs/declare-prefix "awe" "eww") + (spacemacs/set-leader-keys "awee" 'eww) + (spacemacs/set-leader-keys "awew" 'eww-switch-to-buffer)) :config (progn (define-key eww-link-keymap "f" 'eww-follow-link) @@ -46,7 +55,7 @@ (spacemacs/set-leader-keys-for-major-mode mode "s" 'helm-google-suggest "S" 'browse-web - "t" 'spacemacs/eww-render-latex + "t" 'spacemacs/eww-toggle-render-latex "r" 'eww-reload "p" 'eww-previous-url "n" 'eww-next-url @@ -70,7 +79,6 @@ "H" 'spacemacs/eww-jump-previous-buffer (kbd "C-j") 'shr-next-link (kbd "C-k") 'shr-previous-link - "o" 'ace-link-eww "+" 'zoom-frm-in "-" 'zoom-frm-out "=" 'zoom-frm-unzoom)) @@ -108,3 +116,13 @@ (defun eww/init-texfrag () (use-package texfrag :defer t)) + +(defun eww/post-init-writeroom-mode () + (spacemacs/transient-state-register-add-bindings 'eww + '(("w" writeroom-mode)))) + +(defun eww/post-init-zoom-frm () + (spacemacs/transient-state-register-add-bindings 'eww + '(("+" zoom-frm-in) + ("-" zoom-frm-out) + ("=" zoom-frm-unzoom))))