跳转至内容

st

来自 ArchWiki

stXorg 的一个简单终端实现,由 suckless 开发。它的目的是作为 xtermurxvt 的轻量级替代品。它目前支持 256 色、真彩色、大部分 VT10X 转义序列、UTF-8、X11 复制/粘贴、抗锯齿字体、回退字体、缩放、快捷键和线条绘制。

安装

安装 stAUR 包。在 Wayland 上,st 使用 Xwayland;目前没有活跃的 Wayland 端口可用,Xwayland 的内存占用是不可避免的。

配置

st 通过其 config.h 文件进行配置,该文件在编译时复制。默认值存储在 config.def.h 中,该文件随源代码一起提供。请考虑维护您自己的 config.hPKGBUILD

Shell

要更改 st 的默认 shell,请编辑此行

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

或使用所需的 shell 作为最后一个参数启动 st

$ st options fish

Terminal

要更改终端类型,请编辑此行

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

st 将使用 termname 的值设置 TERM 变量。

字体

按您的喜好编辑以下行

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

您也可以在命令行中传递字体的数值

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

可以使用 fc-list 找到字体名称。

光标

默认情况下,鼠标指针是 XC_xterm;,这通常很难找到。要将其更改为您光标主题的常规光标,请编辑以下内容

static unsigned int mouseshape = XC_left_ptr;

颜色

编辑以下行以设置前景色、背景色和光标颜色

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

这些值指的是配置文件中的 *colorname[] 数组。您可以使用默认颜色,或添加您自己的 #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;

存在用于简化颜色主题创建的工具。例如,terminal.sexy 包含一组预制主题,并直接导出为 st 的格式(参见 issue 22 的评论)。

有一个用于 Solarized 颜色方案的补丁。请访问 https://st.suckless.org/patches/solarized/ 进行安装。

补丁

suckless 网站 可以找到许多补丁。要应用补丁,请下载 diff 文件,并使用 patch -i patch.diff 进行应用。这会更改默认配置文件 config.def.h;如果您维护自己的 config.h,请将您的配置从 config.h 复制到 config.def.h 的副本中,然后将其重命名为 config.h,然后执行 make clean install

桌面条目

为了在 桌面环境 中简化使用(例如,使用 adobe-source-code-pro-fonts 这种不错的字体)启动 st,您还可以创建一个 桌面条目

~/.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;

菜单条目将作为 Simple Terminal 出现在 System Tools 应用程序列表中。

故障排除

键盘

如果 Delete 在某些应用程序中无法正常工作,请将以下内容添加到 ~/.inputrc/etc/inputrc

set enable-keypad on

如果以上方法对某些应用程序(如使用 bash 的 IPython)无效,则关闭 enable-keypad,并将以下内容添加到您的 ~/.bashrc 中,如 st FAQ 中所述。

printf '\033[?1h\033=' >/dev/tty

Vim

vim 中文本的背景色不会填充非字符区域

尝试将 config.h 中的 termname 值设置为 st-256color 并重新编译。并且不要在 shell 中设置 TERM 变量,至少不要设置为 st-256color,因为这似乎会导致此问题。

另一种解决方案,也许是更好的解决方案,是在您的 .vimrc 文件中包含以下行:

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

tmux 或其他情况下 256 色和真彩色支持不工作

首先,请确保您没有在 ~/.bashrc 中设置和导出 TERM 的值,如这个 帖子 中所述。

注意 请不要显式设置 TERM。正确的方法是在您的 tmux.conf 中设置 default-terminal 选项。

其次,请确保您使用的 vim 版本是 >=7.4.1799,因为 termguicolors 是在此版本中添加的。

最后,将以下内容添加到 ~/.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
注意 ^[ 是一个字面上的转义(Esc)字符,它前置 t_8ft_8b 的每个值。它是一个单个字符,可以在 vim 中输入。在 INSERT 模式下,按 Ctrl+v 然后按 Esc。您仍然处于 INSERT 模式;再次按 Esc 返回 NORMAL 模式。
提示 建议在设置 colorschemet_Cotermguicolors 之前设置 t_8ft_8b 的值。

有关更多信息,请参阅 vim 中的 :helpxterm-true-colort_8ft_8b

阿拉伯文成形支持

Vim#Bidirectional support 中所述,为了获得完整的阿拉伯文字符支持,您需要一个覆盖阿拉伯文 Forms-B 的 Unicode 条目的回退字体。要实现此目的,请添加 font2 补丁并按以下方式编辑您的配置:

static char *font = "Cascadia Code:size=12:pixelsize=13:antialias=true:autohint=true";
static char *font2[] = { "DejaVu Sans Mono:size=12:pixelsize=13:antialias=true:autohint=true" };

然后使用 st -f 'Vazir Code:pixelsize=15' 启动 st。此设置涵盖了大多数阿拉伯文成形情况:无成形、斜体无成形、Forms-B、斜体 Forms-B。

参见