MacOS X: Bagaimana cara pintas "Buka folder ini di iTerm"?

12

Saya pikir judulnya menyatakan dengan tepat apa yang ingin saya lakukan. Saya ingin pintasan atau bahkan sebuah tombol di dalam Finder yang mengaktifkan Tab iTerm baru dan mengubah lokasi ke lokasi yang telah saya buka di Finder. Semacam open .terbalik. :-)

Terima kasih, Malax

Malax
sumber

Jawaban:

10

Applescript ini berfungsi untuk saya:

-- 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
omong kosong
sumber
1
Saya pikir ini harus menjadi jawaban yang diterima.
dhilipsiva
8

Menggunakan jawaban lain di halaman ini saya telah membuat Aplikasi yang dapat diseret ke bilah tugas finder.

Anda dapat mengunduhnya dari sini: https://github.com/rc1/iTermTo

Ross
sumber
1
Kerja bagus! Bekerja dengan sempurna. Ini harus menjadi jawaban yang diterima.
rcd
1
Saya setuju - tampaknya bekerja dengan sempurna. Unduh zip. Seret aplikasi ke folder Aplikasi untuk menginstal. Seret aplikasi ke bilah alat pencari untuk pintasan praktis.
justingordon
3

Ini dibangun untuk iTerm2 pada versi 3.1.0.

Untuk menggunakan fungsionalitas:
di Finder klik kanan folder -> Layanan -> Jendela iTerm2 Baru Di Sini

Catatan: Servicessubmenu ada di bagian paling bawah menu klik kanan.

Referensi
Pada tautan ini klik Tampilkan Versi Lama , lalu di bawah iTerm2 3.1.0 klik Tampilkan Changelog dan cari layanan , Anda akan menemukan ini:

Tambahkan dukungan untuk layanan pencari. Anda dapat mengklik kanan pada Finder untuk meluncurkan iTerm2 di lokasi itu.

Brad Cupit
sumber
2

Lihatlah cdtoproyek yang dihosting di https://github.com/jbtule/cdto "Aplikasi Finder Toolbar untuk membuka direktori saat ini di Terminal (atau iTerm, X11). Aplikasi ini dirancang (termasuk ikonnya) untuk ditempatkan di toolbar jendela pencari. "

Lloyd Dewolf
sumber
Tapi itu membuka dua jendela iTerms yang sangat menjengkelkan setelah beberapa saat.
Mike Lischke
1

Hanya untuk kelengkapan, sebelum menemukan pertanyaan ini, apa yang berhasil bagi saya adalah:

  • diadaptasi new_tab.sh (AppleScript dikeluarkan oleh skrip bash) untuk solusi khusus AppleScript.
  • lalu dari Applescript Editor-> File-> Export-> File Format = .app .
  • seret & jatuhkan .appke bilah alat Finder.

Ini menghasilkan tombol bilah alat Finder yang membuka direktori saat ini di baru iTerm2 tab . XtraFinder menawarkan tombol seperti itu, tetapi membuka jendela baru.

Solusi serupa menggunakan layanan dapat ditemukan di sini , yang menautkan ke solusi AppleScript yang lebih terkait:

AppleScript saya yang diadaptasi adalah:

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

Solusi ini dikomentari di utas terkait tombol ini .

Berkat jawaban ITermTo di atas.

Ioannis Filippidis
sumber
1

Saya kira itu karena internal iTerm telah berubah, tetapi tidak ada solusi yang bekerja untuk saya. Apa yang dilakukan adalah kode berikut:

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

Atau menggunakan Automator sebagai layanan pencari:

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

Dengan ITerm:

Preferensi Iterm dan tab Di Bawah Profil, buka subtab Umum, atur Direktori Kerja menjadi “Gunakan kembali direktori sesi sebelumnya”.

coto
sumber
0

Berikut ini skrip yang disederhanakan yang selalu membuka tab baru (seperti skrip 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

Jika Anda ingin skrip menggunakan kembali tab yang ada, ganti tell current terminalblok dengan sesuatu seperti ini:

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

Tetapi itu tidak akan berhasil jika misalnya sesi saat ini sibuk atau menjalankan proses yang kurang atau vim.

Membungkus skrip dalam blok coba membuatnya gagal diam-diam. reopenmembuka jendela terminal baru jika tidak ada jendela yang terlihat atau jika hanya misalnya jendela preferensi terbuka. Finder juga memiliki insertion locationproperti, yang biasanyatarget of Finder window 1 atau desktop. Tetapi ada bug di 10.7 dan yang lebih baru di mana sering merujuk ke beberapa jendela selain jendela paling depan.

Beberapa potensi masalah dengan skrip bulljit:

  • Ini memiliki penundaan satu detik. Saya tidak tahu apakah itu diperlukan untuk sesuatu, tetapi saya tidak memerlukan penundaan ketika saya menguji skrip ini.
  • Jika Anda telah mengatur iTerm untuk membuka jendela baru di layar penuh dan tidak ada jendela yang terbuka, itu akan membuka jendela non-layar penuh.
  • Ia memberi tahu Finder untuk mendapatkan jalur front window( window 1), yang dapat berupa jendela informasi atau jendela preferensi. Finder window 1akan selalu menjadi jendela browser file.
  • Ini mengubah direktori menjadi /jika jendela Finder paling depan menampilkan tampilan yang tidak memiliki jalur (seperti tampilan Jaringan).

Saya lebih suka menggunakan fungsi seperti ini saja:

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