Here are some changes introduced by recent versions of edbrowse.
3.8.19
creates a link window.xyz to the div element,
iff that element is linked into the tree, and the id is not a reserved word,
and that name isn't being used as a variable for some other purpose.
Use this feature for getElementById, it satisfies it 99.5% of the time.
Add a test that uses edbrowse tracing, along with comments to describe the process.
Reverse the css shorthand, so that setting margin sets its four
constituents, and getting margin puts those four pieces back into one string.
Move the node invisible test into C, which makes rendering faster.
Move the node css injection test into C, which makes rendering faster.
Also, we can get rid of a truckload of confusing code in css,
that tried to anticipate these injections, it's much easier to determine
them at render time.
Make NamedNodeMap a proper class with the correct methods,
and use it in the attribute system.
make NodeList a proper class and wrap it around childNodes.
Make DOMTokenList a proper class and use it in the classList system.
Move most of the DOM classes from shared.js into startwindow.js,
so that users can muck with those classes and their prototypes if they
feel they must. Modernize the classses along the way.
Create many self-contained tests in the tests directory, and a runscript
to run them.
Implement assigned css properties in an array like structure.
Implement getPropertyValue, setProperty, removeProperty.
shadowroot, and styles wholly contained within a shadowRoot.
custom element connectedCallback and disconnectedCallback functions.
3.8.18
The if (input field) command to bring a textarea inline.
Plugin renders a page through headless chrome,
then hands the html back to edbrowse.
Bu and Bd, go up to the top or down to the bottom of a block
that is defined by indentation. This is for python programming.
build proper classes instead of just functions that stand in as classes.
These classes extend other classes, as directed by the DOM.
class HTMLElement extends Element extends Node etc.
Implement HTMLCollection, and let the getElements functions use these
collections to present live data to the user.
Restructure selectors and options to be more dynamic, as js changes options underneat us.
3.8.17
Fix some makefile issues, and warnings across different compilers.
Support custom Elements and the CustomElementRegistry.
Make html parsing more efficient, so it isn't quadratic in a file
containing thousands of hyperlinks, which is not unusual.
Customize the text decorationmarkup symbols in your config file.
tdmarks = **+@__~~
Support aria heading attributes:
role=heading aria-level=1 presents like h1
replace the earlier deminimizer, which has become out of date, with
https://github.com/beautifier/js-beautify
Basic support for javascript modules.
3.8.16
Use strict js in shared.js and startwindow.js
Append .html or .txt after running a rendering plugin.
Put standard plugins in the plugins directory, for the user.
Optimize the performance of the http cache.
the a:text c:text and i:text commands.
Expand variables in the prompt string.
Support placing the edbrowse config file at $XDG_CONFIG_HOME/edbrowse/ebrc.
We still fall back to $HOME/.ebrc if it's not there and use $HOME/.ebrc to
create the initial file.
include = relative-path now taken relative to the invoking config file,
like cpp and m4 and everything else in unix.
include = directory, include all files in that directory.
Download css files in parallel. Like the javascript files.
Subject to the jsbg flag.
More secure handling of temp files; there's no need to manually add the sticky
bit to a custom directory any more.
Mutation observers call their functions as microtasks.
Run html scripts (not deferred or async) when you see them, not after browse.
Implement some of the css shorthand properties, such as margin.
Transliterate , and other tags, into concise punctuation
that indicates the meaning of the tag.
Implement open and close.
3.8.15
The lsr (imap) and lsc (irc) commands.
Migrate from quickjs to quickjs-ng.
The latter is preferred by most distributions, but we support both.
Use flags at build time to switch between the two. See README.
Rerender quickly after browse then throttle back to the rr_interval.
3.8.14
ls commands in envelope mode, or when reading an email.
Fix bug in imap download of large emails.
Support for the icloud imap server,
which implements a stricter adherence to the standard syntax.
Indicate an incoming private irc message with *, so you can respond in kind.
3.8.13
in imap standalone, n does not run off the end of the folder,
just as p does not back up off the end of the folder.
Support for gophers://
Support for .netrc through curl.
IRC actions. /me
Mail forwarding.
mass global delete move copy in imap.
Send one command with the list of uids to the imap server instead of many.
Fix core dump due to a change in quickjs implementation of Promise jobs,
that took place on 06/28/2025.
This version of edbrowse now requires quickjs at or beyond this date.
Suppress many gcc warnings.
3.8.12
Make adjustments as quickjs evolves. Resolve build issues.
3.8.11
uc lc mc are internationalized, up to unicode 0xff.
Put explanatory files in the history directory.
i? shows the url of the submit button.
Fix extremely rare race condition in caching.
$EB_SESSION, and set these whenever $(:X) is expanded.
Fix gopher search
commands: sss, test, p stuff.
3.8.10
toString shows the correct object classes.
Simplistic simulation of IntersectionObserver and ResizeObserver.
document is an instance of Document, as it should be.
e !command
Intl: just English and just date and numbers.
Use third party software for Headers, Request, Response, fetch.
EBCIPHERS passed to the ssl engine.
edbrowse variables and/or variables in the environment.
Print strerror values when certain system calls fail.
l and L link commands in directory mode.
3.8.9
dx to specify hard delete in imap folders.
Integrate imap into edbrowse. Emails and envelopes are held in the buffers.
g.suffix, much like b.suffix, indicate a plugin as you go.
Improved JOIN, PART, and QUIT messages in irc.
Complete the Polish and Russian messages.
irc autolog.
3.8.8
Read and write blocks of text amongst the buffers on the current stack.
.w+1@'c r-1@'a,'b
Allow mail client noninteractive, i.e. from a batch job.
bflist/ and bflist?
hist/ and hist?
up/ and down/
bw/ bw? and bw#
dld= command to preset the download filename, for scripting purposes
imask= to restrict imap folders presented.
isub= to lop off a substring from imap folders.
P to toggle and set prompt, like ed.
emoji combos in the config file
b.pdf renders the current buffer by the pdf converter.
%p in a plugin is an interactive parameter.
3.8.7
W !shell_command reads the data back into the buffer
local command reads pages from cache.
Recover from an imap disconect and reconnect.
<7 to run the commands in session 7. at syntax is supported.
The [erwq<][/?] commands.
The read write and < commands support the at syntax.
Resurrect the apostrophe macros, but in a safe way.
3.8.6
Support tls sockets, and the lst command for irc.
html template element.
Go up and down in the history of the current edbrowse session.
Move / copy files to other directories in the history.
Automatically parse xml files received through xhr. Slight differences from html.
Messages in Spanish.
clean up download threads before we free the tags that own them.
move delete and expunge in a manner that should work with all imap servers.
3.8.5
s/x/y/$ command, and s$ shorthand.
s/x/y/3g, from 3 on, like sed.
J: command to inject other separators between joined lines.
flow command to use format=flowed in outgoing mail.
FormData, from a third party.
TextDecoder, from a third party.
Read files in chunks, saves memory while reading, and could support
large files, although those are rather impractical in a text editor.
That's why they invented sed, awk, perl, etc.
Edbrowse as an irc client.
a c or i commands in scripts.