The requirements
I need a terminal emulator. This is a checklist of the features that I need:
- Foreground colour:
#aaaaaa
. - Background colour: black.
- "Linux console" colour palette.
- Font: Monospace-10.
Alt+Fnn
to directly switch to one of the first 12 terminals, like in the Linux console.F11
to toggle fullscreen.Alt+'+'
,Alt+'-'
,Alt+'0'
to control font sizes.- All other keybindings disabled, so that terminal programs are free to use them.
- I occasionally need to switch to black-on-white for presentations.
- Tabs.
- When I open a new tab it needs to contain a shell opened inside the same
directory of the last tab I was in. The way I normally start working is
something like:
cd workdir; x-terminal-emulator -e vim todolist
and then I start opening new tabs. - I need -e to work. In fact, I need the terminal to work as
x-terminal-emulator -e cmd args...
- I need to conveniently pick a URL in a terminal and open it in Chromium, and
not any other browser. Even better, open it in
x-www-browser
My experience is that getting all of this to work is not being as easy as it seems, so I'm creating this page to track progress.
gnome-terminal
I've been happily using this for years, and it did everything I needed, until some months ago it started to open new tabs in the terminal's working directory instead of the last tab's working directory. This is a big point of frustration for me.
It also started opening https
urls with Firefox, although the preferred
browser was Chromium. There seemed to be no way to control it: I looked for
firefox
or iceweasel
in all gconf and dconf settings and found nothing.
The browser issue was fixed by accident when I used Xfce4's settings application to change the browser from Chromium to Firefox and then back to Chromium.
update, thanks to Mathieu Parent, Josh Triplett, Peter De Wachter, Julien Cristau, and Charles Plessy:
It is also possible to restore the "new tab opened inside the same
directory of the last tab I was in" behaviour,
by enabling "run command as a login shell" so that /etc/profile.d/vte.sh
is
run (thanks Mathieu Parent for the link).
That in turn spawned extra cleanup work in my
.bashrc
/.bash_profile
/.profile
setup, which has been randomly evolving
since even before my first Debian "buzz" system. I found that it was setting
PROMPT_COMMAND
to something else to set the terminal title, conflicting with
what vte.sh wants to do.
With regards to loading /etc/profile.d/vte.sh
by default, Peter De Watcher
sent pointers to relevant bugs:
here,
here, and
here.
An alternative strategy is to work using the prompt rather than
PROMPT_COMMAND
; an example is in Josh Triplett's .bashrc from
git://joshtriplett.org/git/home
.
Josh Triplett also said:
To fix the browser launched for URLs, you either need to use a desktop environment following GNOME's mechanism for setting the default browser, or edit
~/.local/share/applications/mimeapps.list
and make surex-scheme-handler/http
,x-scheme-handler/https
, andx-scheme-handler/ftp
are set to your preferred browser's desktop file basename under[Added Associations]
.
All my issues with gnome-terminal are now gone and I'm only too happy to go back to it.
rxvt-unicode-256color
urxvt
took some work. This is where I got with configuration:
URxvt.font: xft:Monospace-10:antialias=true
URxvt.foreground: #aaaaaa
URxvt.background: black
URxvt.scrollBar_right: true
URxvt.cursorBlink: true
URxvt.perl-ext-common: default,matcher,tabbedex
URxvt.url-launcher: /usr/bin/x-www-browser
URxvt.matcher.button: 1
URxvt.perl-lib: /home/enrico/.urxvt/perl
URxvt.color0: black
URxvt.color1: #aa0000
URxvt.color2: #00aa00umask
URxvt.color3: #aa5500
URxvt.color4: #0000aa
URxvt.color5: #aa00aa
URxvt.color6: #00aaaa
URxvt.color7: #aaaaaa
URxvt.color8: #555555
URxvt.color9: #ff5555
URxvt.color10: #55ff55
URxvt.color11: #ffff55
URxvt.color12: #5555ff
URxvt.color13: #ff55ff
URxvt.color14: #55ffff
URxvt.color15: #ffffff
I got all of the tab behaviour that I need by "customizing" the tab script (yuck github :( ).
Missing
- Bold fonts only work if I set
TERM=rxvt
- The implementation for opening a new tab in the directory of the current tab is rather fragile.
- Resizing the terminal window causes an annoying flicker
sakura
Configuration is in .config/sakura/sakura.conf
and these bits help:
colorset1_fore=rgb(170,170,170)
colorset1_back=rgb(0,0,0)
colorset1_opacity=99
colorset2_fore=rgb(0,0,0)
colorset2_back=rgb(254,254,254)
colorset2_opacity=99
font=Monospace 10
show_always_first_tab=No
scrollbar=false
fullscreen_key=F11
palette=linux
Missing
Alt+Fnn
to directly switch to one of the first 12 terminals, like in the Linux console. Sakura hardcodes using numbers for switching, and only allows to change the modifier.Alt+'+'
,Alt+'-'
,Alt+'0'
to control font sizes.- Tabs are huge and take way too much screen space.
lxterminal
Configuration is in .config/lxterminal/lxterminal.conf
and this is relevant
to me:
[general]
fontname=DejaVu Sans Mono 10
fgcolor=#aaaaaaaaaaaa
disallowbold=false
cursorblinks=true
tabpos=top
hidescrollbar=false
hidemenubar=true
hideclosebutton=true
disablef10=true
disablealt=true
Also, to open a url directly you control+click it.
Missing
Alt+Fnn
to directly switch to one of the first 12 terminals, like in the Linux console.F11
to toggle fullscreen.Alt+'+'
,Alt+'-'
,Alt+'0'
to control font sizes.- I occasionally need to switch to black-on-white for presentations: this is inconvenient, as it requires to set foreground and background separately each time.
terminator
Configuration is in .config/terminator/config
and this is relevant to me:
[global_config]
use_custom_url_handler = True
custom_url_handler = x-www-browser
inactive_color_offset = 1.0
[keybindings]
close_term = None
close_window = None
copy = None
cycle_next = None
cycle_prev = None
go_down = None
go_next = None
go_prev = None
go_up = None
group_all = None
group_tab = None
hide_window = None
move_tab_left = None
move_tab_right = None
new_tab = None
new_terminator = None
new_window = None
next_tab = None
paste = None
prev_tab = None
reset_clear = None
reset = None
resize_down = None
resize_left = None
resize_right = None
resize_up = None
rotate_ccw = None
rotate_cw = None
scaled_zoom = None
search = None
split_horiz = None
split_vert = None
switch_to_tab_1 = <Alt>F1
switch_to_tab_2 = <Alt>F2
switch_to_tab_3 = <Alt>F3
switch_to_tab_4 = <Alt>F4
switch_to_tab_5 = <Alt>F5
switch_to_tab_6 = <Alt>F6
switch_to_tab_7 = <Alt>F7
switch_to_tab_8 = <Alt>F8
switch_to_tab_9 = <Alt>F9
switch_to_tab_10 = <Alt>F10
toggle_scrollbar = None
toggle_zoom = None
ungroup_all = None
ungroup_tab = None
[profiles]
[[default]]
palette = "#000000:#aa0000:#00aa00:#aa5500:#0000aa:#aa00aa:#00aaaa:#aaaaaa:#555555:#ff5555:#55ff55:#ffff55:#5555ff:#ff55ff:#55ffff:#ffffff"
copy_on_selection = True
icon_bell = False
background_image = None
show_titlebar = False
Missing
- I need -e to work. In fact, I need the terminal to work as
x-terminal-emulator -e cmd args...
. #734655 but should be fixed soon - New windows start with the title bar visible, even if I configured it not to show. It disappears as soon as the window gets focused, causing the terminal contents to resize. It is just a glitch, but oh so annoying!
update: Richard Hartmann pointed out that terminator's upstream maintainer now changed after the old one didn't have time any more, and it should have a release with a ton of improvements anytime soon.
xfce4-terminal
Configuration is in .config/xfce4/terminal
, and this is relevant to me:
terminalrc
:
[Configuration]
FontName=Monospace 10
MiscAlwaysShowTabs=FALSE
MiscBell=FALSE
MiscBordersDefault=TRUE
MiscCursorBlinks=FALSE
MiscCursorShape=TERMINAL_CURSOR_SHAPE_BLOCK
MiscDefaultGeometry=80x24
MiscInheritGeometry=FALSE
MiscMenubarDefault=FALSE
MiscMouseAutohide=FALSE
MiscToolbarDefault=FALSE
MiscConfirmClose=TRUE
MiscCycleTabs=TRUE
MiscTabCloseButtons=TRUE
MiscTabCloseMiddleClick=TRUE
MiscTabPosition=GTK_POS_TOP
MiscHighlightUrls=TRUE
ShortcutsNoMenukey=TRUE
ShortcutsNoMnemonics=TRUE
ColorForeground=#aaaaaaaaaaaa
accels.scm
:
(gtk_accel_path "<Actions>/terminal-window/goto-tab-1" "<Alt>F1")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-2" "<Alt>F2")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-3" "<Alt>F3")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-4" "<Alt>F4")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-5" "<Alt>F5")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-6" "<Alt>F6")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-7" "<Alt>F7")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-8" "<Alt>F8")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-9" "<Alt>F9")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-10" "<Alt>F10")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-11" "<Alt>F11")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-12" "<Alt>F12")
update: Yves-Alexis Perez points out that to disable the F1 for help in the terminal, you need to remove the accelerator. I tried this and this and didn't have success, but I confess I did not dig too much into it.
Although xfce4-terminal -e
does not work as I expect, xfce4-terminal
registers a wrapper for x-terminal-emulator that does the right thing with
respect to -e
(also thanks Yves-Alexis Perez).
Missing
Alt+'+'
,Alt+'-'
,Alt+'0'
to control font sizes.- All other keybindings disabled, so that terminal programs are free to use them. I could not find a way to disable F1 for help.
- I occasionally need to switch to black-on-white for presentations. I can
switch to a "Black on white" preset, but there is no "Gray on black" to
switch back to. I can switch back to "White on black", but then I need to
manually set the text colour to
#aaaaaa
. update: Yves-Alexis Perez found that you can add presets to.local/share/colorthemes
taking examples from/usr/share/xfce4/terminal/colorschemes
; next time I consider switching to xfce4-terminal I'll try that.
roxterm
Configuration is in .config/roxterm.sourceforge.net/
split in several files
corresponding to profiles. This is a reasonable starting point for me:
Profiles/Default
:
[roxterm profile]
colour_scheme=Default
disable_menu_access=1
disable_menu_shortcuts=1
disable_tab_menu_shortcuts=0
tab_close_btn=0
hide_menubar=1
always_show_tabs=0
Colours/Default
:
[roxterm colour scheme]
0=#000000000000
1=#aaaa00000000
2=#0000aaaa0000
3=#aaaa55550000
4=#00000000aaaa
5=#aaaa0000aaaa
6=#0000aaaaaaaa
7=#aaaaaaaaaaaa
8=#555555555555
9=#ffff55555555
10=#5555ffff5555
11=#ffffffff5555
12=#55555555ffff
13=#ffff5555ffff
14=#5555ffffffff
15=#ffffffffffff
palette_size=16
foreground=#aaaaaaaaaaaa
background=#000000000000
cursor=#cccccccccccc
bold=
dim=
Shortcuts/Default
:
[roxterm shortcuts scheme]
File/New Window=
File/New Tab=
File/Close Window=
File/Close Tab=
Tabs/Previous Tab=
Tabs/Next Tab=
Edit/Copy=
Edit/Paste=
View/Zoom In=<Control>plus
View/Zoom Out=<Control>minus
View/Normal Size=<Control>0
View/Full Screen=F11
View/Scroll Up One Line=
View/Scroll Down One Line=
Help/Help=
Edit/Copy & Paste=
Search/Find...=
Search/Find Next=
Search/Find Previous=
File/New Window With Profile/Default=
File/New Tab With Profile/Default=
Tabs/Select_Tab_0=<Alt>F1
Tabs/Select_Tab_1=<Alt>F2
Tabs/Select_Tab_2=<Alt>F3
Tabs/Select_Tab_3=<Alt>F4
Tabs/Select_Tab_4=<Alt>F5
Tabs/Select_Tab_5=<Alt>F6
Tabs/Select_Tab_6=<Alt>F7
Tabs/Select_Tab_7=<Alt>F8
Tabs/Select_Tab_8=<Alt>F9
Tabs/Select_Tab_9=<Alt>F9
Tabs/Select_Tab_10=<Alt>F10
Tabs/Select_Tab_11=<Alt>F11
Tabs/Select_Tab_12=<Alt>F12
Global
:
[roxterm options]
edit_shortcuts=0
prefer_dark_theme=1
colour_scheme=Default
warn_close=1
Missing
Nothing of my initial requirements seems to be missing, really, so I'm sticking to it for a while to see what happens.
The first itch to scratch is that when the menubar is hidden, the popup menu becomes the entire menubar contents, which does not fit the general use case to have a contextual menu with the most common shortcuts. I'll just declare it useless and get myself used to some new hotkey for starting a new terminal.
update: after fixing my issues with gnome-terminal I've switched back to gnome-terminal: its interface feels less clunky as I'm already used to it.
Other references
Guillem Jover made a similar analysis in 2009, it can be found here.
Thomas Koch mentioned that termit
should be able to do all I need, and is
scriptable in Lua. I like the sound of that, and it's definitely one I should
look next time I find myself shopping for terminal emulators.