Como faço para o tmux abrir um conjunto de painéis sem inseri-los manualmente?

30

Por isso, quero criar uma sessão tmux específica do projeto que exiba determinados comandos em determinados painéis de forma automática. Seguindo um tutorial on-line e a página tmux man, é isso que eu sugiro para um arquivo de configuração:

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

O resultado é ... nada. tmux inicia com uma única janela e um único painel nessa janela sem nenhum comando executado.

Como eu poderia fazer um arquivo de configuração que realmente me permitisse criar um conjunto de janelas e painéis com determinados comandos pré-executados?

    
por JUST MY correct OPINION 17.10.2010 / 17:02

6 respostas

36

Seu arquivo de configuração está funcionando, mas há algumas complicações.

Comandos de curta duração

Primeiro, os comandos que você está iniciando (instâncias de ls ) terminam de rodar muito rapidamente. As janelas e os painéis dos comandos são criados, mas desaparecem assim que cada comando sai.

Se o seu objetivo é realmente usar esses comandos "one shot" em sua configuração final, provavelmente você deve usar a opção de janela remain-on-exit (e possivelmente a opção de sessão set-remain-on-exit para fornecer um padrão para todas as janelas criadas em a sessão). Quando remain-on-exit é definido para uma janela, não desaparecerá quando o comando sair. Você provavelmente vai querer mapear o respawn-window para uma chave (nota: respawn-window irá reaparecer o comando original; respawn-pane também está disponível em tmux 1.5 para reabrir painéis individuais).

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

Ou, se você não se importar com a sua janela inicial, sendo o número 1 em vez do número 0, podemos evitar alterar o valor global:

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

Se você estava usando apenas ls como um comando placeholder simplificado e você realmente pretende gerar algum tipo de comando interativo em suas janelas / painéis, provavelmente você deve gerar o comando que deseja executar. Se o comando pretendido demorar muito para ser inicializado para ser usado durante o teste tmux , substitua um shell ou outro comando interativo simples (por exemplo, top , sqlite3 , etc.).

new-session é o comando padrão

Segundo, executar tmux sem um argumento de comando (por exemplo, tmux ) é equivalente a usar o comando new-session (por exemplo, tmux é o mesmo que tmux new-session ). Seu .tmux.conf cria uma sessão para suas janelas / painéis ( new é um alias para new-session ) e outra sessão está sendo criada para o comando implícito new-session especificado iniciando tmux sem um argumento de comando. Se você estiver usando a barra de status padrão, verá um [1] no lado esquerdo da barra de status quando estiver na sessão "extra" (a sessão inicial criada no .tmux.conf é o número 0).

Se você quiser evitar a criação da sessão extra, use tmux attach em vez de tmux . Os comandos do seu .tmux.conf serão executados, criando a sessão 0 e, em seguida, o cliente será anexado a essa sessão em vez de criar um novo.

    
por 17.10.2010 / 21:49
9

Não sei se entendi o que você quer dizer com "inserir manualmente", mas é assim que eu faço. Eu escrevi um script "autostart" que meu gerenciador de janelas lança. Contém:

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

em que cada arquivo .session é parecido com isto:

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

Espere, tem mais! Eu tenho um número cada vez maior de arquivos .session que eu carrego com o konsole:

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

onde work_console.tabs é algo como isto:

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

Depois, pressiono F12 para iniciar o konsole.

    
por 26.09.2012 / 08:45
5

Eu encontrei teamocil muito útil para automatizar janelas / sessões do tmux.

É escrito em Ruby, então você precisa instalar.

Aqui está uma configuração de amostra:

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

Você pode ter um arranjo de janelas e divisões.

    
por 27.03.2012 / 22:59
5

Suponha que você queira iniciar 3 tarefas de monitoramento do servidor (aqui ping localhost), não há necessidade de mexer com arquivos de configuração e sessões salvas. Tudo pode ser feito a partir da linha de comando.

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical
    
por 17.07.2015 / 05:38
4

Outra alternativa semelhante ao teamcoil é o tmuxinator , está em desenvolvimento ativo e funciona muito bem. Também é recomendado (e um tipo de revisão) sobre o incrível desenvolvimento do Mouse-Free do tmux: Productive de A estante de livros pragmática .

    
por 29.09.2012 / 22:04
4

**

  • Salvar melhor sua sessão!

** Descobri que, para um administrador preguiçoso como eu, preferia salvar a sessão do tmux, em vez de gastar horas tentando construí-lo perfeitamente. Eu estou administrando mais de 30 servidores, e minhas sessões tmux são dinâmicas, com configuração variando o tempo todo. Foi dor no pescoço, até que eu recentemente descobri tmux-ressuscitar este plugin é ótimo. De uma chance. Atualmente, os repositórios do Ubuntu têm o tmux 1.8, este plugin precisa de 1.9, então você precisaria atualizar manualmente

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

Depois disso, você pode instalá-lo por

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

Em seguida, insira esta linha na parte inferior de ~ / .tmux.conf (se ~ / .tmux.conf não estiver disponível, crie um arquivo vazio)

run-shell ~/clone/path/resurrect.tmux

Eu também adiciono esta linha no final do arquivo ~ / .tmux.conf para que o plugin salve sessões para todos os programas que eu executo

set -g @resurrect-processes ':all:'

Em seguida, recarregue o ambiente do tmux.

tmux source-file ~/.tmux.conf

É isso! Você terminou. Agora, rode o tmux normalmente, redimensione seus painéis, crie novos painéis, crie novas sessões ... etc. Quando estiver satisfeito com a configuração que você alcançou (em várias janelas e várias sessões), basta clicar em ctrl + b e depois em ctrl + s para salvar a sessão. Para testar os resultados, basta matar todos os tmux

killall tmux

Em seguida, execute novamente o tmux

tmux

Então, a partir do tmux, clique em ctrl + b e depois em ctrl + r (para restaurar) Magicamente, todas as janelas, painéis e sessões são restaurados com a mesma geometria e disposição. Espero que isso ajude.

    
por 15.05.2015 / 22:25

Tags