Tôi có hai cửa sổ/tab được thiết lập để chạy trong Terminal.app, "syd" và "mel". tức là trong Shell | Cửa sổ mới, "syd" và "mel" được liệt kê. Làm thế nào tôi có thể mở các cấu hình đầu cuối bằng AppleScript?AppleScript để mở cửa sổ đầu cuối có tên
Trả lời
Một vài tuần trước, tôi đã di chuyển một Snow Leopard mới (10.6) máy từ một (10.4) Máy Tiger. Tiger Thiết bị đầu cuối lưu trữ cài đặt của nó trong các tệp “.term” (thường là ở ~/Library/Application Support/Terminal/
, nhưng chúng có thể được lưu/di chuyển ở bất kỳ đâu); Thiết bị đầu cuối của Snow Leopard tập trung cài đặt của nó vào tệp tùy chọn của Snow Leopard.
Trước khi chuyển sang Snow Leopard là một phần của một trong những công việc bình thường của tôi đã sử dụng Finder nhấp đúp chuột vào một tập tin “.term” lưu để mở một cửa sổga với kích thước định sẵn và lệnh ban đầu. Hôm nay, tôi nhận thấy rằng mỗi lần tôi thực hiện điều này Thiết bị đầu cuối đang tạo "bộ cài đặt" trùng lặp. Vì vậy, tôi bắt đầu tìm kiếm một cách để bắt đầu một thiết lập đã lưu mà không liên quan đến việc mở một tập tin ".term" (để các thiết lập trùng lặp sẽ không chồng chất lên); AppleScript là điểm dừng chân đầu tiên của tôi kể từ khi tôi có một chút kinh nghiệm với nó trước đây.
Tóm lại, dường như không có cách trực tiếp nào để bắt đầu cửa sổ/tab mới với một "bộ cài đặt" cụ thể thông qua các lệnh AppleScript của của Terminal. Cách tiếp cận thông thường sẽ là làm điều gì đó liên quan đến make new window
(hoặc make new tab
), nhưng tôi không thể tìm thấy biến thể mà Thiết bị đầu cuối sẽ chấp nhận. Tôi đã đưa ra ba giải pháp thay thế (giải pháp cuối cùng là tốt nhất, theo ý kiến của tôi).
Tạo một cửa sổ, sau đó Change Settings
Nếu cài đặt của bạn không liên quan đến một lệnh ban đầu hoặc kích thước khác nhau từ các thiết lập mặc định của bạn (ví dụ như chỉ màu/bàn phím/cài đặt hành vi khác với mặc định), bạn có thể sử dụng Lệnh của Thiết bị đầu cuối do script
(không có tham số “văn bản”) để tạo cửa sổ mới và sau đó thay đổi settings set
thành cửa sổ bạn muốn.
tell application "Terminal"
set newTab to do script -- create a new window with no initial command
set current settings of newTab to settings set "Grass"
end tell
Điều này có thể phù hợp với bạn, nhưng nó không phù hợp với nhu cầu của tôi, vì vậy tôi tiếp tục tìm kiếm.
‘s gadefault settings
Tiếp theo, tôi nhìn vào default settings
tài sản. Tôi nghĩ có thể tạm thời thay đổi cài đặt nào là mặc định, tạo cửa sổ mới, sau đó đặt lại cài đặt mặc định. Cách tiếp cận này cuối cùng đã thành công, nhưng hóa ra lại khá xấu xí (bên cạnh sự xấu xí của sự thay đổi tạm thời đối với các giá trị mặc định).
tôi đã sử dụng Hệ thống Sự kiện’keystroke
lệnh để gửi một ⌘N để ga để tạo ra cửa sổ mới. Nó chỉ ra rằng Thiết bị đầu cuối đôi khi hơi chậm để tạo cửa sổ mới và tập lệnh của tôi sẽ thiết lập lại mặc định trước Thiết bị đầu cuối có cơ hội sử dụng giá trị tạm thời mà phần trước của tập lệnh đã sắp xếp.do script
có thể đã được đồng bộ, nhưng nó cũng sẽ vô hiệu hóa bất kỳ lệnh ban đầu được lưu như là một phần của các thiết lập. Tôi đã kết thúc việc tính số cửa sổ trước theN và chờ số cửa sổ tăng lên. Nếu lệnh được khởi chạy dẫn đến việc mở và đóng cửa sổ rất nhanh, có khả năng là vòng lặp này có thể bị kẹt. Tôi có thể giới hạn các lần lặp lại, nhưng vào thời điểm này tôi đã khá thất vọng với hương vị tổng thể của mã (mặc dù tôi đã đi trước và mở rộng nó để cho phép các tab mới thay vì chỉ cửa sổ).
to newTerminal(settingSetName, asTab)
tell application "Terminal"
if asTab is true then
set countRef to a reference to tabs of first window
set newKey to "t"
else
set countRef to a reference to windows
set newKey to "n"
end if
set originalDefault to name of default settings
set default settings to settings set settingSetName
end tell
try
set initialCount to count of countRef
tell application "System Events"
-- keystrokes always go to the frontmost application
set frontmost of application process "Terminal" to true
keystroke newKey using command down
end tell
repeat until (count of countRef) > initialCount
beep
delay 0.1
end repeat
tell application "Terminal" to set default settings to settings set originalDefault
on error m number n
try
tell application "Terminal" to set default settings to settings set originalDefault
end try
error m number n
end try
end newTerminal
newTerminal("Grass", false)
Nhấp vào một Menu Item qua Hệ thống Sự kiện
Với Hệ thống Sự kiện, có một cách để kích hoạt trực tiếp các mục trong menu Shell>New Tab và Shell>Cửa sổ mới. Điều này đòi hỏi rằng "quyền truy cập cho các thiết bị trợ giúp" được kích hoạt (gần cuối cửa sổ tùy chọn Universal Access), tôi thường bật nó vì kịch bản GUI có thể được thực hiện thông qua Sự kiện hệ thống thường là cách duy nhất (tốt) hoàn thành một số nhiệm vụ tự động hóa). Mặc dù biến thể trước cũng sử dụng Sự kiện hệ thống, việc sử dụng rất hạn chế của nó không yêu cầu “quyền truy cập cho các thiết bị trợ giúp”.
(* makeNewTerminal(settingsSetName, asTab)
Bring Terminal.app to the front and
click the menu item named <settingsSetName>.
If <asTab> is true, then use the menu item under Shell > New Tab,
otherwise use the menu item under Shell > New Window
*)
to makeNewTerminal(settingsSetName, asTab)
tell application "Terminal" to launch
if asTab is true then
set submenuName to "New Tab"
else
set submenuName to "New Window"
end if
tell application "System Events"
set terminal to application process "Terminal"
set frontmost of terminal to true
click menu item settingsSetName of ¬
first menu of menu item submenuName of ¬
first menu of menu bar item "Shell" of ¬
first menu bar of terminal
end tell
end makeNewTerminal
makeNewTerminal("Grass", true)
Cách tiếp cận này nghĩa là tự động lựa chọn và kích hoạt một trong các mục trình đơn từ Shell menu. Nó yêu cầu "truy cập cho các thiết bị hỗ trợ", nhưng mã đơn giản hơn nhiều và có ít vấn đề hơn (vấn đề chính với mã này là bản địa hóa).
nên được một cái gì đó như thế này:
tell application "Finder"
open file "MyDisk:Users:myhome:Library:Application Support:Terminal:myconfig.terminal"
end tell
Tôi đang sử dụng Snow Leopard (10.6) và tôi không có thư mục '~/Library/Application Support/Terminal' - điều đó có thay đổi không? Cấu hình dường như nằm trong '~/Library/Preferences/com.apple.Terminal.plist' ngay bây giờ. – mjs
Phải có; Tôi không có máy SL để xem. Có http://iterm.sourceforge.net/ như một thiết bị đầu cuối thay thế hỗ trợ applescript, tabs, bookmarks. – markratledge
LƯU Ý: 'do script' trả về một trình chỉ định đối tượng cho tab/cửa sổ mới. Chỉ cần sử dụng kết quả của việc đó để gửi các lệnh bổ sung cho thiết bị đầu cuối đó. Không mã hóa cứng 'tab đầu tiên của cửa sổ đầu tiên'. ví dụ: 'đặt theTerminal để thực hiện tập lệnh',' đặt cài đặt hiện tại củaTerminal thành cài đặt "Grass" ' –