Tmux: Как настроить tmux для отображения текущего рабочего каталога панели в строке состояния?

Я новичок в tmux, и я пытаюсь изменить файл tmux.conf, чтобы отразить левую часть строки состояния:

[SessionName] [CurrentPane] [CurrentWorkingDirectory]

Я могу отображать SessionName и CurrentPane. Однако я не могу показать CurrentWorkingDirectory.

Я пробовал несколько опций #(shell command):

  • #(tmux select-pane -t :.#P; pwd):   Но это печатает другую переменную $PWD, которая отражает НЕ  текущий каталог сеанса bash на текущей панели.

  • #(tmux select-pane -t :.#P; tmux send-keys pwd Enter)       Во-первых, хотя он напечатал CurrentWorkingDirectory, если я       в терминале. Он печатает это в терминале и НЕ в статусе       бар, как я хочу. Во-вторых, он вводил "pwd Enter" каждые 15       секунд, был ли я на терминале, что было       если вы не так быстро (как я).

Я пробовал эти параметры, но безрезультатно, возможно ли делать то, что я хочу? и как?

Ответ 1

Для этого есть переменная, которая, похоже, не находится в man-странице, но упоминается в версии разработки. Для меня он работает в версии 1.8 для tmux.

set -g status-left "#{pane_current_path}"

Обратите внимание, что он также работает, когда вы помещаете его в статус окна. В каждом статусе окна будут указаны соответствующие рабочие каталоги.

setw -g window-status-format "#{pane_current_path}".

Ответ 2

Я не уверен, как это сделать в bash, но в zsh есть крючок, который запускается перед каждой командой. В вашем .zshrc:

precmd () {
    tmux set -qg status-left "#S #P $(pwd)"
}

Эта команда будет запускать команду tmux при каждом запуске команды. Надеюсь это поможет. Поскольку bash не имеет precmd, я не уверен, как это сделать.

Ответ 3

К сожалению, предлагаемое решение не работает для версии 1.7 - "официальная версия" для OpenSuse 12.3, но мне удалось найти решение:
   В /etc/tmux.conf:

setw -g window-status-current-format "#T(#I:#W#F)"  
setw -g window-status-format "#T(#I:#W#F)"  

Здесь #T - указывает текущий заголовок панели, который можно установить с помощью некоторой escape-последовательности. Для этого при каждой команде оболочки поставьте где-то в .bashrc:

[[ -n "$TMUX" ]] && PROMPT_COMMAND='echo -n -e "\e]2;${PWD/${HOME}/~}\e\\"'  

Это работает для меня на OpenSuse 12.3, tmux 1.7, bash 4.2.53.