MacOS X: Jak mieć przydatny skrót „Otwórz ten folder w iTerm”?


12

Myślę, że tytuł mówi dokładnie, co chcę zrobić. Chcę skrót lub nawet przycisk w Finderze, który uruchamia nową kartę iTerm i zmienia lokalizację na lokalizację otwartą w Finderze. Jakoś open .na odwrót. :-)

Dziękuję, Malax

Odpowiedzi:



10

Ten AppleScript działa dla mnie:

-- 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
Myślę, że to powinna być zaakceptowana odpowiedź.
dhilipsiva

8

Korzystając z innych odpowiedzi na tej stronie, stworzyłem aplikację, którą można przeciągnąć na pasek zadań wyszukiwarki.

Możesz pobrać go stąd: https://github.com/rc1/iTermTo


1
Świetna robota! Działa świetnie. To powinna być zaakceptowana odpowiedź.
rcd

1
Zgadzam się - wydaje się działać idealnie. Pobierz zip. Przeciągnij aplikację do folderu Aplikacje, aby zainstalować. Przeciągnij aplikację na pasek narzędzi wyszukiwarki, aby uzyskać przydatny skrót.
justingordon

3

Jest on wbudowany w iTerm2 od wersji 3.1.0.

Aby skorzystać z tej funkcji:
w Finderze kliknij folder prawym przyciskiem myszy -> Usługi -> Nowe okno iTerm2 Tutaj

Uwaga: Servicespodmenu znajduje się na samym dole menu po kliknięciu prawym przyciskiem myszy.

Odnośnik
Pod tym linkiem kliknij Pokaż starsze wersje , a następnie w iTerm2 3.1.0 kliknij Pokaż listę zmian i poszukaj usług , znajdziesz to:

Dodaj wsparcie dla usług wyszukiwania. Możesz kliknąć Finder prawym przyciskiem myszy, aby uruchomić iTerm2 w tej lokalizacji.


2

Spójrz na cdtoprojekt hostowany na https://github.com/jbtule/cdto „Aplikacja Finder Toolbar, aby otworzyć bieżący katalog w terminalu (lub iTerm, X11). Ta aplikacja została zaprojektowana (w tym jej ikona) do umieszczenia w pasek narzędzi okna Findera ”.


Ale otwiera dwa okna iTerms, które po pewnym czasie są bardzo irytujące.
Mike Lischke

1

Dla kompletności, zanim znalazłem to pytanie, działało dla mnie:

  • dostosowano new_tab.sh (AppleScript wydany przez skrypt bash) do rozwiązania tylko AppleScript.
  • następnie z Applescript Editor-> File-> Export-> File Format = .app.
  • przeciągnij i upuść .appna pasek narzędzi Findera.

Powoduje to przycisk paska narzędzi Findera, który otwiera bieżący katalog w nowej iTerm2karcie. XtraFinder oferuje taki przycisk, ale otwiera nowe okna.

Podobne rozwiązanie wykorzystujące usługi można znaleźć tutaj , które prowadzi do jeszcze bardziej powiązanych rozwiązań AppleScript:

Mój dostosowany AppleScript to:

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

To rozwiązanie zostało skomentowane w tym wątku dotyczącym przycisku .

Dzięki odpowiedzi iTermTo powyżej.


1

Wydaje mi się, że dzieje się tak, ponieważ elementy wewnętrzne iTerm się zmieniły, ale żadne z rozwiązań nie zadziałało. Co to był następujący kod:

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

Lub używając Automatora jako usługi wyszukiwania:

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

Dzięki iTerm:

Iterm Preferencje i w zakładce Profile przejdź do zakładki Ogólne, ustaw Working Directory na „Ponownie użyj katalogu poprzedniej sesji”.


0

Oto uproszczony skrypt, który zawsze otwiera nową kartę (np. Skrypt 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

Jeśli chcesz, aby skrypt używał ponownie istniejących kart, zamień tell current terminalblok na coś takiego:

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

Ale to nie zadziała, jeśli na przykład bieżąca sesja jest zajęta lub działa proces mniej lub vim.

Zawijanie skryptu w bloku try powoduje jego cichą awarię. reopenotwiera nowe okno terminala, jeśli nie ma widocznych okien lub jeśli tylko na przykład otwarte jest okno preferencji. Finder ma również insertion locationwłaściwość, którą zwykle jest target of Finder window 1pulpit. Ale w wersji 10.7 i późniejszych występuje błąd, który często odnosi się do innego okna niż okno z przodu.

Niektóre potencjalne problemy ze skryptem bulljit:

  • Ma jedno sekundowe opóźnienie. Nie wiem, czy coś jest potrzebne, ale nie potrzebowałem żadnych opóźnień podczas testowania tego skryptu.
  • Jeśli ustawiłeś iTerm, aby otwierał nowe okna na pełnym ekranie i nie ma otwartych okien, otwiera okno nie na pełnym ekranie.
  • Mówi Finderowi, aby uzyskać ścieżkę front window( window 1), która może być oknem informacyjnym lub oknem preferencji. Finder window 1zawsze będzie okno przeglądarki plików.
  • Zmienia katalog na, /jeśli okno Findera znajdujące się z przodu wyświetla widok, który nie ma ścieżki (jak widok sieci).

Wolę jednak używać takiej funkcji:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.