rxvt-unicode

From ArchWiki

rxvt-unicode is a customizable terminal emulator forked from rxvt, with support for Perl extensions.

Installation

Install one of the following:

Configuration

See urxvt(1) and urxvt(7) for available settings and values.

X resources

Rxvt-unicode is controlled by command-line arguments or X resources. Command-line arguments override, and take precedence over resource settings.

urxvt --help prints all available rxvt resources to standard error. The man page has full explanations of each resource.

Scrollback position

By default, when shell output appears, the scrollback view will automatically jump to the bottom of the buffer to display new output. If you want to see previous output (e.g., compiler messages) while TTY is still receiving new lines, use the following options:

~/.Xresources
URxvt.scrollTtyOutput:   false
URxvt.scrollWithBuffer:  true
URxvt.scrollTtyKeypress: true

Scrollback buffer in secondary screen

When you scroll a pager in a secondary screen (e.g. less without the -X option), it may be a good idea to disable the scrollback buffer to be able to scroll in the pager itself, instead of the terminal's buffer: this is default and unchangeable behaviour in konsole and vte-based terminals.

In urxvt, to disable the scrollback buffer for the secondary screen:

URxvt.secondaryScroll: 0

The above configuration works as expected except when scrolling with a mouse wheel. When you scroll a pager in the secondary screen with the mouse wheel - and there has been something in the scrollback buffer, instead of the pager itself - the scrollback buffer will be scrolled by the mouse wheel. To solve this issue, it is necessary to introduce a new option into rxvt-unicode [1]. A patched rxvt-unicode is available in AUR as rxvt-unicode-better-wheel-scrolling-unicode3AUR. After installing it, add the following to the configuration file:

URxvt.secondaryWheel: 1
Note: Avoid using this option with the urxvt-vtwheelAUR perl extension, as it will conflict.

Font declaration methods

X FreeType (Xft) font

URxvt.font:           xft:Input Mono:size=13:style=Regular
URxvt.boldFont:       xft:Input Mono:size=13:style=Medium
URxvt.italicFont:     xft:Input Mono:size=13:style=Italic
URxvt.boldItalicFont: xft:Input Mono:size=13:style=Medium Italic
Note: If there is a hyphen (-) in an Xft font name, it must be escaped with backslash (\) twice. It is different from the usage of urxvt -fn option and the result that fc-list returns, where backslash present only once.

A nice method for testing out fonts in a live terminal before committing to the configuration is by printing escape codes in the terminal, for example:

$ printf '\e]710;%s\007' "xft:Terminus:pixelsize=12"

X Logical Font Description (XLFD) font

This article or section is a candidate for moving to rxvt-unicode/Tips and tricks.

Notes: I'm not sure if it's better to completelely remove this section, or to move it to Tips and tricks. Do you use bitmap fonts? Do you think, that info on XLFD font setup is as nessesary as before? (Discuss in Talk:Rxvt-unicode)
Tip: X Logical Font Description does not support anti‑aliasing and sub‑pixel rasterization. Consider use Xft instead.
URxvt.font: 9x15

is the same as:

URxvt.font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1

And, for the same font in bold:

URxvt.font: 9x15bold

is the same as:

URxvt.font: -misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1

The complete list of short names for X core fonts can be found in /usr/share/fonts/misc/fonts.alias (there are also some fonts.alias files in some of the other sub-directories of /usr/share/fonts/, but as they are packaged separately from the actual fonts, they may list fonts you do not actually have installed). It is worth noting that these short aliases select for ISO-8859-1 versions of the fonts rather than ISO-10646-1 (Unicode) versions, and 75 DPI rather than 100 DPI versions, so you are probably better off avoiding them and choosing fonts by their full long names instead.

Font spacing

By default the distance between characters can feel too wide. The spacing can be reduced by one pixel as such:

URxvt.letterSpace: -1

Colors

By default, rxvt-unicode is compiled with color support. In addition to the default foreground and background colors, rxvt can display up to 256 colors (plus high-intensity bold/blinking/underlined and any mix of these).

It is also possible to specify the color values of foreground, background, cursorColor, cursorColor2, colorBD, colorUL as a number 0-15, as a convenient shorthand to reference the color name of color0-color15. See #Xresources for details.

Note: By default urxvt uses the same colors as Xterm, except one. Add URxvt.color12: rgb:5c/5c/ff to Xresources to change this.

Printing

By default, rxvt-unicode will print out a screen dump, via lpr, when PrintScreen is pressed. Using Ctrl+PrintScreen or Shift+PrintScreen will include the terminal's scroll back in the printout as well. This behavior can be changed, or disabled entirely:

URxvt.print-pipe: "cat > /dev/null"

Reload the configuration

After changing the configuration use xrdb ~/.Xresources to reload the config. The new configuration is applied for all new terminals.

Cut and paste

Rxvt-unicode uses cut buffers which are loaded into the current PRIMARY selection by default. See Selecting and pasting text for details.

It is possible to access the CLIPBOARD selection with the bindings ALT-CTRL-c and ALT-CTRL-v for copy and paste respectively.

