Gnome Terminal

Until recently I have been using xterm and twm. Call me a stone-age
throw-back if you like, but those two are fast and lean.

But I am giving gnome-terminal and metacity a spin now. Metacity
suffers somewhat from click-to-focus, even if you set
it to focus-follows-mouse, but that is a story for another day.

Today it is gnome-terminal gripe time. Ok, so it is actually not
too bad, but it feels slow. Starting the first terminal window,
for example, takes a few seconds. Seconds! I want my window to
show up in less than .2 seconds.

A bit of stracing reveals the cause. It is dlopen-ing a zillion modules related to character support.
That is used to populate a, I estimate, rarely used menu. In my humble opinion, the penalty for this kind of thing should not be taken on startup, but when the rarely-used feature is activated. Or in the background while I type away happily. Luckily this does not seem
too hard to fix.

On top of this, Fontconfig is doing a whole lot of work on startup.
It does that for other GTK+ based programs too, so I doubt the
applications are to blame. So what does it do?

  • Stats ~200 directories all over the place.
  • Feels the need to do things three times:
    access("/etc/fonts/suse-hinting.conf", R_OK) = 0
    stat64("/etc/fonts/suse-hinting.conf", {st_mode=S_IFREG|0644, st_size=6575, ...}) = 0
    open("/etc/fonts/suse-hinting.conf", O_RDONLY) = 18

    Are you there? Are you there? Please open! This kind of behaviour
    is fairly cheap on a local file system, but not necessarily so on
    a remote one. And it is wrong: the file could have changed twice between the three calls.

  • Zig-zag reading files:
    read(17, "     fd9 78563412    1    4    4"..., 255) = 255
    lseek(17, -136, SEEK_CUR)               = 158
    read(17, "/usr/X11R6/lib/X11/fonts/CID/us"..., 4109) = 3938
    lseek(17, -3909, SEEK_CUR)              = 187
    read(17, "/usr/X11R6/lib/X11/fonts/URW/us"..., 4109) = 3909
    lseek(17, -3880, SEEK_CUR)              = 216
    read(17, "/usr/X11R6/lib/X11/fonts/uni/us"..., 4109) = 3880
    lseek(17, -3851, SEEK_CUR)              = 245

    Back-and-forth over the same area again and again. Short of timing
    system call overhead I do not see what it is doing.

I am also having problems with focus in the terminal. I am not entirely sure how I manage, but
somehow the focus ends up on one of the tabs where it has no business being.