Geçerli alanda YENİ bir terminal penceresi açma uygulaması


14

Evet, Apple Script ile korkunç bir acemi deneyimi yaşıyorum.

Geçerli masaüstü alanında yeni bir Terminal penceresi açmam gerekiyor. Beni bir Terminal çalışan başka bir yere taşımak ve sonra başka bir Terminal penceresi açmayın.

Tabii ki, Terminal çalışmıyorsa, yeni bir Terminal işlemi başlatmalıdır.

Yanıtlar:


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

Tuhaf görünüyor, ancak Terminal'in gelen "komut dosyası" komutlarını işleme biçimindeki tuhaflıktan yararlanıyor; her biri için yeni bir pencere oluşturur. İsterseniz bunu yararlı bir şeyle değiştirebilirsiniz; yeni pencereyi açtıktan hemen sonra istediğiniz her şeyi yürütür.


1
Bu çalışır, ancak OSX hala boşlukları açık terminal pencerelerine sahip olan alanlara otomatik olarak taşır. Sistem tercihlerinde bu özelliği devre dışı bırakırsam düzeltir, ancak şimdi diğer tüm uygulamalarım beni o uygulama için açık pencereleri olan bir alana taşımıyor. Bir uygulamayı yalnızca pencerelerin görünmediğini bulmak için başlatmaktan nefret ediyorum, sadece üstteki menü çubuğu uygulamanın odaklandığını gösterir. Çok tuhaf.
Chev

15

"" Do komut dosyası arasında herhangi bir metin yoksa terminalde fazladan bir komut istemi alamazsınız.

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

1
Bir cevap olarak bırakmamızın iyi olduğunu düşünüyorum - alternatif olarak @ jfm'nin cevabında daha fazla iyileştirmek ve sizinkini silmek için bir düzenleme önerebilirsiniz.
20'de slhck

8

Bunu yapmanın üç farklı yolunu düşünebilirim (ilk ikisi başka bir yerden çalındı ​​ama nerede unuttuğumu). Elması kabuğundan bir kabuk komut dosyası çağıran üçüncü olanı kullanıyorum, çünkü her seferinde yeni bir pencere açmak istiyorum ve en kısa olduğu için.

En az 10.10'dan bu yana OS X'te yerleşik komut dosyasından farklı olarak, bunların tümü terminali bulucu pencerenizdeki geçerli çalışma dizini olan herhangi bir dizinde açar (yani, açmak için bir klasör seçmeniz gerekmez).

Ayrıca Finder> Terminal> Finder çemberini tamamlamak için birkaç bash fonksiyonu da içeriyordu.

1. Mevcut bir sekmeyi yeniden kullanın veya yeni bir Terminal penceresi oluşturun:

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. Mevcut bir sekmeyi yeniden kullanın veya yeni bir Terminal sekmesi oluşturun:

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. El yazması denilen bir kabuk komut dosyası aracılığıyla her seferinde yeni bir pencere oluşturun

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) Terminalinizdeki geçerli çalışma dizini için yeni bir bulma penceresi açmak için Bash takma adı

Bu takma adı .bash_profile dosyanıza ekleyin.

alias f='open -a Finder ./' 

5. (BONUS) Terminal pencerenizdeki dizini ön Finder penceresinin yoluna değiştirin

Bu işlevi .bash_profile dosyanıza ekleyin.

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
}

0

Yukarıdaki yanıtlar yalnızca Terminal zaten çalışıyorsa işe yarar. Çünkü biri - Aksi takdirde aynı anda iki Terminal pencere açar do scriptve yüzünden biri activate.

Bunu basit bir if ... else ile önleyebilirsiniz:

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

Bonus:

Komutları doğrudan çalıştırmak istiyorsanız bunu tuş vuruşlarıyla yapabilirsiniz (Çok şık değil - Biliyorum! Ama işe yarıyor)

[...]
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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.