跳到主要内容
ansicode

OSC 50 — 设置或查询字体(xterm 字体选择器)

运行时切换终端显示字体,或查询当前字体 —— xterm 扩展,少数分叉亦实现。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x1b]50;FONT-SPEC\x07 (set) \x1b]50;?\x07 (query)
\\033[\033]50;FONT-SPEC\007
\\e[\e]50;FONT-SPEC\a
ESC [ESC ] 50 ; FONT-SPEC BEL
hex1b 5d 35 30 3b ... 07

说明

OSC 50 在运行时切换终端的显示字体。参数是终端能识别的字体规范 —— 历史上为 XLFD(`-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1`),现代 xterm 及分叉也接受 Xft / fontconfig 名(`monospace:size=14`、`Iberian Black:size=12:weight=bold`)。以 `+N`/`-N` 替代名称表示相对当前字号上下增减 N 像素。发送 `?`(`\x1b]50;?\x07`)让终端以 `\x1b]50;NAME\x07` 回报当前字体名 —— `vim` 的 `:set guifont` 自动检测等价物与 `xterm` 字体菜单都用它。urxvt 增加了并行的 OSC 710 / 711 / 712 用于其 font/boldFont/italicFont 槽位。现代非 xterm 终端(kitty、alacritty、wezterm、ghostty、Windows Terminal、iTerm2)的字体均通过自家配置管理 —— 它们不实现 OSC 50,因为没有单一「默认字体」可覆写。

规范出处: xterm-ctlseqs (OSC 50)

示例

bash
printf '\033]50;monospace:size=18\007'   # bump to 18pt monospace\nprintf '\033]50;?\007'                   # query current font name
python
import sys; sys.stdout.write('\x1b]50;monospace:size=18\x07')
go
fmt.Print("\x1b]50;monospace:size=18\x07")
javascript
process.stdout.write('\x1b]50;monospace:size=18\x07')
c
printf("\x1b]50;monospace:size=18\x07");

终端支持

xterm
支持
Linux console (fbcon)
不支持
macOS Terminal.app
不支持
iTerm2
不支持
Windows Terminal
不支持
cmd.exe / ConPTY
不支持
kitty
不支持
alacritty
不支持
WezTerm
不支持
Ghostty
不支持
GNOME Terminal
不支持
Konsole
不支持
tmux
不支持
GNU screen
不支持

相关序列