muterm

This is a terminal emulator for X11, distributed under a BSD licence. It has the following features: I wrote it out of frustration with termit. Although it's a very nice terminal emulator, it has some shortcomings.

The first one is the lack of keyboard shortcuts to navigate between tabs. I added some shortcut for it using ctrl-tab, but it's not very productive.

The second one is the inability to change the terminal color settings quickly. Often, I have multiple tabs open and I get confused about which tab does what. I thought about making them different colors so that I can easily see which is the compiler window, which is the debugging window etc.

The third one is a minor issue, but sometimes significant. With VTE derivatives, in order to paste some text, you need to move the mouse pointer on the terminal cursor. This is just inconvenient. With muterm, you can paste no matter where the mouse pointer is.

Download

Here are some snapshots I took during development: The previous versions can be used to build other software, but the latest version contains a lot of bug fixes. So, it might be a good idea to look at the latest version also if you want to use the prior versions for something else.

Usage

Run the muterm binary with the name of the program and its arguments. For instance:
  muterm /bin/bash -l
will work. Not specifying a program in this way will cause muterm to try running "/bin/bash", "/bin/sh", etc.

Keyboard shortcuts are explained within the program itself. Just click "MENU".

Code

The code is quite modular. X11 graphics, tab handling, main program flow and the terminal emulation parts are all separate modules. These can be extracted to build something else or to port it to another platform.

For example, the graphics module interface simply needs a way to show an image on the screen and the ability to get keyboard/mouse input. Similarly, the terminal emulation part only needs to print some characters on a screen and set the cursor position. You could do this in a memory buffer to automate programs, for instance.

There are some things to do, when I have the inclination:

The program can also be linked statically. I made it work with the following settings in makefile:
X11LINK=-lXrandr -lXrender -lXext -lX11 -lXau
FTLINK=-lfreetype
FTCOMPILE=-I/usr/include/freetype2
CFLAGS= $(CCWARN) $(FTCOMPILE) $(DEBUG) $(OPTI)
LFLAGS= -static $(FTLINK) $(X11LINK) $(DEBUG) $(EFENCE)  -lpng -lbz2 -lz
The resulting file was about 2 MB.

Links

Here are some links that were useful while developing this: