May I recommend eww for Emacs's innovative UI?

birdculture1 pts0 comments

M-x apropos Emacs

HOME

M-x apropos Emacs

Table of Contents

May I recommend eww for Emacs’s innovative UI?

Exploring large amounts of data with completion

Vim is composable

Elevator pitch

Ten things to try with Embark

Writing Experience

The case against which-key: a polemic

Emacs keymaps can have helpful and even dynamic prompts

My quest for completion

Welcome to M-x apropos Emacs

RSS feed 🛜

May I recommend eww for Emacs’s innovative UI?

Published: [2026-05-16 Sat]. Comments on Mastodon.

I think it&rsquo;s safe to say many people regard the Emacs Web Wowser<br>(henceforth eww) as a toy, not really usable as web browser. They&rsquo;ll<br>say &ldquo;maybe for documentation&rdquo; (meaning: to read documentation for some<br>piece of software). Of course, there is plenty of truth to this view:<br>eww cannot run JavaScript, so a lot of the modern web app cannot<br>possibly work. But I think eww is underrated and, for this month&rsquo;s<br>Emacs Carnival, I&rsquo;m recommending people try it for two separate<br>reasons.

The first reason is a sad one: eww&rsquo;s limitations improve many<br>websites! I believe that eww&rsquo;s biggest weakness, it&rsquo;s lack of<br>JavaScript, can also be a strength. It&rsquo;s sad how many websites improve<br>if you don&rsquo;t run their JavaScript code, which is often just there to<br>load ads or a paywall, or to make the text you are reading disappear<br>and reappear a couple of seconds later in a different (sometimes less<br>readable!) font. Similarly, many websites are simply hard to read: the<br>lines of text are ridiculously long, or the colors are garish, or the<br>text has too little contrast with the background (I blame that last<br>one on young web designers with great eyesight that don&rsquo;t understand<br>that many middle-aged people struggle to read medium gray text in a<br>thin font on a light gray background). The JavaScript problem is fixed<br>right out of the box with eww simply because it cannot run JavaScript.<br>By default eww does leave you a bit at the whims of websites with<br>respect to colors, but a simple (setopt shr-use-colors nil) will fix<br>that. You can read any website (well, many websites) in eww using your<br>favorite Emacs theme, a sensible line length and the fonts you&rsquo;ve<br>chosen. (This part isn&rsquo;t unique to eww, of course, there are browser<br>extension you can use for the same purpose in normal web browsers).

The second reason is perhaps surprising: Emacs has many UI innovations<br>when compared to standard browsers! Interestingly the innovations I<br>have in mind are not made specifically for eww, but are broader Emacs<br>UI features. Here are a few I like that I don&rsquo;t think normal browsers<br>can match (please let me know if I&rsquo;m wrong about that):

You can resize an individual image without resizing text or other<br>images! Use image-increase-size, bound by default to i + when the<br>point is on an image (and only then). I often find images are<br>slightly too small or way too big.

You can read text in multiple columns with follow-mode. I like<br>making Emacs full screen and using 3 columns. (Again, this is<br>something you can probably find a browser extension for, but it&rsquo;s<br>built-in to Emacs.)

You have two types of search: isearch and occur. The browsers I&rsquo;ve<br>used, only have an isearch-style interface: it searches<br>incrementally while you type and you can navigate to the next of<br>previous match. But sometimes I want to create a list of all the<br>matches of some text in a web page and have that list stick around<br>to treat it as a sort of todo list, in Emacs you do that with<br>occur. You can ask for some number of lines of context around each<br>match by calling occur with a prefix argument. You can navigatev<br>among the matches by pressing RET or clicking on them in the occur<br>buffer, or by using next-error (M-g n) and previous-error (M-g<br>p)—which work even without having the occur buffer visible. I<br>find occur invaluable if I&rsquo;m doing an in-depth information search<br>online.

You can evaluate code right from a webpage if you are reading it in<br>Emacs! If I&rsquo;m reading a blog about Emacs, I&rsquo;ll often run the Emacs<br>Lisp code it mentions with eval-last-sexp (C-x C-e), which is super<br>convenient. But this isn&rsquo;t limited to Emacs Lisp, of course! If I&rsquo;m<br>reading a blog post with some Python code, I&rsquo;ll open a Python REPL<br>with run-python and then send Python code to it for evaluation<br>directly from the eww buffer.

For this I use a small command I wrote to send text to the first<br>visible comint buffer it finds (I&rsquo;ve replaced several &ldquo;inferior&rdquo;<br>major modes with just comint-run and this one command, which I bind<br>to C-:):

(defun send-to-comint ()<br>"Send active region or current line to a process in some window."<br>(interactive)<br>(if-let* ((process (cl-loop for w in (window-list)<br>thereis (get-buffer-process (window-buffer w))))<br>(input (buffer-substring-no-properties<br>(if (use-region-p) (region-beginning) (pos-bol))<br>(if (use-region-p) (region-end)...

rsquo emacs text buffer occur read

Related Articles