xwwpで遊ぶ
本当はもっと実用的な例を作りたかった。
環境: GNU Emacs 28.0.50
xwwpパッケージ
xwwpはEmacsのxwidget-webkit機能を拡張するEmacs Lispパッケージ1。M-x xwwpといった便利なコマンドや、Webページにcssやjsを注入する関数(ライブラリ)を提供してたりする。
同プロジェクト内で管理されているxwwp-follow-linkパッケージは、xwwpのライブラリとしての機能を使って実装されている。
今回はそんなxwwpを使って遊んでみた(回してみた)。
利用するGNU Emacs
「MacでもEmacsでWebKitブラウザする! - つーさにブログ」で書いたように、現在のEmacs 28.0.50ではNS版でxwidget-webkit機能が利用可能なのでそれを使う。
ただ、GTK版でも問題なく動作すると思われる。
遊ぶ
xwwpが提供するxwwp-html-inject-style関数を使うことで閲覧するWebページに任意のcssを注入することができる。
ということで、 閲覧中のWebページにcssを注入して遊ぶ。
内容を消す(隠す)
body要素を{ display: none; }にするcssを注入することで、見ている内容を消し去る。
(defun my/xwwp-clear-page (&optional xwidget) "ページまっさら" (interactive) (let ((xwidget (or xwidget (xwidget-webkit-current-session)))) (xwwp-html-inject-style xwidget "__my_xwwp_clear_page_style" "body { display: none; }\\n")))

特に元に戻す関数は用意してないので、終わりたい場合はC-u qしてバッファをキルしてください。
内容を回す
body要素をanimationを使って回す。
(defun my/xwwp-rotate-page (&optional xwidget) "ぐるぐるページ" (interactive) (let ((xwidget (or xwidget (xwidget-webkit-current-session)))) (xwwp-html-inject-style xwidget "__my_xwwp_rotate_page_style" "\ body { animation: spinner 1s steps(12, end) infinite; } @keyframes spinner { to { transform: rotate(360deg); } } ")))

特に元に戻す関数は用意してないので(ry
おしまい
xwwpはJavaScriptを注入するxwwp-html-inject-script関数やJavaScript関連の便利なマクロ・関数 (xwwp-js-defやxwwp-js-inject) も提供している。何か面白そうなアイディアがあったらxwwp-follow-linkのソースを参考にして実装されたい。
今回使ったソースコードはGistにも置いた。
-
xwidget-webkit plusの略だと思われる。↩