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\aESC [
ESC ] 50 ; FONT-SPEC BELhex
1b 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)
示例
printf '\033]50;monospace:size=18\007' # bump to 18pt monospace\nprintf '\033]50;?\007' # query current font nameimport sys; sys.stdout.write('\x1b]50;monospace:size=18\x07')fmt.Print("\x1b]50;monospace:size=18\x07")process.stdout.write('\x1b]50;monospace:size=18\x07')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
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |