MacOS X: Wie kann ich eine praktische Verknüpfung zum Öffnen dieses Ordners in iTerm erstellen?


12

Ich denke, der Titel gibt genau an, was ich tun möchte. Ich möchte eine Verknüpfung oder sogar eine Schaltfläche im Finder, die einen neuen iTerm-Tab startet und die Position in die Position ändert, die ich im Finder geöffnet habe. Irgendwie open .umgekehrt. :-)

Vielen Dank, Malax

Antworten:



10

Dieses AppleScript funktioniert für mich:

-- 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
Ich denke, das sollte die akzeptierte Antwort sein.
Dhilipsiva

8

Mit den anderen Antworten auf dieser Seite habe ich eine App erstellt, die in die Finder-Taskleiste gezogen werden kann.

Sie können es hier herunterladen: https://github.com/rc1/iTermTo


1
Exzellente Arbeit! Funktioniert perfekt. Dies sollte die akzeptierte Antwort sein.
rcd

1
Ich stimme zu - scheint perfekt zu funktionieren. Zip herunterladen. Ziehen Sie die Anwendung zum Installieren in den Anwendungsordner. Ziehen Sie die Anwendung zur Finder-Symbolleiste für die praktische Verknüpfung.
Justingordon

3

Dies ist in iTerm2 ab Version 3.1.0 integriert.

So verwenden Sie die Funktionalität:
Klicken Sie im Finder mit der rechten Maustaste auf einen Ordner -> Dienste -> Neues iTerm2-Fenster

Hinweis: Das ServicesUntermenü befindet sich ganz unten im Kontextmenü.

Referenz
Zu diesem Link klicken anzeigen Ältere Versionen , dann unter iTerm2 3.1.0 Klick anzeigen Changelog und Look für Dienstleistungen , werden Sie diese finden:

Unterstützung für Finder-Dienste hinzufügen. Sie können mit der rechten Maustaste in den Finder klicken, um iTerm2 an diesem Ort zu starten.


2

Schauen Sie sich das cdtoProjekt an, das unter https://github.com/jbtule/cdto "Finder Toolbar App gehostet wird , um das aktuelle Verzeichnis im Terminal (oder iTerm, X11) zu öffnen die Symbolleiste des Finder-Fensters. "


Aber es öffnet zwei iTerms-Fenster, die nach einer Weile sehr ärgerlich sind.
Mike Lischke

1

Der Vollständigkeit halber war das, was für mich funktionierte, bevor ich diese Frage fand:

  • new_tab.sh (AppleScript von bash script) an eine reine AppleScript-Lösung angepasst .
  • dann von der Applescript Editor-> File-> Export-> File Format = .app.
  • Ziehen Sie .appdie Symbolleiste des Finders per Drag & Drop .

Dies führt zu einer Finder-Symbolleistenschaltfläche, die das aktuelle Verzeichnis auf einer neuen iTerm2Registerkarte öffnet . XtraFinder bietet eine solche Schaltfläche an, öffnet jedoch neue Fenster.

Eine ähnliche Lösung für die Verwendung von Diensten finden Sie hier , die auf noch verwandte AppleScript-Lösungen verweist:

Mein angepasstes AppleScript ist:

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

Diese Lösung wurde in diesem knopfbezogenen Thread kommentiert .

Dank der obigen Antwort von iTermTo .


1

Ich denke, es liegt daran, dass sich die Interna von iTerm geändert haben, aber keine der Lösungen hat für mich funktioniert. Was tat, war der folgende Code:

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

Oder verwenden Sie Automator als Suchdienst:

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

Mit iTerm:

Iterm Preferences und unter der Registerkarte Profiles gehen Sie zur Unterregisterkarte General, setzen Sie Working Directory auf Reuse previous session's directory.


0

Hier ist ein vereinfachtes Skript, das immer eine neue Registerkarte öffnet (wie Bulljits Skript):

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

Wenn das Skript vorhandene Registerkarten wiederverwenden soll, ersetzen Sie den tell current terminalBlock durch Folgendes:

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

Dies funktioniert jedoch nicht, wenn beispielsweise die aktuelle Sitzung ausgelastet ist oder ein less- oder vim-Prozess ausgeführt wird.

Wenn Sie das Skript in einen try-Block einschließen, schlägt es im Hintergrund fehl. reopenÖffnet ein neues Terminalfenster, wenn keine sichtbaren Fenster vorhanden sind oder wenn nur zum Beispiel das Einstellungsfenster geöffnet ist. Finder hat auch eine insertion locationEigenschaft, die normalerweise target of Finder window 1oder der Desktop ist. Es gibt jedoch einen Fehler in 10.7 und höher, bei dem häufig auf ein anderes Fenster als das vorderste Fenster verwiesen wird.

Einige mögliche Probleme mit dem Skript von Bulljit:

  • Es hat eine Verzögerung von einer Sekunde. Ich weiß nicht, ob es für etwas benötigt wird, aber ich brauchte keine Verzögerungen, als ich dieses Skript testete.
  • Wenn Sie iTerm so eingestellt haben, dass neue Fenster im Vollbildmodus geöffnet werden und keine offenen Fenster vorhanden sind, wird ein nicht im Vollbildmodus ausgeführtes Fenster geöffnet.
  • Finder wird angewiesen, den Pfad von front window( window 1) abzurufen, der ein Informationsfenster oder ein Voreinstellungsfenster sein kann. Finder window 1wäre immer ein Dateibrowserfenster.
  • Es ändert das Verzeichnis in, /wenn im vordersten Finder-Fenster eine Ansicht ohne Pfad angezeigt wird (wie in der Netzwerkansicht).

Ich bevorzuge es jedoch, nur eine Funktion wie diese zu verwenden:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.