资讯动态

WezTerm 配置详解:使用 `strikethrough_position` 精确控制删除线位置

发布时间:2026/9/12 17:16:26 来源:尧图企业网站定制
WezTerm 配置详解使用strikethrough_position精确控制删除线位置【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/weztermstrikethrough_position是 WezTerm 提供的字体渲染微调配置项用于覆盖终端中删除线strikethrough的纵向绘制位置。本文基于官方配置文档并结合仓库源码完整讲解该配置项的取值单位、默认行为、底层实现原理以及它与underline_position、underline_thickness等字体指标配置的关系帮助你针对特定字体或视觉偏好精确调整删除线的渲染效果。配置项概览strikethrough_position是 WezTerm 字体类配置项中的一个可选参数自版本20221119-145034-49b9839f起引入。它在配置中的定义位于 config/src/config.rs#[dynamic(try_from crate::units::OptPixelUnit, default)] pub underline_position: OptionDimension, #[dynamic(try_from crate::units::OptPixelUnit, default)] pub strikethrough_position: OptionDimension,可以看到strikethrough_position与underline_position下划线位置是相邻的两个可选字段二者均通过OptPixelUnit类型从配置值解析为内部统一的Dimension尺寸枚举。它支持在用户配置目录下的wezterm.lua文件中进行设置配置文件的具体加载规则参见 files.md。默认行为继承字体的下划线位置指标当未显式配置strikethrough_position时WezTerm 会使用主字体设计者font designer通过字体度量指定的underline_position下划线位置指标来推导删除线的位置。也就是说删除线并非独立于字体设计而是与下划线共用同一套基础定位逻辑。这一默认推导逻辑在 wezterm-gui/src/utilsprites.rs 中有清晰体现let strike_row match config.strikethrough_position { None { ((cell_height as f64 (metrics.descender.get() - underline_position)) / 2.) as isize } Some(d) d .evaluate_as_pixels(DimensionContext { dpi: fonts.get_dpi() as f32, pixel_max: descender_row as f32 / 2., pixel_cell: cell_height as f32, }) .round() as isize, };其中underline_position的取值同样遵循优先使用配置、否则回退到字体度量的原则见同文件第 100-107 行。而用于双倍行距等场景的简化默认路径with_font_metrics中删除线行号被简单定义为descender_row / 2见 utilsprites.rs。支持的单位与取值方式与 WezTerm 中绝大多数尺寸类配置如underline_position、underline_thickness、cursor_thickness一致strikethrough_position接受数字与带单位字符串两种写法且不同单位具有略微不同的语义。官方文档给出的完整取值规则如下配置写法含义2、2.0或2px位置为 2 像素像素为无后缀数字的默认单位2pt位置为 2 点point会随窗口 DPI 缩放200%取字体自带的underline_position值并乘以 20.5cell取单元格cell高度乘以0.5作为位置这些单位解析逻辑集中在 config/src/units.rs 中配置值先被规范化为Dimension枚举的四种变体Pixels、Points、Percent、Cells随后在需要像素值时通过evaluate_as_pixels换算pub fn evaluate_as_pixels(self, context: DimensionContext) - f32 { match self { Self::Pixels(n) n.floor(), Self::Points(pt) (pt * context.dpi / 72.0).floor(), Self::Percent(p) (p * context.pixel_max).floor(), Self::Cells(c) (c * context.pixel_cell).floor(), } }换算关系可概括为px / 裸数字直接按像素原样使用是最直观、最常见的写法pt按公式点数值 × dpi / 72换算成像素因此在高 DPI 屏幕上会自动变大保证物理尺寸一致%百分比以字体自带underline_position为基准即pixel_max取descender_row / 2200%即取其两倍适合按比例微调而不是指定绝对位置cell以当前字体度量算出的单元格高度为基准乘以系数后得到位置适合按行内比例定位。单位解析与校验细节值得注意的一点是Dimension的Percent变体在内部以1.0 100%存储见 units.rs因此解析器在读取200%时会执行v / 100.的换算见 units.rs。同时如果传入无法识别的字符串解析器会报错提示合法的单位只能是px、%、pt或cell之一见 units.rs。在 utilsprites.rs 中strikethrough_position的换算上下文被设定为dpi取当前字体配置的实际 DPI影响pt单位pixel_maxdescender_row / 2影响%单位即字体下划线位置指标的一半pixel_cell单元格高度影响cell单位。最终计算出的strike_row会被四舍五入为整数像素行号。删除线是如何被绘制的strike_row最终作为RenderMetrics的一个字段见 utilsprites.rs随渲染度量一起传播。实际绘制发生在字形缓存相关的 wezterm-gui/src/glyphcache.rs 中let draw_strike |buffer: mut Image| { for row in 0..metrics.underline_height { buffer.draw_line( Point::new( cell_rect.origin.x, cell_rect.origin.y metrics.strike_row row, ), Point::new( cell_rect.origin.x metrics.cell_size.width, cell_rect.origin.y metrics.strike_row row, ), white, ); } };从这段代码可以看出删除线渲染的两个关键点横线删除线是一条从单元格左边界到右边界的水平线跨越整个单元格宽度线宽删除线的粗细不归strikethrough_position管而是复用underline_height即由underline_thickness决定最小为 1 像素。也就是说strikethrough_position只决定画在哪一行线的粗细由下划线厚度配置间接控制。配置示例下面给出几种常见配置场景。将以下内容写入你的 WezTerm 配置文件如~/.wezterm.lua即可生效local wezterm require wezterm local config {} -- 示例 1将删除线固定画在距单元格顶部 3 像素处 config.strikethrough_position 3 -- 示例 2等价的字符串写法显式声明单位为像素 -- config.strikethrough_position 3px -- 示例 3使用点单位让删除线位置随窗口 DPI 缩放 -- config.strikethrough_position 2pt -- 示例 4以字体自带 underline_position 的 200% 作为位置 -- config.strikethrough_position 200% -- 示例 5将删除线放在单元格高度一半的位置 -- config.strikethrough_position 0.5cell return config与其他字体指标配置的关系strikethrough_position并非孤立存在它与以下两个配置项紧密相关建议一并了解相关文档位于同一目录下underline_position覆盖下划线位置。文档特别提醒字体自带的underline_position往往是一个小的负数如-2、-4表示相对字体基线的偏移。删除线默认正是以它为基准推导的因此修改underline_position会连带影响默认情况下的删除线位置。underline_thickness覆盖下划线基础粗细。它同时被用于渲染分屏分隔线以及诸多自定义字形中的线条也决定了删除线的线宽绘制时逐行以underline_height为高度叠加。三者的实现位置相邻见 config/src/config.rs在渲染管线上则统一由RenderMetrics::new计算、由glyphcache.rs中的draw_underline/draw_strike等闭包消费构成了一套完整的下划线族视觉定制能力。使用建议与注意事项何时需要配置多数情况下字体自带度量已足够美观当使用某些下划线位置异常或删除线贴近/越过文字主体的字体时可用strikethrough_position单独微调而不必影响下划线本身。单位选择策略追求像素级精确时用px或裸数字希望跨 DPI 保持一致观感时用pt希望跟随字体设计比例时用%希望与单元格尺寸挂钩时用cell。负值underline_position常为负值相对基线向上strikethrough_position同样可接受负数可借此将删除线抬高到期望位置。线宽独立若要同时调整删除线的粗细需要借助underline_thickness因为strikethrough_position本身不包含线宽语义。通过合理组合strikethrough_position、underline_position与underline_thickness你可以在 WezTerm 中对文本装饰线进行完整的像素级定制获得与设计稿一致或更符合个人偏好的终端显示效果。【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价