Applescript untuk membuka jendela terminal BARU di ruang saat ini

12

Ya, saya memiliki pengalaman pemula yang mengerikan dengan Apple Script.

Saya perlu membuka jendela Terminal baru di ruang desktop saat ini. JANGAN pindahkan saya ke ruang lain yang memiliki Terminal berjalan dan kemudian buka jendela Terminal lainnya.

Tentu saja, jika Terminal tidak berjalan maka harus memulai proses Terminal baru.

zaf
sumber

Jawaban:

16
tell application "Terminal"  
    do script " "  
    activate  
end tell

Tampaknya aneh tetapi memanfaatkan keanehan dalam bagaimana Terminal menangani perintah "do script" yang masuk; itu menciptakan jendela baru untuk masing-masing. Anda benar-benar dapat menggantinya dengan sesuatu yang bermanfaat jika Anda inginkan; itu akan mengeksekusi apa pun yang Anda inginkan setelah membuka jendela baru.

Justin Mrkva
sumber
1
Ini berfungsi tetapi OSX masih memindahkan ruang secara otomatis ke ruang apa pun yang memiliki jendela terminal terbuka. Jika saya menonaktifkan fitur itu di preferensi sistem, ia memperbaikinya, tetapi sekarang semua aplikasi saya yang lain tidak lagi memindahkan saya ke ruang dengan jendela terbuka untuk aplikasi itu. Saya benci meluncurkan aplikasi hanya untuk menemukan bahwa tidak ada jendela yang muncul, hanya bilah menu di bagian atas menunjukkan bahwa aplikasi memiliki fokus. Sangat aneh.
Chev
15

Jika Anda tidak memiliki teks di antara script "" Anda tidak akan mendapatkan prompt perintah tambahan di terminal.

tell application "Terminal"  
    do script ""  
    activate  
end tell
Adam
sumber
1
Saya pikir tidak apa-apa jika kita membiarkannya sebagai jawaban - Anda dapat menyarankan untuk mengedit jawaban @ jfm sebagai alternatif untuk lebih meningkatkannya dan menghapus milik Anda.
slhck
6

Saya dapat memikirkan tiga cara berbeda untuk melakukannya (dua yang pertama dicuri dari tempat lain tetapi saya lupa di mana). Saya menggunakan yang ketiga, yang memanggil skrip shell dari applescript, karena saya ingin membuka jendela baru setiap waktu dan karena itu adalah yang terpendek.

Berbeda dengan skrip yang dibangun ke dalam OS X sejak setidaknya 10.10, semua ini membuka terminal di direktori apa pun yang merupakan direktori kerja saat ini di jendela pencari Anda (mis. Anda tidak harus memiliki folder yang dipilih untuk membukanya).

Juga menyertakan beberapa fungsi bash untuk menyelesaikan Finder & gt; Terminal & gt; Lingkaran pencari.

1. Gunakan kembali tab yang ada atau buat jendela Terminal baru:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of myDir in window 1
    else
        do script "cd " & quoted form of myDir
    end if
    activate
end tell

2. Gunakan kembali tab yang ada atau buat tab Terminal baru:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
        activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of myDir in window 1
end tell

3. Hasilkan jendela baru setiap kali melalui skrip shell yang dipanggil dari applescript

tell application "Finder"
    set myDir to POSIX path of (insertion location as alias)
    do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell

4. (BONUS) Bash alias untuk membuka jendela pencari baru untuk direktori kerja saat ini di terminal Anda

Tambahkan alias ini ke .bash_profile Anda.

alias f='open -a Finder ./' 

5. (BONUS) Ubah direktori di jendela terminal Anda ke jalur jendela Finder depan

Tambahkan fungsi ini ke .bash_profile Anda.

cdf() {
      target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
}
shibaku
sumber
0

Jawaban di atas hanya berfungsi jika Terminal sudah berjalan. Kalau tidak, ia membuka dua jendela Terminal sekaligus - satu karena do script dan satu karena activate.

Anda dapat mencegah ini dengan sederhana jika ... lain:

if application "Terminal" is running then
    tell application "Terminal"
        do script ""
        activate
    end tell
else
    tell application "Terminal"
        activate
    end tell
end if

Bonus:

Jika Anda ingin langsung menjalankan perintah, Anda dapat melakukan ini melalui penekanan tombol (Tidak terlalu elegan - Saya tahu! Tapi itu berhasil)

[...]
else
    tell application "Terminal"
        activate
        tell application "System Events" to keystroke "ls -la" 
        tell application "System Events" to key code 36
    end tell
end if
Peter Piper
sumber