Я пытаюсь имитировать функцию shelltitle
GNU Screen в tmux. В моем ~/.bashrc
есть следующее:
if [[ "$TERM" == screen* ]]; then SCREEN_ESC='\[\ek\e\\\]' else SCREEN_ESC='' fi PS1="\n\w ${SCREEN_ESC}$ "
и следующее в моем ~/.screenrc
:
shelltitle "$ |bash"
Установка shelltitle
делает GNU Screen для поиска новой строки в оболочке и отбрасывает все символы от $PS1
до escape-символа и заменяет его первым найденным после него словом. Это более четко объясняется на странице руководства:
Вот как это работает: вы должны изменить приглашение командной строки для вывода нулевой последовательности-escape-последовательности (<esc> k <esc>) в качестве части вашего приглашения. Последняя часть вашего приглашения должна быть такой же, как строка, указанная для части поиска заголовка. Как только это настроено, на экране будет использоваться последовательность escape-последовательности заголовка, чтобы очистить предыдущее имя команды и подготовиться к следующей команде. Затем, когда новая строка получена из оболочки, выполняется поиск в конце подсказки. Если он найден, он будет захватывать первое слово после строки и будет использовать его в качестве имени команды. Если имя команды начинается с экрана «!», «%» Или «^», то первое слово в следующей строке (если найдено) будет использоваться в качестве предпочтительного имени.
Это отличается от set-option -g set-titles on
tmux set-option -g set-titles on
которых только фиксируется имя процесса. Таким образом, скрипт script.py
на Python будет называться как script.py
на экране (который так мне нужен), тогда как он будет называться как python
в tmux (чего я не хочу).
Я знаю, что можно переименовать окна tmux :
printf '\033kWINDOW_NAME\033\\'
Поэтому мне было интересно, есть ли какой-то способ, которым я могу альтернативно позволить tmux знать, что я ввел новую команду. Если есть какой-то способ, я могу PROMPT_COMMAND
команду, я мог бы использовать PROMPT_COMMAND
Bash для этого. Есть идеи?