2013-05-18 16 views
11

Sono nuovo di tmux e sto cercando di modificare il mio file tmux.conf di avere il lato sinistro della barra di stato evidenzia:Tmux: Come configurare tmux per visualizzare la directory di lavoro corrente di un riquadro sulla barra di stato?

[SessionName] [CurrentPane] [CurrentWorkingDirectory]

sono in grado di visualizzare il SessionName e CurrentPane. Tuttavia non riesco a visualizzare lo CurrentWorkingDirectory.

Ho provato diverse opzioni: #(shell command)

  1. #(tmux select-pane -t :.#P; pwd): Ma questa stampe qualche altra variabile $ PWD che fa NON riflettono la directory corrente della sessione bash nel riquadro corrente.

  2. #(tmux select-pane -t :.#P; tmux send-keys pwd Enter) In primo luogo, anche se ha fatto stampare il CurrentWorkingDirectory se sono in un terminale. Stampa questo nel terminale e NON nello stato bar come piace a me. In secondo luogo, è entrato "pwd Enter" ogni 15 secondi se ero o meno in un terminale, il che era una seccatura a reverse se non è veloce (come sono).

Ho provato queste opzioni ma inutilmente, è possibile fare ciò che voglio? e come?

risposta

15

C'è una variabile per questo, che non sembra essere nella manpage ma è menzionata nella versione di sviluppo. Per me, funziona nella versione 1.8 di tmux.

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

Si noti che funziona anche quando lo si inserisce nello stato della finestra. Ogni stato della finestra menzionerà le rispettive directory di lavoro.

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

Questo rinomina il riquadro solo quando viene creato un nuovo riquadro per me –

4

Non sono sicuro di come farlo in bash, ma in zsh, c'è un hook che viene eseguito prima di ogni comando. Nel vostro .zshrc:

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

Questo verrà eseguito che tmux comando ogni volta che si esegue un comando. Spero che questo ti aiuti. Dal momento che bash non ha un precmd, non sono sicuro di come farlo.

+0

Grazie per il vostro aiuto.Poiché sono principiante con Linux e ho iniziato ad imparare in bash, non voglio passare a zsh a meno che non sia necessario. Da qui il motivo per cui preferisco una soluzione per bash. – rajames

+0

Ho comunque trovato un modo per eseguire un'esecuzione preliminare con bash usando un trucco di [Glyph Lefkowitz] (http://glyf.livejournal.com/63106.html). Una soluzione è stata trovata [qui] (http://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command). Grazie! – rajames

3

Purtroppo, la soluzione proposta non funziona per la versione 1.7 - "versione ufficiale" per openSUSE 12.3, ma sono riuscito a trovare una soluzione:
In /etc/tmux.conf:

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

Qui #T - indica di visualizzare il titolo del riquadro corrente, che può essere impostato con una sequenza di escape. Per fare questo ad ogni comando di shell, mettere da qualche parte nel .bashrc:

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

Questo funziona per me su OpenSuse 12.3, tmux 1.7, bash 4.2.53.

+0

Sembra non funzionare: '-bash: [[-n: comando non trovato' – xApple

+0

Sì, certo! Gli spazi sono richiesti dopo [[e prima]]. Ho copiato una linea dalla finestra del terminale dopo il test e non ho notato che gli spazi in cui questi spazi sono scomparsi durante la visualizzazione. – avb1003

Problemi correlati