Tips and solutions

This page covers various topics, and may evolve to a Frequently-Asked-Questions page.

Notes about “Front-end support” discuss how different front-ends may support some features differently.

Keyboard shortcuts


Copy the selected text to the clipboard. (Control-C also works in line-editing mode.)


Paste text from the clipboard. (Control-V also works in line-editing mode.)


Save the display to a file.


Cycle between the input modes: automatic, to line, to character, and back. The resulting mode is displayed temporarily.


Scroll to top.


Scroll to bottom.


Scroll one “page” up or down. (Specifically, the viewport height minus a height of one line.)


Scroll one line up or down.

The following are implemented by most browsers, rather than DomTerm, so it may not work on all browsers.


Zoom in (makes text bigger).


Zoom out (makes text smaller).

Copy and Paste

In character mode the “standard” keyboard shortcuts for copy and paste (ctrl-C and ctrl-V) are sent to the backend program. So instead DomTerm uses ctrl-shift-C to copy the selection to the clipboard, and ctrl-shift-V to paste the contents of the clipboard.

Some front-end also have menu entries for copy and paste.

Front-end support: Middle-button paste (i.e. cliicking the middle button pastes the contents of the selection, rather than the clipboard) works on qtdomterm, and chrome-based browsers. It does not work on the Firefox/XUL application or in a Firefox browser window.

Save the console contents as HTML

Use the keyboard shortcut ctrl-shift-S to save the contents of the DomTerm console as an HTML file. Both qtdomterm and the Firefox/XUL front-end also offer menu entries for this.

The saved file should be viewed with various css stylesheet files in the hlib subdirectory. You can create a symlink to the hlib subdirectory in the DomTerm distribution. The saved file also optionally makes use of some JavaScript, in the same directory. The JavaScript isn’t essential, but it enables features like hide/show buttons and dynamic line-(re-)breaking.

Images will preserve their URLs. Relative URLs may need to be fixed, but absolute ones should be fine. “Embedded” images using a data: URL (including those loaded with the dt-util image command) will be saved embedded, and Just Work.

The resulting file is actually an XHTML file, so you can use XML tools to extract parts from or transform the output.

Front-end support: The qtdomterm and the Firefox/XUL applications bring up a file chooser, and let you save the file in any writable directory. Other front-end bring up a prompt pop-up and only allow saving to the Downloads area. The JavaFX front-end currently does not support saving.

Note that if DomTerm is running in a browser window, the browser’s Save page as ... command is not useful. It will save the original bare web page, before any DomTerm interactions or other JavaScript modification.

Changing appearance with CSS stylesheets

You can use the dt-util application in a DomTerm window to change its appearance.

On qtdomterm you can use the --stylesheet option or the Edit / Preferences / Appearance menu entry.

Session names and session-specific styles

Each “session” (terminal window) has a name, which by default has the form "domterm-N" where N is an integer. The session name is usually shown in the window title bar, in the format "window-title [session-name]".

You can change the session name by “printing” a certain escape sequence. For example (using bash):

echo -en "\e]30;session-name\007"

The qtdomterm application will give each session a fresh name of the form domterm-N. The Java WebSockets server will do the same.

The session name is used to set the name attribute of the top domterm element, so you can use it to select different rules for different sessions. For example the following selects different background colors.

div.domterm { background-color: #FFE }
div.domterm[name="domterm-1"] { background-color: #FEE }
div.domterm[name="domterm-2"] { background-color: #EEF }

Browser quirks and limitions

(These can all change as browsers change or work-arounds are implemented.)

Middle-button paste: Works with Chrome and qtdomterm (on Linux); does not work on Firefox (or Firefox-XUL).

Exiting the inferior process can sometimes fail to automatically close the DomTerm window, due to browser security limitations. It currently works on Google Chrome, but not Firefox.

Saving the console display to a file in a browser may save to the browser’s “Downloads” area. You may be able to save the file elsewhere, depending on the browser and its settings.

Using line-editing mode with the brower’s builtin editor may exhibit various quirks.

Adding qtdomterm to the desktop

On Gnome or KDE

Copy qtdomterm/qtdomterm.desktop to either usr/share/applications (if qtdomterm is installed in /usr/bin and you want it accessible to everyone), or in ~/.local/share/applications (if you only wish to make accessible to a single user).

Environment variables set

The DomTerm back-ends set various enviromnent variable when they start up a process.

TERM is set to "xterm-256color". COLORTERM is set to "truecolor".

The DOMTERM variable is set to a semicolon-separate list of information about DomTerm and how it was invoked. The specific list is subject to change.

An example when running on qtdomterm:


The XUL front-end (FireFox in app mode) may yield:


Checking the DOMTERM variable is the normal way to check if we’re running in a DomTerm terminal. It is not foolproof, since you could (for example) spawn off an xterm, which would not reset the DOMTERM variable. To make it more robust, you can compare the output of the tty command or the ttyname function with the value specified after tty=. However, tty= might not be specified unless runnng under a pty.

WINDOWID is not set - in fact qtdomterm unsets it. There seem to be some problems setting it with Qt. This variable is not set by Wayland.

Setting the Bash shell prompt

You can place the following in your ~/.bashrc to take advantage of DomTerm features:

if [ "$PS1" != "" ]
  # Optionally override the system default - for all terminals
  PS1='$ ' # or whatever

  # Check if the DOMTERM variable includes the string "tty=ttyname"
  # where ttyname is the output from the tty command
  case ";$DOMTERM;" in
    *";tty=`tty`;"*) ;;
    *";tty="*) unset DOMTERM;;

  if [ -n "$DOMTERM" ]
    # Add some DomTerm-specific escape sequences

This causes the prompt to have the prompt style (specifically to be in a <span std="prompt"> element), while the remainder of the current line gets the input style (specifically, in a <span std="input"> element). The appearance of these styles can be customized with CSS stylesheets.

Furthermore, this prompt enables text folding: a hide/show button (click on the character), which hides/shows the output from the command.

See the Wire byte protocol section for the details.

(The "\[" and "\]" are bash syntax, and are equivalent to readline’s "\001" and "\002". They are used to indicate escape sequences that don’t move the cursor, which is needed for readline to calculate the column position.)