Note: Selected text is automatically copied to PRIMARY selection. The selection-to-clipboard perl extension, available since rxvt-unicode 9.20, copies to CLIPBOARD selection as well.

If you wish to copy into PRIMARY selection and also ensure that your CLIPBOARD selection is updated with the same contents, you may add the following:

URxvt.perl-ext-common:  ...,selection-to-clipboard,...

and

URxvt.clipboard.autocopy: true
URxvt.keysym.M-c: perl:clipboard:copy
URxvt.keysym.M-v: perl:clipboard:paste


See also Clipboard#Managers.

Perl extensions

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Bias towards url-select while matcher and url-select are mostly equivalent, as well as man page duplication (Discuss in Talk:Rxvt-unicode)

We can enable URxvt perl extensions by including the following line:

 URxvt.perl-ext-common: extension_name_1,extension_name_2,...

Please take note that there should not be any spacing between extension names.

See urxvtperl(3) for embedded Perl interpreter manual.

Clickable URLs

You can make URLs in the terminal clickable using the matcher extension. For example, to open links in the default web browser with the left mouse button, add the following to .Xresources:

URxvt.perl-ext-common: default,matcher
URxvt.url-launcher: /usr/bin/xdg-open
URxvt.matcher.button: 1

Since rxvt-unicode 9.14, it is also possible to use matcher to open and list recent (currently limited to 10) URLs via keyboard:

URxvt.keysym.C-Delete: perl:matcher:last
URxvt.keysym.M-Delete: perl:matcher:list

Matching links can be colored with a chosen foreground or background color, for example blue:

URxvt.matcher.rend.0: Uline Bold fg5

Alternatively, use colorUL for a #RRGGBB color. This will however color all underlined text, instead of only link matches:

URxvt.colorUL: #4682B4

Yankable URLs (no mouse)

In addition, you can select and open URLs in your web browser without using the mouse. Install the urxvt-perls package and adjust your .Xresources as necessary. An example is shown below:

URxvt.perl-ext: default,url-select
URxvt.keysym.M-u: perl:url-select:select_next
URxvt.url-select.launcher: /usr/bin/xdg-open
URxvt.url-select.underline: true
Note: This extension replaces the Clickable URLs extension mentioned above, so matcher can be removed from the URxvt.perl-ext list.

Key commands:

Key Description
Alt+u Enter selection mode. The last URL on your screen will be selected. You can repeat Alt+u to select the next upward URL.
k Select next upward URL
j Select next downward URL
Return Open selected URL in browser and quit selection mode
o Open selected URL in browser without quitting selection mode
y Copy (yank) selected URL and quit selection mode
Esc Cancel URL selection mode

Simple tabs

To add tabs to urxvt, add the following to your ~/.Xresources:

URxvt.perl-ext-common: ...,tabbed,...

To control tabs use:

Key Description
Shift+Down New tab
Shift+Left Go to left tab
Shift+Right Go to right tab
Ctrl+Left Move tab to the left
Ctrl+Right Move tab to the right
Ctrl+d Close tab

You can change the colors of tabs with the following:

URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 3
URxvt.tabbed.tab-bg: 0

In order to make the tabbar transparent set its value to -1

URxvt.tabbed.tabbar-bg: -1

If you need to rename the tab, you would probably want to install urxvt-tabbedexAUR instead.

Fullscreen

You can install the AUR package urxvt-fullscreenAUR, and then set a key binding to put urxvt fullscreen.

URxvt.perl-ext-common:  ...,fullscreen,...
URxvt.keysym.F11:       perl:fullscreen:switch

Changing font size on the fly

Install urxvt-resize-font-gitAUR from the AUR, add it to your Perl extensions within ~/.Xresources

 URxvt.perl-ext-common:  ...,resize-font,...

The default keybindings are

  • Ctrl++ (or Ctrl+Shift+=) to increase size
  • Ctrl+- to decrease size
  • Ctrl+= to reset size
  • Ctrl+? to see current size

You can also change key bindings, for example like this:

 URxvt.keysym.C-Down:  resize-font:smaller
 URxvt.keysym.C-Up:    resize-font:bigger

For the Ctrl+Shift bindings to work, a default binding needs to be disabled (see discussion here):

 URxvt.iso14755: false
 URxvt.iso14755_52: false

Confirm paste

The confirm-paste extension is enabled by default and it displays a confirmation dialog when a paste containing control characters is detected.

It can be disabled in the following way:

URxvt.perl-ext-common:-confirm-paste

Disabling Perl extensions

If you do not use the Perl extension features, you can improve the security and speed by disabling Perl extensions completely:

URxvt.perl-ext-common:

To selectively disable an extension, you need to prepend a hyphen before the extension name:

Urxvt.perl-ext-common: default,-extension

Troubleshooting

Remote hosts

If you are logging into a remote host, you may encounter problems when running text-mode programs under rxvt-unicode. This can be fixed by installing rxvt-unicode-terminfo on the remote host or by copying /usr/share/terminfo/r/rxvt-unicode from your local machine to your host at ~/.terminfo/r/rxvt-unicode; same for rxvt-unicode-256color.

