我正在尝试编辑 tmux 的左下角状态部分。我想展示
会话:#{session_name}
使用此设置将此字符串的当前最大长度设置为 20
状态左长度 20
这工作正常,但是一旦我输入超过 20 的会话名称(包括“Session:”),tmux 就会截断文本。我想处理整个字符串,以便任何超过 20 个字符的内容都会像这样显示
会话: mysessio...
IE。字符串被修剪为 20 个字符,最后三个字符被替换为点。我有一个正在运行的 bash 脚本,可以做我想做的事情
string="verylongstringfortesting"
lengthLimit=10
if [ ${#string} -gt $lengthLimit ]
then
echo ${string:0:$(($lengthLimit-3))}"..."
fi
我该如何将其嵌入到 tmux.conf 中?我知道 #(shell-command) 并且我尝试过 #(echo #{session_name}) 但似乎没有返回会话名称。
答案1
收集一些信息以帮助寻找解决方案:
不输出
#(echo #{session_name})
任何内容,但#(echo \"#{session_name}\")
显示会话名称,这看起来很有希望,但是......它在引用时起作用的原因是 echo 命令从字面上获取文本
#{session_name}
,其中不带引号,shell 将其视为注释,并且带引号,将其逐字回显到 tmux。命令退出后tmux展开序列这意味着我们无法在 shell 中操作扩展的字符串。
替代方法
尝试设置限制,例如
#7S
将会话名称限制为 7 个字符,始终会应用该限制,但不允许您对其进行测试,因此#7...
即使不需要,也会始终显示省略号,因此这是行不通的尝试直接通过 tmux 命令访问似乎没有获得合理的结果。例如,
tmux list-sessions -F "#{client_session}"
不显示任何内容,并tmux list-clients -F "#{client_session}"
显示每个客户端的会话,但如果您有多个客户端,则没有一种明显的方法来判断哪个客户端正在运行该命令。
我还没有深入研究源代码,但我怀疑 tmux 在知道它可能用于哪个会话之前就运行了该命令。
获得此功能的最佳选择可能是调整源代码。
1.8 版本在 status.c 的第 79 行左右计算长度,并在第 322 行左右status_redraw_get_left(
写入长度。status_redraw(
答案2
这已在 tmux Git HEAD 中修复,请参阅https://github.com/tmux/tmux/issues/11