abra uma nova guia no iTerm e execute o comando lá

17

Eu encontrei uma maneira de abrir uma nova guia em iTerm:

newtabi()
{
    osascript -e 'tell application "iTerm" to activate' -e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down'
}

E eu quero executar alguns comandos na nova guia. Que seja comando simples pwd. Como fazer isso?

Se eu correr ...

newtabi && pwd

A nova guia é aberta conforme o esperado, mas o pwdcomando é executado não na nova guia, mas na antiga, onde eu digiteinewtabi && pwd

Eu uso zsh. Meu sistema operacional éOS X 10.8.5

Maxim Yefremov
fonte

Respostas:

16

Use tell session -1 of current terminal to write text "pwd":

activate application "iTerm"
tell application "System Events" to keystroke "t" using command down
tell application "iTerm" to tell session -1 of current terminal to write text "pwd"
Lri
fonte
11
se abriu mais de um iTerms, ele abre nova aba no correto iTerminstância, mas escreve pwdna última guia de primeira instância de iTerm
Maxim Yefremov
2
@efr Você está certo. Eu editei a resposta para mudar terminal 1para current terminal. Agora, ele deve executar o comando na janela atual, em vez da janela que foi aberta primeiro.
Lri
2
Isso não funcionou no mac 10.11.6 com o iTerm2. No editor de scripts, "Fim de linha inesperado, mas identificador encontrado" e "terminal" são destacados
Mike Blandford
11
Isso não funciona mais no macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
KernelSanders 03/02/19
12
osascript \
-e 'tell application "iTerm" to activate' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "ls"' \
-e 'tell application "System Events" to tell process "iTerm" to key code 52'
dan zen
fonte
Eu estou me metendo 148:156: syntax error: Expected end of line but found identifier. (-2741)nisso.
temporary_user_name
4

Pelo menos no macos Mojave, iTerm 3.2.8, se você executar:

$ open -a iTerm .

Ele será adicionado como uma guia à janela atual.

krainboltgreene
fonte
1

Não consegui obter a resposta aceita para o trabalho. Eu também queria passar vários comandos. Isto é o que eu vim com.

newtabi(){  
  osascript \
    -e 'tell application "iTerm2" to tell current window to set newWindow to (create tab with default profile)'\
    -e "tell application \"iTerm2\" to tell current session of newWindow to write text \"${@}\""
}

Exemplo de uso

newtabi pwd
newtabi 'cd ~/ && pwd'
newtabi 'echo \"Hello New Tab\"'

Para ações mais complexas, eu recomendaria dividir os comandos.

code_folder="/path/to/code"

alias project="cd ${code_folder}/my-project/foo && yarn run start"

Então, newtabi project

Marc Barbeau
fonte
Você pode me dizer como posso passar minha corrente pwdpara fazer o comando parecer: `newtabi '$ PWD / foo && yarn run start'?
Raj
11
@Raj, boa pergunta. Pessoalmente, divido os comandos em aliases e / ou funções mais consumíveis. Eu adicionei outro exemplo. Espero que ajude!
Marc Barbeau
Muito obrigado, @Marc!
Raj