Use gnome-terminal e tmux juntos: como iniciar com o diretório de trabalho mais recente?

0

Atualmente estou usando o gnome-terminal e o tmux juntos: toda vez que eu inicio o gnome-terminal, um tmux é iniciado:

#!/bin/bash

args=()
if type tmux > /dev/null; then
  args+=('-e' "tmux new-session")
fi

exec gnome-terminal "${args[@]}" "$@"

Mas como posso iniciar o tmux com o diretório de trabalho da última sessão ativa do tmux se houver uma sessão tmux ativa existente?

    
por xuhdev 08.10.2016 / 06:59

1 resposta

1

O que pode ajudar é o comando list-panes , que você pode usar com -a para todos. Por padrão, ele não fornece o que você deseja, mas você pode fornecer um formato e incluir, por exemplo, o pane_current_path e, talvez, outros valores suficientes para decidir qual dos painéis você deseja copiar. Por exemplo

$ tmux list-panes -a -F 'uniq=#D pane=#P title="#T" sess=#S windex=#I winnam=#W activ=#{pane_active} pwd=#{pane_current_path}'
uniq=%0 pane=0 title="myhost 2" sess=0 windex=0 winnam=bash activ=0 pwd=/home/meuh
uniq=%1 pane=1 title="myhost 3" sess=0 windex=0 winnam=bash activ=1 pwd=/home/meuh
uniq=%2 pane=0 title="myhost 4" sess=1 windex=0 winnam=bash activ=0 pwd=/tmp
uniq=%4 pane=1 title="myhost 5" sess=1 windex=0 winnam=bash activ=1 pwd=/usr/lib
uniq=%3 pane=0 title="myhost 1" sess=2 windex=0 winnam=bash activ=1 pwd=/tmp

O significado de cada variável, por exemplo #D para unique pane id , é descrito na página man em FORMATS. Você pode escolher o maior desses IDs como o painel mais recente e o valor pwd= como o diretório desejado. Por exemplo, canalize o comando tmux acima em

 | awk '{id=substr($1,7)+0;if(id>max){max=id;pwd=$NF}} END{print substr(pwd,5)}'

Usando a variável window_activity em tmuxes posteriores, que fornece o tempo em segundos desde a época da última atividade na janela, você pode simplificar o acima para listar apenas este valor e o caminho atual e pegar o caminho para o valor máximo da atividade:

tmux list-panes -a -F '#{window_activity} #{pane_current_path}' |
awk '{time=$1+0;if(time>max){max=time;pwd=substr($0,length($1)+2)}} END{print pwd}'
    
por 08.10.2016 / 16:49