st

From ArchWiki
Jump to: navigation, search

st is a simple terminal implementation for Xorg by suckless. It is intended to serve as a lightweight replacement for xterm or urxvt. It currently supports 256 colors, true colors, most VT10X escape sequences, UTF-8, X11 copy/paste, anti-aliased fonts (using fontconfig), fallback fonts, resizing, shortcuts via config.h, and line drawing.

Installation

Install the stAUR package or st-gitAUR for the development version.

Configuration

st is configured through its config.h file which is copied over at compile time. Defaults are stored in config.def.h which is included with the source. Consider maintaining your own config.h and PKGBUILD.

Shell

To change the default shell for st, edit this line:

static char *shell = "/bin/sh";

Or start st with the desired shell as last argument:

st options fish

Term

To change the terminal type, edit this line:

 static char *termname = "st-256color";

st will set the TERM variable with the value of termname.

Note: If you experience trouble with st, you can try to set termname to xterm or xterm-256color. Alternatively symlink xterm to st in your local bin for compatibility.

Font

Edit the following line as you prefer:

static char *font = "Liberation Mono:pixelsize=12:antialias=false:autohint=false";

You can also pass the value of the font in the command line:

$ st -f "Liberation Mono:size=12"
$ st -f 'Liberation Mono-12'

Colors

Edit the following lines to set foreground, background, and cursor colors:

unsigned int defaultfg = 7;
unsigned int defaultbg = 0;
static unsigned int defaultcs = 256;

The values refer to the *colorname[] array in the config file. You can use the default colors or add yours in #rrggbb:

static const char *colorname[] = {
   	/* 8 normal colors */
       "black",
       "red3",
       "green3",
       "yellow3",
       "blue2",
       "magenta3",
       "cyan3",
       "gray90",
 
       /* 8 bright colors */
       "gray50",
       "red",
       "green",
       "yellow",
       "#5c5cff",
       "magenta",
       "cyan",
       "white",
 
       [255] = 0,
 
       /* more colors can be added after 255 to use with DefaultXX */
       "#cccccc",
       "#eeeeee",
       "#111111",
 };
 
/*
 * Default colors (colorname index)
 * foreground, background, cursor
 */
unsigned int defaultfg = 257;
unsigned int defaultbg = 258;
static unsigned int defaultcs = 256;

Tools exists to facilitate the creation of color palettes. For example terminal sexy has a set of pre-made ones and exports directly to st's format (see [1]).

There is a patch for the Solarized color scheme. See [2] or st-solarizedAUR to install it.

Desktop entry

To simplify launching st with a decent font (e.g. adobe-source-code-pro-fonts) in a desktop environment, you can also create a desktop entry:

~/.local/share/applications/st.desktop
[Desktop Entry]
Name=Simple Terminal
GenericName=Terminal
Comment=Suckless terminal emulator for X
Exec=st -t "Simple Terminal" -f "Source Code Pro:style=Semibold:size=12"
Terminal=false
Type=Application
Encoding=UTF-8
Icon=utilities-terminal
Categories=System;TerminalEmulator;
Keywords=shell;prompt;command;commandline;cmd;

The menu entry will appear as Simple Terminal in the System Tools application list.

Troubleshooting

Keyboard

Add the following to ~/.inputrc or /etc/inputrc if Delete is not working properly in some applications:

 set enable-keypad on

Vim

The background colour of text in vim will not fill in anything that is not a character

Try setting the value of termname in your config.h to st-256color and recompiling. And do not set the TERM var in your shell, at least not to st-256color as this seems to cause the issue.

Another solution, perhaps a better one, is to have the following lines in your .vimrc file:

if &term =~ '256color'
    " disable Background Color Erase (BCE) so that color schemes
    " render properly when inside 256-color tmux and GNU screen.
    " see also http://sunaku.github.io/vim-256color-bce.html
    set t_ut=
endif

256color and truecolor support not working in tmux or otherwise

First, make sure you are not setting and exporting the value of TERM in your ~/.bashrc as mentioned in this thread

Note: Please do not explicitly set TERM. Do it right by setting the default-terminal setting in your tmux.conf

Second, make sure the version of vim you are using is >=7.4.1799, which is when termguicolors was added.

Finally, add the following to ~/.vimrc:

set t_8f=^[[38;2;%lu;%lu;%lum        " set foreground color
set t_8b=^[[48;2;%lu;%lu;%lum        " set background color
colorscheme Tomorrow-Night-Eighties
set t_Co=256                         " Enable 256 colors
set termguicolors                    " Enable GUI colors for the terminal to get truecolor
                             
Note: ^[ is a literal escape (<Esc>) character that prefixes each of the values for t_8f and t_8b. It is a single character, which can be reproduced in vim. In INSERT mode, press <C-v>-<Esc> (Control+v then press Esc). You will still be in INSERT mode; press <Esc> again to return to NORMAL mode.
Tip: It is recommended to set the values for t_8f and t_8b prior to setting colorscheme, t_Co and termguicolors.

For more information, see the :help in vim for: xterm-true-color, t_8f, t_8b

See also