No tmux como faço para criar um novo painel com o pwd direito durante a execução de um comando no painel pai?

1

Se eu criar um novo painel B a partir do painel A e não estiver executando nenhum comando em A, então B será criado com o mesmo pwd que A, que é o que eu quero. No entanto, se ao criar o novo painel estou executando um comando bash (um alias de 3 comandos encadeados, na verdade) em um que temporariamente muda pwd então B é criado em qualquer pwd está ativo em um no momento eu pressionar os atalhos de tecla em vez de o pwd estou executando o comando de.

1) Existe uma maneira de forçar o tmux a criar um novo painel usando o pwd antes de executar tal comando? 2) Se 1) não é possível qual é a maneira correta de executar o comando para que o pwd seja preservado?

Estou usando o tmux 1.8 com este .tmux.conf:

link

Obrigado

    
por Juan Alonso 25.05.2016 / 10:01

3 respostas

2

apenas forneça o diretório que você deseja manualmente quando criar a divisão

:split-window -c "/dir/you/want"

por exemplo,

<prefix> , : , split-window -c "/var/lib/apt"

Explicação

split-window é o comando tmux para criar uma divisão, ela usa várias opções para permitir que você especifique o tamanho, interpolações de sequência e -c para especificar o diretório de trabalho.

de man tmux | less '+/^\s*split-window'

 split-window [-bdhvP] [-c start-directory] [-l size | -p percentage] [-t target-pane] [shell-command] [-F format]
               (alias: splitw)

Create a new pane by splitting target-pane:
-h does a horizontal split and -v a vertical split; if neither is specified, -v is assumed.
The -l and -p options specify the size of the new pane in lines (for vertical split) or in cells (for horizontal split), or as a percentage, respectively. The -b option causes the new pane to be created to the left of or above target-pane. All other options have the same meaning as for the new-window command.

você também pode vincular o comando, por exemplo

bind '"' split-window -v -c "$PWD"  # Split panes horizontal
    
por 25.05.2016 / 11:34
0

Você está com dois problemas:

  1. tmux tenta obter o diretório de trabalho atual do grupo de processos atual (retornado por tcgetpgrp(3) ou TIOCGPGRP ioctl), portanto, variáveis como #{pane_current_path} sempre refletirão alterações de diretório temporário no comando atualmente em execução.

  2. O tmux versão 1.8 não expande nenhum #{variables} no argumento -c para split-window . Tentar usar qualquer expansão lá abre o novo painel em / . Isso mudou entre 1,8 e 1,9 .

Você pode contornar o primeiro usando a variável #{pane_title} (alias #T ), porque isso pode ser atualizado sob demanda com uma sequência de escape:

When a pane is first created, its title is the hostname. A pane's title can be set via the OSC title setting sequence, for example:

$ printf '3]2;My Title3\'

Você pode usar um PS1 personalizado para enviar essa sequência para tmux (você pode ter visto um truque semelhante usado para alterar o título do xterm):

if [ -n "$TMUX" ] ; then
  PS1='\[\e]2;$PWD\e\\]'$PS1
fi

Isso responderá a cd (ou pushd etc.) no bash interativo, mas não a outros processos em primeiro plano - incluindo quaisquer aliases de bash, desde que eles não exibam um prompt.

Em seguida, altere a combinação de teclas no seu tmux.conf para:

bind-key '"' split-window -c "#T"

Mas você provavelmente precisará atualizar para uma versão mais recente do tmux.

    
por 31.05.2016 / 15:16
0
bind % split-window -h -c "#{pane_current_path}"
    
por 10.06.2018 / 00:30

Tags