передача переменной tmux в shell-команду в tmux.conf

Я пытаюсь изменить раздел состояния нижнего левого края tmux. Я бы хотел, чтобы он показывал

Сессия: # {session_name}

Текущая максимальная длина для этой строки устанавливается равной 20, используя этот параметр

статус-левая длина 20

Это отлично работает, но как только я введу имя сеанса длиной более 20 (включая «Сессия:»), tmux просто отключит текст. Я хотел бы обработать всю строку, так что будет отображаться примерно до 20 символов

Сессия: mysessio …

то есть. строка обрезается до 20 символов, а последние три символа заменяются точками. У меня есть рабочий сценарий bash, который мне нравится

string="verylongstringfortesting" lengthLimit=10 if [ ${#string} -gt $lengthLimit ] then echo ${string:0:$(($lengthLimit-3))}"..." fi 

как я могу вставить это в tmux.conf? Я знаю о # (shell-command), и я попробовал # (echo # {session_name}), но это, похоже, не возвращает имя сеанса.

Некоторая информация, собранная, чтобы помочь в поиске решения:

  • Выполнение #(echo #{session_name}) ничего не выводит, но #(echo \"#{session_name}\") показывает имя сеанса, которое выглядит многообещающим, но …

  • Причина, по которой она работает при цитировании, заключается в том, что команда echo буквально получает текст #{session_name} где без кавычек оболочка считает это комментарием, а с кавычками возвращает эхо обратно в tmux. Tmux расширяет последовательность после выхода команды

  • Это означает, что мы не можем манипулировать расширенной строкой внутри оболочки.

Альтернативные подходы

  • Попытка установить предел, например, #7S чтобы ограничить имя сеанса до 7 символов, всегда применяет ограничение, но не позволяет вам его тестировать, поэтому #7... всегда будет показывать многоточие даже тогда, когда оно не требуется, работа

  • Попытка получить доступ напрямую через команды tmux не дает разумных результатов. Например, tmux list-sessions -F "#{client_session}" ничего не показывает, а tmux list-clients -F "#{client_session}" показывает сеансы каждого клиента, но если у вас более одного клиента, t очевидный способ определить, какой из них выполняет команда.

Я еще не углубился в источник, но я подозреваю, что tmux запускает команду до того, как даже зная, на какой сессии она может быть.

Лучше всего использовать эту функцию, чтобы настроить исходный код.

Версия 1.8 вычисляет длину в status_redraw_get_left( около строки 79 status.c и записи ее в status_redraw( по строке 322.

Это исправлено в tmux Git HEAD, см. https://github.com/tmux/tmux/issues/11