MacOS X: come avere un comodo collegamento "Apri questa cartella in iTerm"?


12

Penso che il titolo indichi esattamente cosa voglio fare. Voglio una scorciatoia o anche un pulsante all'interno del Finder che attiva una nuova scheda iTerm e cambia la posizione nella posizione che ho aperto in Finder. Una specie di open .retromarcia. :-)

Grazie Malax

Risposte:



10

Questo applecript funziona per me:

-- 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

1
Penso che questa dovrebbe essere la risposta accettata.
dhilipsiva,

8

Utilizzando le altre risposte in questa pagina ho creato un'app che può essere trascinata nella barra delle attività del Finder.

Puoi scaricarlo da qui: https://github.com/rc1/iTermTo


1
Lavoro eccellente! Funziona perfettamente. Questa dovrebbe essere la risposta accettata.
rcd

1
Sono d'accordo - sembra funzionare perfettamente. Scarica zip. Trascina l'applicazione nella cartella Applicazioni per installarla. Trascina l'applicazione sulla barra degli strumenti del Finder per il comodo collegamento.
justingordon,

3

È integrato in iTerm2 dalla versione 3.1.0.

Per utilizzare la funzionalità:
nel Finder fai clic con il pulsante destro del mouse su una cartella -> Servizi -> Nuova finestra iTerm2 qui

Nota: il Servicessottomenu si trova nella parte inferiore del menu di scelta rapida.

Riferimento
A questo link fai clic su Mostra versioni precedenti , quindi in iTerm2 3.1.0 fai clic su Mostra registro modifiche e cerca i servizi , troverai questo:

Aggiungi supporto per i servizi di ricerca. Puoi fare clic con il tasto destro nel Finder per avviare iTerm2 in quella posizione.


2

Dai un'occhiata al cdtoprogetto ospitato su https://github.com/jbtule/cdto "App Finder Toolbar per aprire la directory corrente nel Terminale (o iTerm, X11). Questa app è progettata (inclusa la sua icona) per essere collocata in barra degli strumenti della finestra del Finder. "


Ma apre due finestre iTerms che è molto fastidioso dopo un po '.
Mike Lischke,

1

Solo per completezza, prima di trovare questa domanda quello che ha funzionato per me è stato:

  • adattato new_tab.sh (AppleScript rilasciato dallo script bash) a una soluzione solo per AppleScript.
  • quindi dal Applescript Editor-> File-> Export-> File Format = .app.
  • trascina il mouse .appsulla barra degli strumenti del Finder.

Ciò si traduce in un pulsante della barra degli strumenti del Finder che apre la directory corrente in una nuova iTerm2scheda. XtraFinder offre tale pulsante, ma apre nuove finestre.

Una soluzione simile che utilizza i servizi è disponibile qui , che collega a soluzioni AppleScript ancora più correlate:

Il mio AppleScript adattato è:

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

Questa soluzione è stata commentata in questo thread relativo ai pulsanti .

Grazie alla risposta iTermTo sopra.


1

Suppongo sia perché le parti interne di iTerm sono cambiate, ma nessuna delle soluzioni ha funzionato per me. Quello che ha fatto è stato il seguente codice:

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

O usando Automator come servizio di ricerca:

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

0

Con iTerm:

Preferenze Iterm e nella scheda Profili, vai alla sottoscheda Generale, imposta Directory di lavoro su "Riutilizza la directory della sessione precedente".


0

Ecco uno script semplificato che apre sempre una nuova scheda (come lo script di 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 vuoi che lo script riutilizzi le schede esistenti, sostituisci il tell current terminalblocco con qualcosa del genere:

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

Ma ciò non funzionerà se, ad esempio, la sessione corrente è occupata o esegue un processo less o vim.

Avvolgere lo script in un blocco try lo fa fallire silenziosamente. reopenapre una nuova finestra del terminale se non ci sono finestre visibili o se solo per esempio la finestra delle preferenze è aperta. Finder ha anche una insertion locationproprietà, che di solito è target of Finder window 1il desktop. Ma c'è un bug in 10.7 e versioni successive in cui spesso si riferisce a qualche altra finestra rispetto alla finestra più in primo piano.

Alcuni potenziali problemi con la sceneggiatura di bulljit:

  • Ha un ritardo di un secondo. Non so se è necessario per qualcosa, ma non ho avuto bisogno di ritardi quando ho testato questo script.
  • Se hai impostato iTerm per aprire nuove finestre a schermo intero e non ci sono finestre aperte, si apre una finestra non a schermo intero.
  • Indica a Finder di ottenere il percorso di front window( window 1), che può essere una finestra di informazioni o una finestra delle preferenze. Finder window 1sarebbe sempre una finestra del browser dei file.
  • Cambia la directory in /se la finestra del Finder in primo piano sta visualizzando una vista che non ha un percorso (come la vista Rete).

Preferisco usare una funzione come questa però:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.