Dividir janela programaticamente com o iTerm?

7

na minha estação de trabalho de desenvolvimento, muitas vezes tenho que iniciar os mesmos comandos todas as manhãs.

zeus start, zeus server(booting rails via zeus) redis-server, e como outros 3.

Eu sei que muitas pessoas diriam tê-las rodando o tempo todo, mas eu faço muito trabalho com minhas próprias coisas e isso me deixa perplexo tendo todas aquelas rodando enquanto estou trabalhando em projetos de trilhos separados.

Existe algum tipo de alias avançado que eu possa fazer que inicie todos eles a partir de um comando, de preferência dividindo a janela programaticamente (como ⌘-D).

Estou usando o iTerm2 com oh-my-zsh.

Eu não me importaria se eles estivessem todos na mesma janela que eu suponho (de alguma forma rodando como processos em segundo plano), mas eu preciso às vezes olhar para a saída, e trabalhar com a saída de cada comando, então não tenho certeza de como isso funcionaria .

Obrigado!

Tallboy
fonte

Respostas:

5

Você pode facilmente chamar isso de iTerm2 diretamente para simular pressionando D:

osascript -e 'tell application "System Events" to key code 2 using command down'

Para que isso funcione, você deseja iniciar os programas em segundo plano, caso contrário, você não poderá executar osascript:

some-command &
osascript -e '…'

A partir daí você vai pousar em uma nova janela iTerm2, então você precisa usar a write textopção no AppleScript para executar outros comandos do shell. Veja aqui para saber mais: Como configuro um AppleScript para abrir uma nova guia iTerm2 e alterar o diretório?

slhck
fonte
Uau, isso é ótimo! Como eu poderia combinar isso no meu script? Eu tentei com && e não funcionou, mas eu provavelmente escrevi errado.
Tallboy
Eu tentei executar um script com apenas esse comando, iniciando-o a partir do iTerm 2 (de dentro do Zsh, a mesma configuração que você), e funcionou sem problemas. Certifique-se de que o iTerm 2 esteja ativo enquanto o comando é executado. Você também pode tentar inserir tell application "iTerm" to activate;antes do outro tellcomando apenas para ter certeza.
slhck
Desculpe, eu deveria ter esclarecido. O script em si funciona perfeito, mas suponho que não tenho certeza como combiná-lo em um grande script zsh que basicamente fazredis-server -> split -> other command -> split -> etc
Tallboy
Ah, entendo o que você quer dizer. Já que você está em uma nova janela (ou painel dividido) depois de executar o primeiro osascript, você precisa executar outros comandos com osascript- eu adicionei um exemplo à minha resposta.
slhck
0

a resposta aqui é um pouco desatualizada .. aqui está um exemplo de script que faz algo parecido:

tell application "iTerm"
    tell current window
        -- create a tab for background db stuff
        create tab with default profile
        tell current session
            write text "mongod &"
            write text "redis-server &"
        end tell
        close current tab

        -- create tab to run aioc server
        create tab with default profile
        tell current session
            write text "title server"
            write text "aactivate"
            write text "arunserver"
            -- split tab vertically to run scheduler
            split vertically with default profile
        end tell

        -- run scheduler
        tell last session of last tab
            write text "title scheduler"
            write text "aactivate"
            write text "ascheduler"
            -- split tab vertically to run main controller
            split vertically with default profile
        end tell

        -- run main_controller
        tell last session of last tab
            write text "title main_controller"
            write text "aactivate"
            write text "amain_controller"
            -- split tab vertically to run aggregator
            split vertically with default profile
        end tell

        tell last session of last tab
            write text "title aggregator"
            write text "aactivate"
            write text "aggregator"
        end tell




    end tell
end tell
aborto
fonte
Algum dos comandos mudou recentemente com atualizações para iterm e High Sierra? Nada está acontecendo quando tento me comunicar com a última guia. Iterm Build 3.1.5
Nick
Na verdade, preciso executar comandos da sessão referenciada retornada split vertically with default profile. Dessa forma, posso interagir com a sessão que foi dividida.
Nick
isso funcionou `` `#! / bin / sh tailBuildLog () {termCMD = $ (cat << - END informa o aplicativo" iTerm "informa a janela atual local newSession informa a sessão atual dividida verticalmente com o comando de perfil padrão" tail -f ./buildLogs / $ 1 "end tell end end tell tell END) osoftware -e" $ termCMD "#echo" $ termCMD "#echo}` ``
Nick