Applescript เพื่อเปิดหน้าต่างเทอร์มินัลใหม่ในพื้นที่ปัจจุบัน


14

ใช่ฉันมีประสบการณ์ใหม่ที่แย่มากกับ Apple Script

ฉันต้องเปิดหน้าต่างเทอร์มินัลใหม่ในพื้นที่เดสก์ท็อปปัจจุบัน อย่าย้ายฉันไปยังพื้นที่อื่นที่มีเทอร์มินัลทำงานอยู่จากนั้นเปิดหน้าต่างเทอร์มินัลอื่น

แน่นอนถ้าเทอร์มินัลไม่ทำงานดังนั้นควรเริ่มกระบวนการเทอร์มินัลใหม่

คำตอบ:


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

ดูเหมือนว่าแปลก แต่ใช้ประโยชน์จากความแปลกในวิธีที่ Terminal จัดการคำสั่ง "do script" ขาเข้า; มันสร้างหน้าต่างใหม่สำหรับแต่ละคน คุณสามารถแทนที่สิ่งนั้นด้วยสิ่งที่มีประโยชน์หากคุณต้องการ; มันจะรันสิ่งที่คุณต้องการหลังจากเปิดหน้าต่างใหม่


1
ใช้งานได้ แต่ OSX ยังคงย้ายช่องว่างโดยอัตโนมัติไปยังพื้นที่ใดก็ตามที่มีหน้าต่างเทอร์มินัลเปิด หากฉันปิดใช้งานคุณลักษณะนั้นในการตั้งค่าระบบมันจะแก้ไข แต่ตอนนี้แอปพลิเคชันอื่น ๆ ทั้งหมดของฉันไม่ย้ายฉันไปยังพื้นที่ที่มีหน้าต่างแบบเปิดสำหรับแอปนั้นอีกต่อไป ฉันเกลียดการเปิดแอปเพื่อพบว่าไม่มีหน้าต่างปรากฏขึ้นเพียงแค่แถบเมนูที่ด้านบนแสดงว่าแอปพลิเคชันมีโฟกัส แปลกประหลาด
Chev

15

หากคุณไม่มีข้อความใด ๆ อยู่ระหว่างสคริปต์ทำ "" คุณจะไม่ได้รับคำสั่งพิเศษเพิ่มเติมในเครื่อง

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

1
ฉันคิดว่ามันไม่เป็นไรถ้าเราปล่อยให้มันเป็นคำตอบ - คุณสามารถแนะนำการแก้ไขคำตอบของ @ jfm เพื่อปรับปรุงและลบของคุณต่อไป
slhck

8

ฉันสามารถคิดถึงวิธีที่แตกต่างกันสามวิธีในการทำ (สองวิธีแรกถูกขโมยจากที่อื่น แต่ฉันลืมที่) ฉันใช้อันที่สามซึ่งเรียกเชลล์สคริปต์จาก applescript เพราะฉันต้องการเปิดหน้าต่างใหม่ทุกครั้งและเพราะมันสั้นที่สุด

ต่างจากสคริปต์ที่สร้างขึ้นใน OS X ตั้งแต่อย่างน้อย 10.10 ทั้งหมดเหล่านี้เปิดเทอร์มินัลในไดเรกทอรีใด ๆ ที่เป็นไดเรกทอรีการทำงานปัจจุบันในหน้าต่างค้นหาของคุณ (เช่นคุณไม่จำเป็นต้องมีโฟลเดอร์ที่เลือกเพื่อเปิด)

นอกจากนี้ยังมีฟังก์ชั่นการทุบตีสองอย่างเพื่อทำให้ Finder> Terminal> Finder วงกลมสมบูรณ์

1. ใช้แท็บที่มีอยู่ซ้ำหรือสร้างหน้าต่างเทอร์มินัลใหม่:

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. ใช้แท็บที่มีอยู่ซ้ำหรือสร้างแท็บ Terminal ใหม่:

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. สร้างหน้าต่างใหม่ทุกครั้งผ่านเชลล์สคริปต์ที่เรียกว่าจาก 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. (โบนัส) ทุบตีนามแฝงเพื่อเปิดหน้าต่างค้นหาใหม่สำหรับไดเรกทอรีการทำงานปัจจุบันในเทอร์มินัลของคุณ

เพิ่มชื่อแทนนี้ใน. bash_profile ของคุณ

alias f='open -a Finder ./' 

5. (โบนัส) เปลี่ยนไดเรกทอรีในหน้าต่างเทอร์มินัลของคุณไปยังเส้นทางของหน้าต่างค้นหาด้านหน้า

เพิ่มฟังก์ชันนี้ใน. bash_profile ของคุณ

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

คำตอบข้างต้นใช้งานได้เฉพาะเมื่อเทอร์มินัลทำงานอยู่แล้ว มิฉะนั้นจะเปิดสองหน้าต่างเทอร์มิในครั้งเดียว - หนึ่งเพราะและเป็นหนึ่งเพราะdo scriptactivate

คุณสามารถป้องกันได้ด้วยวิธีง่ายๆถ้า ... else:

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

โบนัส:

หากคุณต้องการเรียกใช้คำสั่งโดยตรงคุณสามารถทำได้ผ่านการกดแป้น (ไม่หรูหรามาก - ฉันรู้! แต่มันใช้งานได้)

[...]
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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.