kitty 术语表与环境变量完全指南:从窗口层级体系到子进程环境变量机制
【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty
本文基于 kitty 官方文档 docs/glossary.rst 整理并深化。kitty 的窗口系统(OS Window / Tab / Window / Layout)构成了其全部用户界面术语的基础,而两套环境变量体系——“影响 kitty 行为的变量”和“kitty 注入给子进程的变量”——则是脚本化、远程控制和 shell 集成的核心接口。读完本文,你将掌握 kitty 术语的准确含义,并能利用环境变量定制配置目录、启用远程控制、实现 SSH 无交互认证,以及理解 kitty 子进程环境变量的组装机制。
1. 窗口体系:两种窗口、Tab 与布局
kitty 明确区分两种“窗口”(见 docs/glossary.rst 中的os_window与window词条):
- OS Window(操作系统窗口):由操作系统管理的窗口,一个 OS Window 包含一个或多个 kittytab;
- kitty window(终端窗口):运行具体 shell/程序的终端实例,多个 kitty window 通过layout组织在一个 tab 内;
- tab:一组按 layout 组织的 kitty window,每个 OS Window 含一个或多个 tab;
- layout:管理 tab 内窗口分组、尺寸与位置的“平铺窗口管理器”,窗口的大小和位置由布局自动维护。
从源码结构看,这套层级与仓库中的代码组织一一对应:窗口与 tab 的运行时逻辑位于 kitty/tabs.py,而布局实现则集中在 kitty/layout/ 目录下,包括grid.py(网格)、splits.py(分屏)、tall.py、stack.py、vertical.py等具体布局,其接口定义在 kitty/layout/interface.py。布局的完整行为细节可参阅官方文档 docs/layouts.rst。
2. Overlay:覆盖窗口的用途与“主窗口”例外
overlay词条说明:覆盖窗口是一个完全覆盖现有 kitty window 的 kitty window。kitty 内部大量使用 overlay,典型场景包括:
- 显示回滚缓冲(scrollback buffer);
- 显示 hints kitten;
- unicode_input 等输入法辅助界面。
关键规则是:普通 overlay 面向短时长弹出,在判定“当前工作目录”或获取 kitten/launch 命令的输入文本时,它不被视为活动窗口(active window)。如果需要创建被视为主窗口(main window)的 overlay,应使用launch动作的overlay-main参数,相关行为定义见 docs/launch.rst。
3. Hyperlinks 与 Kittens:两个高频术语
- Hyperlinks:终端可以像网页一样携带超链接,kitty 允许按链接类型与 URL 精确控制点击后的行为(打开浏览器、复制到剪贴板等),策略配置见 docs/open_actions.rst。
- Kittens:小型、独立、静态编译的命令行程序,设计为在 kitty window 内运行,提供查看图片、便捷连接远程机器、文件传输、Unicode 输入等能力。kittens 也可以用 Python 编写以定制和扩展 kitty,入门指南见 docs/kittens_intro.rst。官方自带 kittens 的绝大多数用 Go 编写,配有一个小型 Python shim 处理进程内交互部分——这一点在仓库中可以直接验证:
kittens/目录下每个 kitten 均包含 Go 源码(如main.go)与main.pyshim,例如 kittens/ssh/main.go 与 kittens/ssh/main.py;kittens 进程启动时会设置KITTY_CONFIG_DIRECTORY指向 kitty 配置目录,见 kittens/runner.py。
4. 缓动函数(Easing Function)与 SIMD
缓动函数控制动画随时间的推进方式,kitty 支持 CSS 的缓动函数语法。常用取值:
linear:恒定速率;ease-in-out:起步慢、中段快、结尾慢。
这两类函数用于驱动 kitty 内的多种动画,典型配置项是cursor_blink_interval(光标闪烁)与visual_bell_duration(视觉铃声),二者均在 kitty/options/definition.py 中定义;动画计算的 C 层实现位于 kitty/animation.c。
SIMD(Single Instruction, Multiple Data,向量编程)指用单条 CPU 指令处理多个数据单元,可显著加速数据处理。kitty 在运行时探测 CPU 能力并在 SSE4.2 / AVX2 / AVX-512 实现之间选择:从源码结构看,kitty/simd-string.c 先探测 CPU 特性,再读取KITTY_SIMD环境变量进行覆盖(取值128对应 SSE4.2、256对应 AVX2;当前源码中还存在512取值映射到 AVX-512 实现)。对应实现分别编译自 kitty/simd-string-128.c、kitty/simd-string-256.c 与 kitty/simd-string-512.c。
警告(与文档一致):
KITTY_SIMD会覆盖 CPU 能力探测。若设置为 CPU 不支持的向量宽度,kitty 会以 SIGILL 崩溃;设置为其他任意值则禁用 SIMD 指令。
5. 影响 kitty 行为的环境变量
以下变量在 kitty启动前设置,用于改变 kitty 自身的运行行为(全部词条来自 docs/glossary.rst):
| 变量 | 作用 | 默认值 / 备注 |
|---|---|---|
KITTY_CONFIG_DIRECTORY | 控制 kitty 查找kitty.conf及其他配置文件的目录 | ~/.config/kitty,查找机制详见kitty --config |
KITTY_CACHE_DIRECTORY | 缓存文件存放位置 | ~/.cache/kitty(macOS 为~/Library/Caches/kitty) |
KITTY_RUNTIME_DIRECTORY | 运行时文件(如 socket)存放位置 | 若定义了XDG_RUNTIME_DIR则用之,否则用缓存目录下的 run 子目录 |
VISUAL | kitty 使用的终端文本编辑器(如vi、nano),例如响应edit_config_file快捷键打开kitty.conf时 | — |
EDITOR | 同VISUAL,在VISUAL未设置时使用 | — |
SHELL | 当shell选项设为.时,kitty 运行的默认 shell | — |
GLFW_IM_MODULE | 设为ibus以启用 X11 下的 IME 支持 | 输入方法相关 |
KITTY_WAYLAND_DETECT_MODIFIERS | 设为非空值时,kitty 在 Wayland 下尝试自动发现 XKB 修饰键(对 hyper 等非标准修饰键有用);发现失败时回退到 Wayland 默认 XKB 映射 | — |
SSH_ASKPASS | 指定 SSH 询问密码的程序;设置后 ssh kitten 默认使用它 | 详见 docs/kittens/ssh.rst 的askpass选项 |
KITTY_CLONE_SOURCE_CODE | 克隆窗口时以eval执行的 shell 代码(配合 clone-in-kitty 功能) | — |
KITTY_CLONE_SOURCE_PATH | 克隆窗口时被 source 的文件路径 | — |
KITTY_DEVELOP_FROM | 指向 kitty 源码目录,kitty 将从该处加载 Python 代码;仅对官方二进制构建有效 | — |
KITTY_RC_PASSWORD | 配合remote_control_password选项使用远程控制的口令 | 见 docs/remote-control.rst |
前三个目录变量的解析逻辑可以在 kitty/constants.py 中直接验证:KITTY_CACHE_DIRECTORY与KITTY_RUNTIME_DIRECTORY均先查环境变量,再回退到 XDG 默认路径。
6. kitty 为子进程设置的环境变量
kitty 启动每个子进程(shell、kitten、任意 launch 命令)时会注入一组环境变量,它们是脚本感知终端环境、与 kitty 安全通信的基础。以下清单完整继承自 docs/glossary.rst:
| 变量 | 说明 |
|---|---|
LANG | 仅在 macOS 上设置。若 macOS 用户设置中的国家/语言组合成无效 locale,会被设为en_US.UTF-8 |
PATH | kitty 把自己的安装路径前置到 PATH,确保 shell 中调用kitty系列功能正常工作 |
KITTY_WINDOW_ID | 子程序所在 kitty window 的整数 ID,可配合 远程控制 使用 |
KITTY_PID | 承载子程序的 kitty 进程 PID;程序可据此向 kitty 发送SIGUSR1信号触发配置重载 |
KITTY_PUBLIC_KEY | 公钥,程序可用它通过远程控协议安全地与 kitty 通信,格式为protocol:key data |
WINDOWID | 所在 OS Window 的 ID;仅在 X11、macOS 等有窗口 ID 的平台可用 |
TERM | 终端名称,默认xterm-kitty,由term选项控制 |
TERMINFO | 指向包含 kitty terminfo 数据库的目录路径,或 base64 编码的 terminfo 数据本身;由terminfo_type选项决定形式(仓库中打包的原始数据见 terminfo/kitty.terminfo 与 terminfo/kitty.termcap) |
KITTY_INSTALLATION_DIR | kitty 安装目录路径 |
COLORTERM | 固定设为truecolor,表明 kitty 支持 1600 万色 |
KITTY_LISTEN_ON | 当启用了远程控制 且通过kitty --listen-on或listen_on使用 socket 时设置,内容为 socket 路径,使远程命令无需再写kitten @ --to;也可能为fd:num形式的文件描述符,此时远程控制通信走该 fd |
KITTY_PIPE_DATA | 使用launch --stdin-source将屏幕/回滚内容管道给子程序时,描述屏幕布局的数据 |
KITTY_CHILD_CMDLINE | 在终端响铃触发command_on_bell回调程序时,设为该 kitty window 中子进程的命令行 |
KITTY_COMMON_OPTS | 运行 kittens 时设置,包含若干常用 kitty 选项的值,使 kittens 无需加载kitty.conf即可使用 |
KITTY_SHELL_INTEGRATION | 启用 shell 集成时设置,随后被 shell 集成脚本自动移除 |
KITTY_SI_RUN_COMMAND_AT_STARTUP | 设为一个表达式,shell 集成脚本在 shell 启动后会对其执行eval;注意该变量在 kitty 自身启动环境中的取值会被忽略,最适用于launch动作的--env参数 |
ZDOTDIR | 对 zsh 启用 shell 集成时设置,使 zsh 自动加载集成脚本 |
XDG_DATA_DIRS | 对 fish 启用 shell 集成时设置,使 fish 自动加载集成脚本 |
ENV | 对 bash 启用 shell 集成时设置,使 bash 自动加载集成脚本 |
KITTY_OS | 在kitty.conf使用 include 指令时设置,取值linux、macos、bsd,便于按操作系统 include 不同配置 |
KITTY_HOLD | kitty 因--hold标志运行 shell 时设为1,可在 shell rc 文件中据此定制行为 |
KITTY_SIMD | 设为128使用 128 位向量寄存器、256使用 256 位;其他值禁用 SIMD。会覆盖 CPU 探测,不匹配会导致 SIGILL |
shell 集成相关变量(ZDOTDIR、XDG_DATA_DIRS、ENV、KITTY_SHELL_INTEGRATION)的注入逻辑集中在 kitty/shell_integration.py:对 fish 会拼接XDG_DATA_DIRS(第 19-26 行),对 zsh 会把ZDOTDIR指到集成脚本目录并保存原值(第 52-69 行),最终在 第 245 行 设置KITTY_SHELL_INTEGRATION标记。集成脚本本体位于 shell-integration/ 目录,按 bash/zsh/fish 分目录存放。
7. 源码级验证:子进程环境变量如何被组装
理解上述变量“何时、为何”被设置,最有价值的入口是 kitty/child.py 中ChildProcess.get_final_env()(第 368-428 行)。其组装顺序可概括为:
- 以
default_env()为基线并叠加本次启动附加的环境(self.env); - 无条件写入核心变量:
TERM(取term选项)、COLORTERM=truecolor、KITTY_PID、KITTY_PUBLIC_KEY(取自boss.encryption_public_key)、KITTY_INSTALLATION_DIR(第 382-404 行); - 按
terminfo_type选项分支处理TERMINFO:path模式写入 terminfo 目录路径,direct模式写入 base64 编码的 terminfo 数据(第 398-403 行); - 若启用了 shell 集成,调用
modify_shell_environ注入ZDOTDIR/ENV/XDG_DATA_DIRS等变量; - 若本次启动带有启动命令,写入
KITTY_SI_RUN_COMMAND_AT_STARTUP(第 417-427 行)。
KITTY_LISTEN_ON的三种形态同样可见于此处:通过 fd 传递时设为fd:<num>(第 386-387 行),否则在 kitty 处于监听状态时写入boss.listening_on的 socket 地址,再否则显式删除该变量,防止陈旧值泄漏给子进程。KITTY_WINDOW_ID的注入则发生在窗口层(kitty/tabs.py 中按窗口 id 写入子进程环境),供kitty @远程控制命令定位目标窗口。
此外,两个“kittens 特供”变量在 kitty/boss.py 中组装:KITTY_COMMON_OPTS以 JSON 序列化常用选项(第 2555 行),KITTY_PIPE_DATA以scrolled_by:cursor_x,cursor_y:lines,columns格式描述屏幕布局(第 3064 行),供 docs/pipe.rst 所述的管道功能消费。
8. 实战要点与验证方式
- 远程控制的免
--to用法:在启用了listen_on的 kitty 中运行程序,直接echo $KITTY_LISTEN_ON即可拿到 socket 路径或 fd 描述符;远程命令的完整协议见 docs/rc_protocol.rst 与 docs/remote-control.rst。 - SSH 无交互认证:设置
SSH_ASKPASS后,ssh kitten 默认复用该程序获取凭据,行为细节与askpass选项见 docs/kittens/ssh.rst。 - 配置调试:kitty 提供配置调试支持,环境变量解析与配置查找逻辑可对照 kitty/debug_config.py 与 kitty/constants.py 阅读;测试用例 kitty_tests/datatypes.py 中还演示了通过
KITTY_CONFIG_DIRECTORY指向临时目录来隔离配置的场景(第 685-719 行)。 - shell 内自检:在 kitty 窗口中执行
echo $KITTY_WINDOW_ID $KITTY_PID $TERM $COLORTERM $KITTY_INSTALLATION_DIR,即可验证本文第 6 节所列变量确实按文档语义被注入;zsh/bash/fish 用户可进一步确认ZDOTDIR、ENV/XDG_DATA_DIRS已被指向 kitty 的 shell 集成脚本目录。
本文所有术语定义与环境变量清单以 docs/glossary.rst 为准,源码引用路径均位于当前仓库根目录下,可按文中相对路径继续深入阅读。
【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考