Some remote systems do not change title automatically unless you specify TERM=xterm. To fix the issue add this line to .bashrc on the remote machine:

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"'

Another fix you can try is to put following in your .Xresources:

URxvt*termName: rxvt

This is useful when connecting into remote hosts without admin privileges to install terminfo definition for rxvt-unicode.

Using rxvt-unicode as gmrun terminal

Unlike some other terminals, urxvt expects the arguments to -e to be given separately, rather than grouped together with quotes. This causes trouble with gmrun, which assumes the opposite behavior. This can be worked around by putting an "eval" in front of gmrun's "Terminal" variable in .gmrunrc:

Terminal = eval urxvt
TermExec = ${Terminal} -e

(gmrun uses /bin/sh to execute commands, so the "eval" is understood here.) The "eval" has the side-effect of "breaking up" the argument to -e in the same way that $@ does in Bash, making the command intelligible to urxvt.

My numerical keypad acts weird and generates differing output? (e.g. in vim)

This article or section is being considered for removal.

Reason: I would like to remove this section: (a) It's more than 10 years old, the code has changed a lot. (b) Maybe it's Debian GNU/Linux-related only (see the first sentence). Do you have this issue with current version in Arch? (c) xmodmap is deprecated and often cause troubles, especially if it is used in conjunction with setxkbmap, if the issue is still relevant - it's better to advise to learn xkb. (Discuss in Talk:Rxvt-unicode)

Some Debian GNU/Linux users seem to have this problem, although no specific details were reported so far. It is possible that this is caused by the wrong TERM setting, although the details of whether and how this can happen are unknown, as TERM=rxvt should offer a compatible keymap.

However, using the xmodmap program (xorg-xmodmap), you can re-map your number pad keys back.

1. Check the keycode that your numerical keypad (numpad) generates using xev program.

  • Start the xev program
  • Press your number pad keys and look for ... keycode xxx ... in xev's output. For example, numpad 1 in some keyboards is also "End" key, that have a 'keycode 87'.

2. Create or modify your xmodmap file, usually ~/.Xmodmap, with the content representing your keycode.

Example of xmodmap file with number pad keycode:

keycode 63 = KP_Multiply
keycode 79 = Home KP_7
keycode 80 = Up KP_8
keycode 81 = Prior KP_9
keycode 82 = KP_Subtract
keycode 83 = Left KP_4
keycode 84 = KP_5
keycode 85 = Right KP_6
keycode 86 = KP_Add
keycode 87 = End KP_1
keycode 88 = Down KP_2
keycode 89 = Next KP_3
keycode 90 = Insert KP_0
keycode 91 = Delete KP_Decimal
keycode 112 = Prior
keycode 117 = Next

3. Load your xmodmap file at X session start-up.

For example, in ~/.xinitrc file add:

...
xmodmap ~/.Xmodmap
...

Key combinations do not work

See Get Alt key to work in terminal.

Slow performance when drawing glyphs

This article or section is being considered for removal.

Reason: 10 years old advice. Do you still experience this issue? (Discuss in Talk:Rxvt-unicode)

Some programs like alsamixer and xprop do not perform well with some graphics drivers and in consequence redraw very slowly. This option may fix it:

URxvt.skipBuiltinGlyphs:    true

Very long lines cause slowdown

The matcher plugin may be the culprit here. It must match a regex against a line every time the line updates, and if you have a large saveLines value this can exacerbate the problem by allowing a very large maximum line length.

There are some simple workarounds:

  • Reduce saveLines
  • Disable the matcher plugin

If neither of those are palatable options, you can compromise by disabling URL matching past a certain cutoff point:

  1. Copy /usr/lib/urxvt/perl/matcher to ~/.urxvt/ext/ (creating the directory if necessary)
  2. Edit ~/.urxvt/ext/matcher, and find the my ($self, $row) = @_; line in the on_line_update sub. It should be line 270.
  3. After that line, insert the line return () if $row < -100;. This disables URL matching on any line that starts more than 100 rows behind the top of the terminal.

Wrong shell prompt placement after upgrade to 9.31

Some window managers may have the problem that your prompt appears somewhere in the middle of the window. It may happens on start and/or on window resize. The root cause is update in lines-rewrap algorithm.

You can play with geometry, but result is environment- and workflow-dependent, there is no "one size fits all" solution.

  • Set realistic geometry: URxvt.geometry: 174x47
  • Set unrealistic geometry: URxvt.geometry: 400x400
  • Set rows to -1: URxvt.geometry: 80x-1. This may lead to inability to use some command line options, for example urxvt --borderColor black -e mc sometimes opens terminal for a fraction of second with shell prompt placed in the middle of the first row instead of running mc.

Ultimate solution is reverting changes in the source code.

Neovim devicons rendering as empty squares even when using a Nerd Font

Try specifying the Mono variant of the used Nerd Font in ~/.Xresources:

URxvt.font: xft:Fira Code Nerd Font Mono

See also