ในสคริปต์ฉันพยายามค้นหาหน้าต่าง Terminal.app ที่มีอุปกรณ์ tty ที่เฉพาะเจาะจงและยกหน้าต่างนั้นขึ้นไปด้านบน นี่คือสิ่งที่ฉันมีใน Applescript จนถึงตอนนี้:
tell application "System Events"
set foundWin to false
if (name of processes) contains "Terminal" then
tell application "Terminal"
set theTabs to first tab of every window where tty is "$(tty)"
repeat with theTab in theTabs
if class of theTab is tab then
set theWin to (first window whose tabs contains theTab)
set selected tab of theWin to theTab
set foundWin to true
end if
end repeat
end tell
end if
if foundWin then
--RAISE THE WINDOW?!
end if
end tell
ที่ที่ฉันติดอยู่เป็นส่วน "ยกหน้าต่าง"
นี่คือบางสิ่งที่ฉันไม่ต้องการ:
set frontmost of theWin to true
- สิ่งนี้จะนำหน้าต่างไปที่ด้านหน้าของกลุ่มของหน้าต่าง Terminal.app แต่ไม่ยกขึ้นเหนือหน้าต่างอื่น ๆ
tell application "Terminal" to activate
- นี่จะทำให้หน้าต่าง Terminal ทุกอันอยู่ด้านหน้าเป็นกองขนาดใหญ่ ฉันแค่ต้องการหน้าต่างเดียว
tell application "System Events"
set theSysWin to first window of process "Terminal" whose name is (name of theWin)
perform action "AXRaise" of theSysWin
end tell
สิ่งนี้เกือบจะทำได้ แต่สิ่งที่ต้องทำคือการยกหน้าต่างเทอร์มินัลไปที่ตำแหน่ง # 2 ยังคงอยู่ใต้หน้าต่างที่ใช้งานอยู่ (หากแอปที่ใช้งานเป็นสิ่งอื่นที่ไม่ใช่เทอร์มินัลแอป)
click theSysWin at {10,50}
- ดูเหมือนจะไม่ทำอะไรเลย
click first static text of theSysWin
- ดูเหมือนจะไม่ทำอะไรเลย
มีวิธีทำเช่นนี้หรือไม่? ไม่จำเป็นต้องอยู่ใน Applescript
แก้ไขฉันพบหน้าเว็บนี้ ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) เพื่อแจ้งการโทร Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
ฉันไม่คุ้นเคยกับ ObjC หรือ Cocoa และนี่คือการเรียกใช้จากเชลล์สคริปต์ในที่สุดดังนั้นจึงไม่แน่ใจว่าจะไปจากที่ใด
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
ฉันไม่คุ้นเคยกับ objc หรือโกโก้ ที่จะรู้ว่าจะไปจากที่นั่นแม้ว่า