Rxvt-unicode: Difference between revisions
m Use the more common {{Lowercase title}} |
m fix broken section link and some style |
||
(144 intermediate revisions by 9 users not shown) | |||
Line 2: | Line 2: | ||
[[Category:Terminal emulators]] | [[Category:Terminal emulators]] | ||
[[de:urxvt]] | [[de:urxvt]] | ||
[[ja:Rxvt-unicode]] | [[ja:Rxvt-unicode]] | ||
[[ru:Rxvt-unicode]] | [[ru:Rxvt-unicode]] | ||
Line 9: | Line 8: | ||
{{Related|rxvt-unicode/Tips and tricks}} | {{Related|rxvt-unicode/Tips and tricks}} | ||
{{Related articles end}} | {{Related articles end}} | ||
[http://software.schmorp.de/pkg/rxvt-unicode.html rxvt-unicode] is a customizable terminal emulator forked from [[Wikipedia:Rxvt|rxvt]] | [http://software.schmorp.de/pkg/rxvt-unicode.html rxvt-unicode] '''(urxvt)''' is a customizable terminal emulator forked from [[Wikipedia:Rxvt|rxvt]], with support for [[Perl]] extensions. | ||
== Installation == | == Installation == | ||
[[Install]] the {{Pkg|rxvt-unicode}} | [[Install]] one of the following: | ||
* {{Pkg|rxvt-unicode}}, | |||
* {{AUR|rxvt-unicode-truecolor-wide-glyphs}} — improved font rendering, enhanced glyph support, applied [[Color output in console#True color support|True color]] support, | |||
or search [[AUR]] for opinionated [https://aur.archlinux.org/packages?SeB=n&K=rxvt-unicode builds] with different patches and configuration options applied. | |||
{| class="wikitable" | |||
|+ Patches | |||
|- | |||
! File name !! Description | |||
|- | |||
| {{ic|7-bit-queries.patch}} | |||
|| | |||
:multiple-char sequence for 7-bit queries — is needed for correct work of color ''OSC'' commands; merged upstream | |||
|- | |||
| {{ic|24-bit-color.patch}} | |||
|| | |||
:True Color support | |||
|- | |||
| {{ic|256color.patch}} | |||
|| | |||
:256 ''~/.Xresources'' colors | |||
|- | |||
| {{ic|background-opacity.patch}} | |||
|| | |||
:fixed opacity (''pixbuf-''related) | |||
|- | |||
| {{ic|clear.patch}} | |||
|| | |||
:''Control-L'' keeps all lines from the screen in the scrollback buffer (''VTE-''like behavior) | |||
|- | |||
| {{ic|enable-wide-glyphs.patch}} | |||
|| | |||
:enhancing glyph support, required by {{ic|improve-font-rendering.patch}} | |||
|- | |||
| {{ic|font-width-fix.patch}} | |||
|| | |||
:decreasing space between symbols, incompatible with (replaced by) {{ic|improve-font-rendering.patch}} | |||
|- | |||
| {{ic|improve-font-rendering.patch}} | |||
|| | |||
:font rendering improvements | |||
|- | |||
| {{ic|line-spacing-fix.patch}} | |||
|| | |||
:vertical spacing improvement, incompatible with (replaced by) {{ic|improve-font-rendering.patch}} | |||
|- | |||
| {{ic|lines-rewrap.patch}} | |||
|| | |||
:solves the [[#Wrong shell prompt placement after upgrading to 9.31]] problem | |||
|- | |||
| {{ic|matcher-vi-bindings.patch}} | |||
|| | |||
:add ''vi-''style ''(hjkl)'' keys to ''matcher'' extension to mimic deprecated ''ulr-select'' behavior | |||
|- | |||
| {{ic|noinc.diff}} | |||
|| | |||
:no increment resizing — is needed for better [[Openbox]] user experience | |||
|- | |||
| {{ic|perl-5.38.patch}} | |||
|| | |||
:locale fix required by Perl 5.38; merged upstream | |||
|- | |||
| {{ic|popup-menu-hang.diff}} | |||
|| | |||
:fixing ''popup'' Perl extension hanging | |||
|- | |||
| {{ic|rxvt-unicode-sixel.patch}} | |||
|| | |||
:DEC [[Wikipedia:Sixel|Sixel]] support | |||
::expressing character bitmap image via DEC ''Device Control String (DCS)'' Sixel {{ic|P…q}} escape sequence | |||
::like "{{ic|ESC}} {{ic|Pq}} {{ic|...}} {{ic|ESC\}}" | |||
|- | |||
| {{ic|rxvt-unicode-truecolor.patch}} | |||
|| | |||
:the same as {{ic|24-bit-color.patch}} | |||
|- | |||
| {{ic|secondaryWheel.patch}} | |||
|| | |||
:scrolling in the secondary screen with the mouse wheel | |||
|- | |||
| {{ic|starttop.patch}} | |||
|| | |||
:commenting out line ''397'' of {{ic|screen.C}} — one of the approaches to the [[#Wrong shell prompt placement after upgrading to 9.31]] problem | |||
|} | |||
{| class="wikitable" | |||
|+ 3rd party Perl Extensions | |||
|- | |||
! File name, | |||
link | |||
! Package | |||
! Description | |||
|- | |||
|[https://github.com/xyb3rt/urxvt-perls/ keyboard-select] | |||
| {{Pkg|urxvt-perls}} | |||
|| | |||
:use keyboard shortcuts to select and copy text | |||
|- | |||
| [https://github.com/simmel/urxvt-resize-font/ resize-font] | |||
| {{AUR|urxvt-resize-font-git}} | |||
|| | |||
:use keyboard shortcuts to adjust the font size; fractional intervals (like {{ic|0.5}}) also supported | |||
|} | |||
== Configuration == | == Configuration == | ||
=== X resources === | |||
''Rxvt-unicode'' is controlled by command-line arguments or [[X resources]]. Command-line arguments override, and take precedence over resource settings. | |||
The first component of a resource is either the ''class'' ({{ic|URxvt}}) or an ''application (instance) name''. | |||
Application name can be specified with {{man|1|urxvt|name}} command-line option and is set to {{ic|urxvt}} — a binary {{man|1|basename}} — by default. For a given instance, resources defined with an application name override, and take precedence over defined with the class name ones. | |||
{{ | {{Note|''Rxvt-unicode'' resource naming scheme [https://unix.stackexchange.com/questions/388582/xresources-xdefaults-period-or-asterisk/388610#388610 does not] heavily utilize nested components as ''xterm'' [https://unix.stackexchange.com/questions/216723/xterm-or-xterm-in-configuration-file/216865#216865 does]. Valid sample of ''loose binding'' (asterisk, {{ic|*}}) usage is provided in the {{man|7|urxvt|Terminal Configuration}} section. }} | ||
See {{man|1|urxvt}} and {{man|7|urxvt}} for available settings, resources and values. Also {{ic|urxvt --help}} prints all available resources to the ''standard error.'' Each resource can be used as a long command-line option. | |||
Use {{man|1|xrdb}} ({{pkg|xorg-xrdb}}) to apply the configuration like so: {{ic|xrdb ~/.Xresources}}. Depending on your environment you may have to use {{ic|-merge}} option. The new configuration is applied to only new instances, not the existing ones. | |||
=== Fonts === | |||
''Rxvt-unicode'' [[Font configuration#Applications without Fontconfig support|does not utilize]] [https://www.freedesktop.org/wiki/Software/fontconfig/ fontconfig library] for font substitution when a font or individual character is not present. I.e. you '''must''' provide all font names in the corresponding ''resources'' (set the ''fontsets'') for all glyphs you are interested in. | |||
Ability to use non-monospaced fonts (like {{ic|Nerd Font}} vs. {{ic|Nerd Font '''Mono'''}}) hardly depends on your environment (see [[#Spacing]]) and the font itself. | |||
If a glyph cannot be displayed or cannot be found it is substituted with an empty square. | |||
''Rxvt-unicode'' supports both [[Wikipedia:Xft|X FreeType]] (Xft) and [[X Logical Font Description]] (XLFD), {{man|1|urclock}} supports XLFD [http://cvs.schmorp.de/rxvt-unicode/src/rclock.C?revision=1.13&view=markup#l596 only]. | |||
==== Permanent ==== | |||
{{hc|~/.Xresources| | |||
URxvt.font: xft:Input Mono:size{{=}}13:style{{=}}Regular,\ | |||
xft:Font Awesome 6 Free:style{{=}}Solid | |||
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 ({{ic|-}}) in an Xft font name, it must be escaped with backslash ({{ic|\}}) twice. It is different from the usage of {{ic|urxvt -fn}} option and the result that ''fc-list'' returns, where backslash present only once.}} | |||
==== Non-permanent ==== | |||
You can change the fonts of the current instance with [[Xterm]] ''Operating System Commands'' (OSC). Use ''numeric (Ps)'' parameters ''710–713'' followed by corresponding ''text (Pt)'' parameter, like so (also see {{man|1|urxvt|CHANGING FONTS}}): | |||
$ printf '\x1b\x5d710;%s\x1b\x5c' "xft:Terminus:pixelsize=22" | |||
$ printf '\e]711;%s\a' "xft:Terminus:pixelsize=22:bold" | |||
To change font size of the current instance with keyboard shortcuts use {{ic|resize-font}} Perl extension. | |||
==== Spacing ==== | |||
You may need to tweak the horizontal distance between characters with {{ic|letterSpace}} and/or the vertical distance between rows with {{man|1|urxvt|lineSpace:}}. These needs depend on: | |||
* using rendering improvement patches, like ''enable-wide-glyphs.patch, improve-font-rendering.patch, font-width-fix.patch'' or ''line-spacing-fix.patch,'' | |||
* using languages with glyphs that are too different from English letters, like Arabian, Chinese, Hebrew, Japanese or Korean, | |||
* your font and its size. | |||
=== Scrollback buffer === | |||
is the | {{Tip|The mouse wheel scrolls ''five lines'' by default, and ''one line'' while ''Shift'' is pressed. If you want to change these numbers — you have to edit the [http://cvs.schmorp.de/rxvt-unicode/src/command.C?revision{{=}}1.604&view{{=}}markup#l2205 source code].}} | ||
==== Behavior on receiving new output ==== | |||
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 [[Linux console#Implementation|''pseudo-TTY'']] is still receiving new lines, and jump to the bottom of the scrollback buffer on key press, use the following options: | |||
URxvt.scrollTtyOutput: False | |||
URxvt.scrollWithBuffer: True | |||
URxvt.scrollTtyKeypress: True | |||
==== Secondary screen ==== | |||
When you scroll a pager in a ''secondary screen'' (e.g. using {{man|1|less}} without the {{ic|-X/--no-init}} option), it may be a good idea to disable secondary screen scroll to be able to scroll in the pager ''itself,'' instead of the terminal's buffer. | |||
This is default and unchangeable behavior in [[Konsole]] and [[List of applications/Utilities#VTE-based|''VTE-based'']] terminal emulators. To achieve the same behavior in ''urxvt'', use the following: | |||
URxvt.secondaryScroll: False | |||
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 — the ''scrollback buffer'' will be scrolled by the mouse wheel, instead of the pager ''itself.'' | |||
To solve this issue, it is necessary to introduce [https://bbs.archlinux.org/viewtopic.php?id=132150 a new option] into ''urxvt.'' Use packages like {{AUR|rxvt-unicode-better-wheel-scrolling-unicode3}} or {{AUR|rxvt-unicode-fontspacing-noinc-vteclear-secondarywheel}} , or apply {{ic|secondaryWheel.patch}}. After installing, set the following: | |||
URxvt.secondaryWheel: True | |||
URxvt. | |||
{{Note|Avoid using this option with the {{AUR|urxvt-vtwheel}} perl extension, as it will conflict.}} | |||
=== | ==== Clearance ==== | ||
''Reset to Initial State (RIS)'' {{ic|ESC 06/03}} [https://ecma-international.org/wp-content/uploads/ECMA-48_5th_edition_june_1991.pdf ''control function''] empties the screen ''and'' the scrollback buffer. You can bind it to your desired keys like so: | |||
URxvt.keysym.''Meta-Control-l'': command:\033c | |||
==== Keeping the screen content on screen clearance ==== | |||
In ''urxvt'' pressing ''Control-L'' empties the screen, and the screen content is thrown away — you cannot see it in the scrollback buffer later. This behavior might seems controversial for users with ''Konsole'' or ''VTE-based'' terminal emulators experience, where ''Control-L'' keeps the screen content in the scrollback buffer. | |||
To achieve such VTE-like behavior in ''urxvt'' you can use appropriate package like {{AUR|rxvt-unicode-better-wheel-scrolling-unicode3}} or {{AUR|rxvt-unicode-fontspacing-noinc-vteclear-secondarywheel}}, or apply {{ic|clear.patch}} in your preferred build. | |||
{{ | ==== Scrollbar ==== | ||
Scrollbar look and feel is controlled by a dozen of resources. Look at the manual around {{man|1|urxvt|scrollstyle:}} and {{man|1|urxvt|scrollColor:}} resources, and see {{man|1|urxvt|THE SCROLLBAR}} section. | |||
You can also change visibility of scrollbar on the fly for the current instance with ''DEC Private Modes'' {{man|7|urxvt|Escape Sequences}} ({{ic|Pm {{=}} 30}}). For example, you can bind scrollbar visibility toggling to a keyboard shortcut: | |||
URxvt.keysym.Meta-Control-s: command:\033[?30t | |||
==== Saving to a file ==== | |||
''Ctrl-Print'' or ''Shift-Print'' saves the ''scrollback buffer'' content to a file with a setting like so: | |||
URxvt.print-pipe: cat > ~/Downloads/URxvt_$(date '+%Y-%m-%d_%H:%M:%S').txt | |||
* ''Print'' is usually the ''Print Screen'' key. | |||
* ''Print'' alone saves the screen without the scrollback buffer. | |||
=== Clipboard === | |||
''Rxvt-unicode'' [[clipboard]] behavior might seem controversy for people without ''xterm'' background. See {{man|1|urxvt|THE SELECTION: SELECTING AND PASTING TEXT}} for details. | |||
You can use {{man|1|urxvt-eval}} with key bindings to setup copying to and pasting from ''CLIPBOARD'': | |||
URxvt.keysym. | URxvt.keysym.Control-Insert: eval:selection_to_clipboard | ||
URxvt.keysym. | URxvt.keysym.Shift-Insert: eval:paste_clipboard | ||
{{man|1|urxvt-selection-to-clipboard}} can be used to synchronize ''CLIPBOARD'' with ''PRIMARY selection''. | |||
The {{man|1|urxvt-confirm-paste}} extension displays a confirmation dialog when a paste containing control characters (like newlines) is detected. It is part of the {{ic|default}} set and is loaded automatically, see {{man|1|urxvt|perl-ext-common}} and [[#Disabling Perl extensions]] for more info. | |||
== Perl extensions == | == Perl extensions == | ||
We can enable Perl extensions by including the following line: | |||
URxvt.perl-ext-common: ''extension_name_1'',''extension_name_2'',... | |||
{{Note|There '''should not''' be any spacing between extension names.}} | |||
See also: | |||
* {{man|1|urxvt|perl-ext-common}} — the resource description | |||
* {{man|1|urxvt-extensions}} — list of available (prepackaged) extensions, do not confuse with {{ic|default}} extension set | |||
* {{ic|$ man 1 urxvt-''extension_name''}} — manual pages for specific prepackaged extensions | |||
* {{man|3|urxvtperl}} — embedded Perl interpreter manual | |||
=== Clickable URLs === | === Clickable URLs === | ||
Line 151: | Line 264: | ||
URxvt.matcher.button: 1 | 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: | Since ''rxvt-unicode'' 9.14, it is also possible to use matcher to open and list recent (currently limited to 10) URLs via keyboard: | ||
{{Out of date|{{ic|perl:STRING '''*DEPRECATED*'''}}, see {{man|1|urxvt|perl:STRING}}.}} | |||
URxvt.keysym.C-Delete: perl:matcher:last | URxvt.keysym.C-Delete: perl:matcher:last | ||
URxvt.keysym.M-Delete: perl:matcher:list | URxvt.keysym.M-Delete: perl:matcher:list | ||
Matching links can be colored with a chosen foreground or background | Matching links can be colored with a chosen foreground or background color (see {{man|1|urxvt|COLOURS AND GRAPHICS}}), for example blue: | ||
URxvt.matcher.rend.0: Uline Bold | URxvt.matcher.rend.0: Uline Bold fg4 | ||
Alternatively, use {{ic|colorUL}} for a #RRGGBB color. This will however color all underlined text, instead of only link matches: | Alternatively, use {{ic|colorUL}} for a #RRGGBB color. This will however color all underlined text, instead of only link matches: | ||
Line 164: | Line 279: | ||
URxvt.colorUL: #4682B4 | URxvt.colorUL: #4682B4 | ||
=== | === Simple tabs === | ||
To add tabs to ''urxvt'', add the following to your {{ic|~/.Xresources}}: | |||
URxvt.perl-ext-common: ...,tabbed,... | URxvt.perl-ext-common: ...,tabbed,... | ||
Line 204: | Line 290: | ||
! Key !! Description | ! Key !! Description | ||
|- | |- | ||
| Shift+Down || New tab | | {{ic|Shift+Down}} || New tab | ||
|- | |- | ||
| Shift+Left || Go to left tab | | {{ic|Shift+Left}} || Go to left tab | ||
|- | |- | ||
| Shift+Right || Go to right tab | | {{ic|Shift+Right}} || Go to right tab | ||
|- | |- | ||
| Ctrl+Left || Move tab to the left | | {{ic|Ctrl+Left}} || Move tab to the left | ||
|- | |- | ||
| Ctrl+Right || Move tab to the right | | {{ic|Ctrl+Right}} || Move tab to the right | ||
|- | |- | ||
| Ctrl+d || Close tab | | {{ic|Ctrl+d}} || Close tab | ||
|} | |} | ||
Line 223: | Line 309: | ||
URxvt.tabbed.tab-fg: 3 | URxvt.tabbed.tab-fg: 3 | ||
URxvt.tabbed.tab-bg: 0 | 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 {{AUR|urxvt-tabbedex}} instead. | If you need to rename the tab, you would probably want to install {{AUR|urxvt-tabbedex}} instead. | ||
Line 228: | Line 318: | ||
=== Fullscreen === | === Fullscreen === | ||
You can install the [[AUR]] package {{AUR|urxvt-fullscreen}}, and then set a key binding to put urxvt fullscreen. | You can install the [[AUR]] package {{AUR|urxvt-fullscreen}}, and then set a key binding to put ''urxvt'' fullscreen. | ||
{{ | {{Out of date|{{ic|perl:STRING '''*DEPRECATED*'''}}, see {{man|1|urxvt|perl:STRING}}.}} | ||
}} | |||
URxvt.perl-ext-common: ...,fullscreen,... | |||
URxvt.keysym.F11: perl:fullscreen:switch | |||
=== Disabling Perl extensions === | === Disabling Perl extensions === | ||
If you do not use the Perl extension features, you can improve the security and speed by disabling Perl extensions completely | 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: | URxvt.perl-ext-common: | ||
To selectively disable an extension, you need to prepend a hyphen before the extension name | To selectively disable an extension, you need to prepend a hyphen before the extension name: | ||
Urxvt.perl-ext-common:-extension | Urxvt.perl-ext-common: default,-''extension'' | ||
Alternatively, you can explicitly list every extension you need, effectively disabling all others: | |||
URxvt.perl-ext-common: eval,searchable-scrollback,resize-font | |||
== Troubleshooting == | == Troubleshooting == | ||
=== | === Wrong shell prompt placement after upgrading to 9.31 === | ||
The | 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. | ||
To solve the problem you should apply [https://aur.archlinux.org/cgit/aur.git/tree/lines-rewrap.patch?h=rxvt-unicode-truecolor-wide-glyphs lines-rewrap.patch]. | |||
You can also play with ''geometry'', but result is environment– and workflow–dependent, there is no "one size fits all" solution: | |||
* Set the real geometry: {{ic|URxvt.geometry: 174x47}}. | |||
* Set unrealistic geometry: {{ic|URxvt.geometry: 400x400}}. | |||
* Set rows to '''''-1''''': {{ic|URxvt.geometry: 80x-1}}. | |||
::This may lead to inability to use some command line options, for example {{ic|urxvt --borderColor black -e mc}} sometimes opens the terminal for a fraction of second with shell prompt placed ''in the middle of the first row'' instead of running [[Midnight Commander]]. | |||
Ultimate solution is reverting changes in the source code: | |||
* Comment out [https://aur.archlinux.org/packages/rxvt-unicode-truecolor-wide-glyphs?O=10#comment-932862 one line] in {{ic|screen.C}} (also see {{ic|starttop.patch}}). | |||
* Fully revert algorithm changes: {{Bug|77062#comment216001}}. | |||
=== Remote hosts === | === 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 {{Pkg|rxvt-unicode-terminfo}} on the remote host or by copying {{ic|/usr/share/terminfo/r/rxvt-unicode}} from your local machine to your host at {{ic|~/.terminfo/r/rxvt-unicode}}; same for rxvt-unicode-256color. | 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 {{Pkg|rxvt-unicode-terminfo}} on the remote host or by copying {{ic|/usr/share/terminfo/r/rxvt-unicode}} from your local machine to your host at {{ic|~/.terminfo/r/rxvt-unicode}}; same for {{ic|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: | Some remote systems do not change title automatically unless you specify {{ic|TERM{{=}}xterm}}. To fix the issue add this line to {{ic|.bashrc}} on the remote machine: | ||
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"' | PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"' | ||
Another fix you can try is to put following in your .Xresources: | Another fix you can try is to put following in your {{ic|.Xresources}}: | ||
URxvt | URxvt.termName: rxvt | ||
This is useful when connecting into remote hosts without admin privileges to install terminfo definition for rxvt-unicode. | This is useful when connecting into remote hosts without admin privileges to install ''terminfo'' definition for ''rxvt-unicode''. | ||
=== Using rxvt-unicode as gmrun terminal === | === Using rxvt-unicode as gmrun terminal === | ||
Unlike some other terminals, urxvt expects the arguments to {{Ic|-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 | Unlike some other terminals, ''urxvt'' expects the arguments to {{Ic|-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 {{ic|eval}} in front of ''gmrun'''s {{ic|Terminal}} variable in {{ic|.gmrunrc}}: | ||
Terminal = eval urxvt | Terminal = eval urxvt | ||
TermExec = ${Terminal} -e | TermExec = ${Terminal} -e | ||
''gmrun'' uses {{ic|/bin/sh}} to execute commands, so the {{ic|eval}} is understood here. The {{ic|eval}} has the side-effect of "breaking up" the argument to {{ic|-e}} in the same way that {{ic|$@}} does in [[Bash]], making the command intelligible to ''urxvt''. | |||
=== My numerical keypad acts weird and generates differing output? (e.g. in vim) === | === My numerical keypad acts weird and generates differing output? (e.g. in vim) === | ||
{{Remove|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'''.}} | |||
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. | 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. | ||
Line 358: | Line 422: | ||
See [https://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal?useskin=monobook Get Alt key to work in terminal]. | See [https://vim.wikia.com/wiki/Get_Alt_key_to_work_in_terminal?useskin=monobook Get Alt key to work in terminal]. | ||
=== Very long lines cause slowdown === | === Very long lines cause slowdown === | ||
Line 379: | Line 437: | ||
# Edit {{ic|~/.urxvt/ext/matcher}}, and find the {{ic|<nowiki>my ($self, $row) = @_;</nowiki>}} line in the {{ic|on_line_update}} sub. It should be line 270. | # Edit {{ic|~/.urxvt/ext/matcher}}, and find the {{ic|<nowiki>my ($self, $row) = @_;</nowiki>}} line in the {{ic|on_line_update}} sub. It should be line 270. | ||
# After that line, insert the line {{ic|return () if $row < -100;}}. This disables URL matching on any line that starts more than 100 rows behind the top of the terminal. | # After that line, insert the line {{ic|return () if $row < -100;}}. This disables URL matching on any line that starts more than 100 rows behind the top of the terminal. | ||
=== No bold text in Midnight Commander === | |||
If started under ''rxvt-unicode'' with the default {{ic|TERM}} setting, text that is usually bold in many other terminals will not appear so. The root of the issue is because ''xterm'' couples bright text color with the bold attribute (thus, bright colors will always appear as bold in ''xterm''). | |||
''rxvt-unicode'' does not have this limitation, which [[Wikipedia:S-Lang|S-Lang]] (the library ''Midnight Commander'' uses for text display by default) honors. Because ''S-Lang'' can decouple the bold attribute from bright colors on ''rxvt-unicode'', ''Midnight Commander'' would need to explicitly specify the bold attribute as appropriate, [https://bugzilla.redhat.com/show_bug.cgi?id=474108#c3 which it does not]. | |||
The solution is to configure ''Midnight Commander'' to explicitly use bold colors as desired, e.g. by editing the default skin as follows: | |||
$ mkdir ~/.local/share/mc/skins | |||
$ cp /usr/share/mc/skins/default.ini ~/.local/share/mc/skins/ | |||
$ sed -i -E 's/^(.* = (gray|brightred|brightgreen|yellow|brightblue|brightmagenta|brightcyan|white);.*)$/\0;bold/' ~/.local/share/mc/skins/default.ini | |||
The above will create a copy of the ''default'' skin, but with all bright colors having an explicit bold attribute added. | |||
== See also == | == See also == | ||
* [https://www.youtube.com/playlist?list=PL5ze0DjYv5DYf93rdfDWBRKdwps_-oKnI Rxvt Unicode] — video tutorial by Alex Booker | |||
* [ | * [http://cvs.schmorp.de/rxvt-unicode/ Browsable CVS] — the source code | ||
* [http://cvs.schmorp.de/rxvt-unicode/ | * [https://github.com/mrdotx/dotfiles/blob/master/.config/X11/Xresources.d/rxvt-unicode rxvt-unicode] — {{ic|enable-wide-glyphs.patch}} [https://aur.archlinux.org/account/mrdotx developer]'s [[dotfile]] | ||
* [ | |||
Latest revision as of 13:44, 26 December 2024
rxvt-unicode (urxvt) is a customizable terminal emulator forked from rxvt, with support for Perl extensions.
Installation
Install one of the following:
- rxvt-unicode,
- rxvt-unicode-truecolor-wide-glyphsAUR — improved font rendering, enhanced glyph support, applied True color support,
or search AUR for opinionated builds with different patches and configuration options applied.
File name | Description |
---|---|
7-bit-queries.patch
|
|
24-bit-color.patch
|
|
256color.patch
|
|
background-opacity.patch
|
|
clear.patch
|
|
enable-wide-glyphs.patch
|
|
font-width-fix.patch
|
|
improve-font-rendering.patch
|
|
line-spacing-fix.patch
|
|
lines-rewrap.patch
|
|
matcher-vi-bindings.patch
|
|
noinc.diff
|
|
perl-5.38.patch
|
|
popup-menu-hang.diff
|
|
rxvt-unicode-sixel.patch
|
|
rxvt-unicode-truecolor.patch
|
|
secondaryWheel.patch
|
|
starttop.patch
|
|
File name,
link |
Package | Description |
---|---|---|
keyboard-select | urxvt-perls |
|
resize-font | urxvt-resize-font-gitAUR |
|
Configuration
X resources
Rxvt-unicode is controlled by command-line arguments or X resources. Command-line arguments override, and take precedence over resource settings.
The first component of a resource is either the class (URxvt
) or an application (instance) name.
Application name can be specified with urxvt(1) § name command-line option and is set to urxvt
— a binary basename(1) — by default. For a given instance, resources defined with an application name override, and take precedence over defined with the class name ones.
*
) usage is provided in the urxvt(7) § Terminal Configuration section. See urxvt(1) and urxvt(7) for available settings, resources and values. Also urxvt --help
prints all available resources to the standard error. Each resource can be used as a long command-line option.
Use xrdb(1) (xorg-xrdb) to apply the configuration like so: xrdb ~/.Xresources
. Depending on your environment you may have to use -merge
option. The new configuration is applied to only new instances, not the existing ones.
Fonts
Rxvt-unicode does not utilize fontconfig library for font substitution when a font or individual character is not present. I.e. you must provide all font names in the corresponding resources (set the fontsets) for all glyphs you are interested in.
Ability to use non-monospaced fonts (like Nerd Font
vs. Nerd Font Mono
) hardly depends on your environment (see #Spacing) and the font itself.
If a glyph cannot be displayed or cannot be found it is substituted with an empty square.
Rxvt-unicode supports both X FreeType (Xft) and X Logical Font Description (XLFD), urclock(1) supports XLFD only.
Permanent
~/.Xresources
URxvt.font: xft:Input Mono:size=13:style=Regular,\ xft:Font Awesome 6 Free:style=Solid 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
-
) 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.Non-permanent
You can change the fonts of the current instance with Xterm Operating System Commands (OSC). Use numeric (Ps) parameters 710–713 followed by corresponding text (Pt) parameter, like so (also see urxvt(1) § CHANGING FONTS):
$ printf '\x1b\x5d710;%s\x1b\x5c' "xft:Terminus:pixelsize=22" $ printf '\e]711;%s\a' "xft:Terminus:pixelsize=22:bold"
To change font size of the current instance with keyboard shortcuts use resize-font
Perl extension.
Spacing
You may need to tweak the horizontal distance between characters with letterSpace
and/or the vertical distance between rows with urxvt(1) § lineSpace:. These needs depend on:
- using rendering improvement patches, like enable-wide-glyphs.patch, improve-font-rendering.patch, font-width-fix.patch or line-spacing-fix.patch,
- using languages with glyphs that are too different from English letters, like Arabian, Chinese, Hebrew, Japanese or Korean,
- your font and its size.
Scrollback buffer
Behavior on receiving new output
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 pseudo-TTY is still receiving new lines, and jump to the bottom of the scrollback buffer on key press, use the following options:
URxvt.scrollTtyOutput: False URxvt.scrollWithBuffer: True URxvt.scrollTtyKeypress: True
Secondary screen
When you scroll a pager in a secondary screen (e.g. using less(1) without the -X/--no-init
option), it may be a good idea to disable secondary screen scroll to be able to scroll in the pager itself, instead of the terminal's buffer.
This is default and unchangeable behavior in Konsole and VTE-based terminal emulators. To achieve the same behavior in urxvt, use the following:
URxvt.secondaryScroll: False
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 — the scrollback buffer will be scrolled by the mouse wheel, instead of the pager itself.
To solve this issue, it is necessary to introduce a new option into urxvt. Use packages like rxvt-unicode-better-wheel-scrolling-unicode3AUR or rxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR , or apply secondaryWheel.patch
. After installing, set the following:
URxvt.secondaryWheel: True
Clearance
Reset to Initial State (RIS) ESC 06/03
control function empties the screen and the scrollback buffer. You can bind it to your desired keys like so:
URxvt.keysym.Meta-Control-l: command:\033c
Keeping the screen content on screen clearance
In urxvt pressing Control-L empties the screen, and the screen content is thrown away — you cannot see it in the scrollback buffer later. This behavior might seems controversial for users with Konsole or VTE-based terminal emulators experience, where Control-L keeps the screen content in the scrollback buffer.
To achieve such VTE-like behavior in urxvt you can use appropriate package like rxvt-unicode-better-wheel-scrolling-unicode3AUR or rxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR, or apply clear.patch
in your preferred build.
Scrollbar
Scrollbar look and feel is controlled by a dozen of resources. Look at the manual around urxvt(1) § scrollstyle: and urxvt(1) § scrollColor: resources, and see urxvt(1) § THE SCROLLBAR section.
You can also change visibility of scrollbar on the fly for the current instance with DEC Private Modes urxvt(7) § Escape Sequences (Pm = 30
). For example, you can bind scrollbar visibility toggling to a keyboard shortcut:
URxvt.keysym.Meta-Control-s: command:\033[?30t
Saving to a file
Ctrl-Print or Shift-Print saves the scrollback buffer content to a file with a setting like so:
URxvt.print-pipe: cat > ~/Downloads/URxvt_$(date '+%Y-%m-%d_%H:%M:%S').txt
- Print is usually the Print Screen key.
- Print alone saves the screen without the scrollback buffer.
Clipboard
Rxvt-unicode clipboard behavior might seem controversy for people without xterm background. See urxvt(1) § THE SELECTION: SELECTING AND PASTING TEXT for details.
You can use urxvt-eval(1) with key bindings to setup copying to and pasting from CLIPBOARD:
URxvt.keysym.Control-Insert: eval:selection_to_clipboard URxvt.keysym.Shift-Insert: eval:paste_clipboard
urxvt-selection-to-clipboard(1) can be used to synchronize CLIPBOARD with PRIMARY selection.
The urxvt-confirm-paste(1) extension displays a confirmation dialog when a paste containing control characters (like newlines) is detected. It is part of the default
set and is loaded automatically, see urxvt(1) § perl-ext-common and #Disabling Perl extensions for more info.
Perl extensions
We can enable Perl extensions by including the following line:
URxvt.perl-ext-common: extension_name_1,extension_name_2,...
See also:
- urxvt(1) § perl-ext-common — the resource description
- urxvt-extensions(1) — list of available (prepackaged) extensions, do not confuse with
default
extension set $ man 1 urxvt-extension_name
— manual pages for specific prepackaged extensions- urxvtperl(3) — 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 (see urxvt(1) § COLOURS AND GRAPHICS), for example blue:
URxvt.matcher.rend.0: Uline Bold fg4
Alternatively, use colorUL
for a #RRGGBB color. This will however color all underlined text, instead of only link matches:
URxvt.colorUL: #4682B4
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
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
Alternatively, you can explicitly list every extension you need, effectively disabling all others:
URxvt.perl-ext-common: eval,searchable-scrollback,resize-font
Troubleshooting
Wrong shell prompt placement after upgrading 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.
To solve the problem you should apply lines-rewrap.patch.
You can also play with geometry, but result is environment– and workflow–dependent, there is no "one size fits all" solution:
- Set the real 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 the terminal for a fraction of second with shell prompt placed in the middle of the first row instead of running Midnight Commander.
- This may lead to inability to use some command line options, for example
Ultimate solution is reverting changes in the source code:
- Comment out one line in
screen.C
(also seestarttop.patch
). - Fully revert algorithm changes: FS#77062#comment216001.
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)
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.
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:
- Copy
/usr/lib/urxvt/perl/matcher
to~/.urxvt/ext/
(creating the directory if necessary) - Edit
~/.urxvt/ext/matcher
, and find themy ($self, $row) = @_;
line in theon_line_update
sub. It should be line 270. - 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.
No bold text in Midnight Commander
If started under rxvt-unicode with the default TERM
setting, text that is usually bold in many other terminals will not appear so. The root of the issue is because xterm couples bright text color with the bold attribute (thus, bright colors will always appear as bold in xterm).
rxvt-unicode does not have this limitation, which S-Lang (the library Midnight Commander uses for text display by default) honors. Because S-Lang can decouple the bold attribute from bright colors on rxvt-unicode, Midnight Commander would need to explicitly specify the bold attribute as appropriate, which it does not.
The solution is to configure Midnight Commander to explicitly use bold colors as desired, e.g. by editing the default skin as follows:
$ mkdir ~/.local/share/mc/skins $ cp /usr/share/mc/skins/default.ini ~/.local/share/mc/skins/ $ sed -i -E 's/^(.* = (gray|brightred|brightgreen|yellow|brightblue|brightmagenta|brightcyan|white);.*)$/\0;bold/' ~/.local/share/mc/skins/default.ini
The above will create a copy of the default skin, but with all bright colors having an explicit bold attribute added.
See also
- Rxvt Unicode — video tutorial by Alex Booker
- Browsable CVS — the source code
- rxvt-unicode —
enable-wide-glyphs.patch
developer's dotfile