Oh My Posh Kali主题自定义:调用bat生成窗口宽度线条异常问题
解决Oh My Posh调用bat脚本时窗口宽度不更新的问题
问题背景
修改Oh My Posh的Kali主题时,添加了command类型的prompt段,通过cmd调用center.bat脚本,想在主提示符上方生成与窗口等宽的线条(因PowerShell兼容性问题选择cmd执行)。单独运行center.bat能正常匹配当前窗口宽度,但通过omp.json调用时,线条始终固定为120字符宽,和实际窗口宽度不符。尝试给bat传宽度参数,单独执行有效但主题里无效;用PowerShell的$Profile实现,仅在提示符启动时生效,窗口调整后不会更新宽度。
可行解决方案
方案1:修改bat脚本,实时获取窗口宽度
不要依赖外部传参,直接在center.bat内部获取当前窗口的宽度:
@echo off setlocal enabledelayedexpansion :: 提取当前窗口的列数(宽度) for /f "tokens=2" %%a in ('mode con ^| findstr "Columns"') do set "cols=%%a" :: 生成对应长度的线条 set "line=" for /l %%i in (1,1,%cols%) do set "line=!line!-" echo !line! endlocal
这样脚本每次执行都会实时读取当前窗口宽度,不管是单独运行还是被Oh My Posh调用,都能生成匹配的线条。
方案2:用PowerShell命令替代bat脚本
既然是在PowerShell环境下使用Oh My Posh,直接用PowerShell代码生成线条,绕开cmd调用的环境差异:
在omp.json的prompt配置段中,把command替换为PowerShell命令:
{ "type": "command", "style": "plain", "command": "$cols = $Host.UI.RawUI.WindowSize.Width; '-' * $cols", "newline": true }
每次提示符渲染时,都会实时获取当前PowerShell窗口的宽度,生成对应长度的线条,无需额外bat脚本,也不会有环境宽度不匹配的问题。
失效原因说明
- 主题传参失效:Oh My Posh调用cmd时的环境未继承当前PowerShell的窗口宽度变量,导致传递的参数无效;
$Profile方案失效:$Profile中的代码仅在PowerShell启动时执行一次,窗口调整后不会重新运行,因此无法更新宽度。
内容的提问来源于stack exchange,提问作者Laplace'sDemon
相关产品推荐
相关产品推荐

