I always wanted a fast and responsive pop-up window to display multimedia content in Emacs, this includes web translation tooltip, LaTeX preview for math equations, code completion, color picker, etc. The creation and success of the Emacs Application Framework gave a solid foundation for this to happen.
I consider popweb to be a sister project, and a lightweight version of EAF that particularly focuses on multimedia popup functionality, some portion of code is shared between the two projects.
- Install PyQt6:
pip install PyQt6 PyQt6-Qt6 PyQt6-sip PyQt6-WebEngine PyQt6-WebEngine-Qt6(macOS need installpyobjcadditionally) - Install python-epc:
pip install epc sexpdata - Install browser_cookie3(optional, for import cookies from browser):
pip install browser_cookie3 - Clone or download this repository (path of the folder is the
<path-to-popweb>used below). - In your
~/.emacs, add the following lines:
(add-to-list 'load-path "<path-to-popweb>") ; add popweb to your load-path
;; Org-Roam ID link and footnote link previewer
(add-to-list 'load-path "<path-to-popweb>/extension/org-roam")
(require 'popweb-org-roam-link)
;; LaTeX preview functionality
(add-to-list 'load-path "<path-to-popweb>/extension/latex")
(require 'popweb-latex)
(add-hook 'latex-mode-hook #'popweb-latex-mode)
;; Chinese-English translation popup
(add-to-list 'load-path "<path-to-popweb>/extension/dict") ;
(require 'popweb-dict)
;; Anki note review popup
(add-to-list 'load-path "<path-to-popweb>/extension/anki-review")
(require 'popweb-anki-review)popweb-latex-mode: LaTeX math equations preview inorg-modeandlatex-mode.M-x popweb-dict-bing-pointer: Translation at point with BingM-x popweb-dict-bing-input: Translation given an input with BingM-x popweb-dict-youdao-pointer: Translation at point with YoudaoM-x popweb-dict-youdao-input: Translation given an input with YoudaoM-x popweb-dict-youglish-pointer: Translation at point with youglish.comM-x popweb-dict-youglish-input: Translation given an input with youglish.comM-x popweb-dict-dictcn-pointer: Translation at point with dict.cnM-x popweb-dict-dictcn-input: Translation given an input with dict.cnM-x popweb-org-roam-link-show: Preview Org-Roam ID link or footnote link at point.M-x popweb-org-roam-link-preview-selectSelect one of all Org-Roam ID links and footnote links in a Org-mode buffer by ivy, then preview the content of link.M-x popweb-org-roam-node-preview-selectSelect one Org-Roam node by ivy, then hitC-M-m ivy-callto preview the content of node without exit ivy windown.M-x popweb-import-browser-cookiesImport cookies for the specified domain name.M-x popweb-anki-review-showMarked a region then execute this command, or just call this command then input the query. Even useC-u popweb-anki-review-showto grab sentence automatically for you. After the window popup use mouse select thewordto review in Anki notes.
"point-bottom": bottom of the cursor, default"point-bottom-right": bottom-right of the cursor"top-left": top-left of the screen"top-right": top-right of the screen"bottom-left": bottom-left: of the screen"bottom-right": bottom-right of the screen
If you need to use a proxy to access the internet, one can configure the proxy settings.
(setq popweb-proxy-type "http")
(setq popweb-proxy-host "127.0.0.1")
(setq popweb-proxy-port "1080")If you use Socks5 as a local proxy, one can set proxy type with:
(setq popweb-proxy-type "socks5")If you think the font of popup web page is too small, you can change value of popweb-zoom-factor.
(setq popweb-zoom-factor 1.5)(setq popweb-org-roam-link-popup-window-width-scale 0.8)
(setq popweb-org-roam-link-popup-window-height-scale 0.5)
Popup window scales to Emacs's.
You can choose either scaled to emacs or in pixes by customizing
(setq popweb-url-web-window-size-use-absolute t)
(setq popweb-url-web-window-width-scale 0.8)
(setq popweb-url-web-window-height-scale 0.45)
Popup window scales to Emacs's.
(setq popweb-url-web-window-width-absolute 480)
(setq popweb-url-web-window-height-absolute 270)
Popup window's size in pixels
If you when to play Anki note sound file, configure the Anki media direction.
(setq popweb-anki-review-media-directory <path-to-Anki-media-directory>)
then install python playsound package.
python3 -m pip install playsound
Customize callback method, for example:
(setq popweb-anki-review-callback "popweb-dict-eudic-dicts-input")
You can set option popweb-enable-developer-tools with t, then you can debug popweb page like normal browser does.
Please use emacs -q and load a minimal setup with only popweb to verify that the bug is reproducible. If emacs -q works fine, probably something is wrong with your Emacs config.
If the problem persists, please report it here with *popweb* buffer content, it contains many clues that can help us locate the problem faster.
If you get a segfault error, please use the following way to collect crash information:
- Install gdb and turn on option
popweb-enable-debug - Use the command
popweb-stop-processto stop the current process - Restart popweb, send issue with
*popweb*buffer content when next crash






