MacOS X: Como usar um atalho útil "Abrir esta pasta no iTerm"?

12

Eu acho que o título indica exatamente o que eu quero fazer. Quero um atalho ou mesmo um botão no Finder que inicie uma nova guia iTerm e altere o local para o local que abri no Finder. Algum tipo de ordem open .inversa. :-)

Obrigado Malax

Malax
fonte

Respostas:

10

Este AppleScript funciona para mim:

-- script was opened by click in toolbar
on run
tell application "Finder"
    try
        set currFolder to (folder of the front window as string)
    on error
        set currFolder to (path to desktop folder as string)
    end try
end tell
CD_to(currFolder, false)
end run

-- script run by draging file/folder to icon
on open (theList)
set newWindow to false
repeat with thePath in theList
    set thePath to thePath as string
    if not (thePath ends with ":") then
        set x to the offset of ":" in (the reverse of every character of thePath) as string
        set thePath to (characters 1 thru -(x) of thePath) as string
    end if
    CD_to(thePath, newWindow)
    set newWindow to true -- create window for any other files/folders
end repeat
return
end open

-- cd to the desired directory in iterm
on CD_to(theDir, newWindow)
set theDir to quoted form of POSIX path of theDir as string
tell application "iTerm"
    activate
    delay 1
    -- talk to the first terminal 
    try
        set myterm to the first terminal
    on error
        set myterm to (make new terminal)
    end try

    tell myterm
        try
            -- launch a default shell in a new tab in the same terminal 
            launch session "Default Session"
        on error
            display dialog "There was an error creating a new tab in iTerm." buttons {"OK"}
        end try
        tell the last session
            try
                -- cd to the finder window
                write text "cd " & theDir
            on error
                display dialog "There was an error cding to the finder window." buttons {"OK"}
            end try
        end tell
    end tell
end tell
end CD_to
bulljit
fonte
1
Eu acho que essa deve ser a resposta aceita.
Dhilipsiva 06/07/2013
8

Usando as outras respostas desta página, criei um aplicativo que pode ser arrastado para a barra de tarefas do localizador.

Você pode baixá-lo aqui: https://github.com/rc1/iTermTo

Ross
fonte
1
Excelente trabalho! Funciona perfeitamente. Essa deve ser a resposta aceita.
precisa
1
Eu concordo - parece funcionar perfeitamente. Faça o download do zip. Arraste o aplicativo para a pasta Aplicativos para instalar. Arraste o aplicativo para a barra de ferramentas do localizador para obter o atalho útil.
justingordon
3

Isso é incorporado ao iTerm2 a partir da versão 3.1.0.

Para usar a funcionalidade:
no Finder, clique com o botão direito do mouse em uma pasta -> Serviços -> Nova janela do iTerm2 aqui

Nota: o Servicessubmenu fica na parte inferior do menu do botão direito.

Referência
Neste link, clique em Mostrar versões mais antigas e , em iTerm2 3.1.0, clique em Mostrar registro de alterações e procure por serviços , você encontrará:

Adicione suporte para serviços de localização. Você pode clicar com o botão direito do mouse no Finder para iniciar o iTerm2 nesse local.

Brad Cupit
fonte
2

Dê uma olhada no cdtoprojeto hospedado no https://github.com/jbtule/cdto "aplicativo Finder Toolbar para abrir o diretório atual no Terminal (ou iTerm, X11). Este aplicativo foi projetado (incluindo seu ícone) para ser colocado em barra de ferramentas da janela do localizador ".

Lloyd Dewolf
fonte
Mas abre duas janelas do iTerms, o que é altamente irritante depois de um tempo.
Mike Lischke
1

Apenas por completude, antes de encontrar essa pergunta, o que funcionou para mim foi:

  • adaptou new_tab.sh (AppleScript emitido por bash script) a uma solução somente AppleScript.
  • então a partir do Applescript Editor-> File-> Export-> File Format = .app.
  • arraste e .appsolte a barra de ferramentas do Finder.

Isso resulta em um botão da barra de ferramentas do Finder, que abre o diretório atual em uma nova iTerm2guia. O XtraFinder oferece esse botão, mas abre novas janelas.

Uma solução semelhante usando serviços pode ser encontrada aqui , com links para soluções AppleScript ainda mais relacionadas:

Meu AppleScript adaptado é:

try
    tell application "iTerm2"
        tell the last terminal
            launch session "Default Session"
            tell the last session
                tell i term application "Finder"
                    set cur_dir to (the target of the front Finder window) as string
                end tell
                set cur_dir to POSIX path of cur_dir
                write text "cd " & cur_dir
            end tell
        end tell
     end tell
end try

Esta solução foi comentada neste tópico relacionado ao botão .

Graças à resposta do iTermTo acima.

Ioannis Filippidis
fonte
1

Eu acho que é porque o interior do iTerm mudou, mas nenhuma das soluções funcionou para mim. O que fez foi o seguinte código:

tell application "Finder"
    set cur_dir to POSIX path of ((the target of the front Finder window) as string)
end tell
tell application "iTerm"
    tell (create window with default profile)
        write current session text "cd " & quoted form of cur_dir
    end tell
end tell

Ou usando o Automator como um serviço localizador:

on run {input, parameters}
    tell application "Finder"
        set cur_dir to POSIX path of (input as string)
    end tell
    tell application "iTerm"
        tell (create window with default profile)
            write current session text "cd " & quoted form of cur_dir
        end tell
    end tell
end run
fikovnik
fonte
0

Com o iTerm:

Em Preferências de Iterm e na guia Perfis, vá para a subguia Geral, defina Diretório de Trabalho como “Reutilizar o diretório da sessão anterior”.

coto
fonte
0

Aqui está um script simplificado que sempre abre uma nova guia (como o script de bulljit):

try
    tell application "Finder"
        if number of Finder windows is 0 then
            set p to POSIX path of (desktop as alias)
        else
            set p to POSIX path of (target of Finder window 1 as alias)
        end if
    end tell
    tell application "iTerm"
        reopen
        tell current terminal
            tell (launch session "Default Session")
                write text "cd " & quoted form of p
            end tell
        end tell
        activate
    end tell
end try

Se você deseja que o script reutilize as guias existentes, substitua o tell current terminalbloco por algo assim:

tell current session of current terminal
    write text "cd " & quoted form of p
end tell

Mas isso não funcionará se, por exemplo, a sessão atual estiver ocupada ou executando um processo less ou vim.

A quebra do script em um bloco try faz com que ele falhe silenciosamente. reopenabre uma nova janela do terminal se não houver janelas visíveis ou se apenas por exemplo a janela de preferências estiver aberta. O Finder também possui uma insertion locationpropriedade, que geralmente é target of Finder window 1a área de trabalho. Mas há um bug na versão 10.7 e posterior, em que geralmente se refere a alguma outra janela além da janela da frente.

Alguns problemas em potencial com o script de bulljit:

  • Tem um atraso de um segundo. Não sei se é necessário para alguma coisa, mas não precisei de atrasos ao testar esse script.
  • Se você configurou o iTerm para abrir novas janelas em tela cheia e não houver janelas abertas, ele abrirá uma janela que não seja de tela inteira.
  • Diz ao Finder para obter o caminho de front window( window 1), que pode ser uma janela de informações ou uma janela de preferências. Finder window 1sempre seria uma janela do navegador de arquivos.
  • Ele altera o diretório para /se a janela do Finder mais à frente estiver exibindo uma exibição que não possui um caminho (como a exibição de rede).

Eu prefiro apenas usar uma função como esta:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
Lri
fonte