Applescript để mở một cửa sổ terminal MỚI trong không gian hiện tại


14

Vâng, tôi đang có trải nghiệm người mới khủng khiếp với Apple Script.

Tôi cần mở một cửa sổ Terminal mới trong không gian máy tính để bàn hiện tại. KHÔNG di chuyển tôi đến một không gian khác có Terminal đang chạy và sau đó mở một cửa sổ Terminal khác.

Tất nhiên, nếu Terminal không chạy thì nó sẽ bắt đầu một tiến trình Terminal mới.

Câu trả lời:


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

Điều này có vẻ kỳ lạ nhưng nó lợi dụng sự kỳ quặc trong cách Terminal xử lý các lệnh "do script" đến; nó tạo ra một cửa sổ mới cho mỗi cái Bạn thực sự có thể thay thế nó bằng một cái gì đó hữu ích nếu bạn muốn; nó sẽ thực thi bất cứ điều gì bạn muốn ngay sau khi mở cửa sổ mới.


1
Điều này hoạt động nhưng OSX vẫn tự động di chuyển không gian đến bất kỳ không gian nào có cửa sổ đầu cuối mở. Nếu tôi tắt tính năng đó trong tùy chọn hệ thống, nó sẽ sửa nó nhưng bây giờ tất cả các ứng dụng khác của tôi không còn đưa tôi đến một không gian có cửa sổ mở cho ứng dụng đó. Tôi ghét khởi chạy một ứng dụng chỉ để thấy rằng không có cửa sổ nào xuất hiện, chỉ là thanh menu ở trên cùng cho thấy ứng dụng đó có trọng tâm. Thật kỳ quái.
Chev 25/11/13

15

Nếu bạn không có bất kỳ văn bản nào ở giữa tập lệnh do "", bạn sẽ không nhận được một dấu nhắc lệnh bổ sung trong thiết bị đầu cuối.

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

1
Tôi nghĩ sẽ ổn nếu chúng tôi để nó như một câu trả lời - thay vào đó bạn có thể đề nghị chỉnh sửa câu trả lời của @ jfm để cải thiện hơn nữa và xóa câu trả lời của bạn.
slhck

8

Tôi có thể nghĩ ra ba cách khác nhau để làm điều đó (hai cách đầu tiên bị đánh cắp từ một nơi khác nhưng tôi quên mất ở đâu). Tôi sử dụng cái thứ ba, gọi một kịch bản shell từ applescript, vì tôi muốn mở một cửa sổ mới mỗi lần và vì nó là ngắn nhất.

Không giống như tập lệnh được tích hợp trong OS X kể từ ít nhất 10.10, tất cả các tập lệnh này mở thiết bị đầu cuối trong bất kỳ thư mục nào là thư mục làm việc hiện tại trong cửa sổ công cụ tìm của bạn (tức là bạn không phải chọn thư mục để mở).

Cũng bao gồm một vài hàm bash để hoàn thành vòng tròn Finder> Terminal> Finder.

1. Sử dụng lại tab hiện có hoặc tạo cửa sổ Terminal mới:

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. Sử dụng lại tab hiện có hoặc tạo tab Terminal mới:

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. Tạo một cửa sổ mới mỗi lần thông qua một tập lệnh shell được gọi từ một 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. (TIỀN THƯỞNG) Bí danh Bash để mở cửa sổ tìm kiếm mới cho thư mục làm việc hiện tại trong thiết bị đầu cuối của bạn

Thêm bí danh này vào .bash_profile của bạn.

alias f='open -a Finder ./' 

5. (THƯỞNG) Thay đổi thư mục trong cửa sổ đầu cuối của bạn thành đường dẫn của cửa sổ Finder phía trước

Thêm chức năng này vào .bash_profile của bạn.

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

Các câu trả lời ở trên chỉ hoạt động nếu Terminal đang chạy. Nếu không, nó sẽ mở hai cửa sổ Terminal cùng một lúc - một vì do scriptvà một vì activate.

Bạn có thể ngăn chặn điều này với một cách đơn giản nếu ... khác:

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

Tặng kem:

Nếu bạn muốn trực tiếp chạy các lệnh, bạn có thể thực hiện việc này thông qua tổ hợp phím (Không thanh lịch lắm - Tôi biết! Nhưng nó hoạt động)

[...]
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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.