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.