Thay đổi liên kết tệp cho một tệp hoặc một tập hợp tệp (AppleScript)
Tập lệnh này trước tiên chứng minh rằng ứng dụng mặc định cho một số tệp văn bản trên hệ thống của tôi đã được đặt thành Chỉnh sửa văn bản . Sau đó, nó thay đổi liên kết tệp cho tệp cụ thể đó để bây giờ nó mở bằng Nguyên tử . Cuối cùng, nó liên kết tất cả các tệp văn bản trên màn hình nền với Nguyên tử ứng dụng.
tell application "System Events"
get the default application of the file "/path/to/some file.txt"
--> alias "Macintosh HD:Applications:TextEdit.app:" of application "System Events"
# Individual file:
set the default application of the file "/path/to/some file.txt" to ¬
the path to the application named "Atom"
# A set of files:
set the default application of every file of the desktop folder whose ¬
name extension = "txt" to the path to the application "Atom"
end tell
Thay đổi liên kết tệp cho tất cả các tệp thuộc loại đã cho (JXA)
Sử dụng JavaScript để tự động hóa, bạn có thể triển khai các chức năng Core Foundation theo cách bạn không thể làm với AppleScriptObjC, để tương tác với Dịch vụ ra mắt ở cấp hệ thống và thay đổi liên kết tệp cho một loại tệp nhất định.
Ở đây, tôi đã nhắm mục tiêu các tệp văn bản đơn giản (những tệp này có phần mở rộng .txt
theo mặc định) và chuyển ứng dụng mặc định trả lời chúng sang Nguyên tử :
ObjC.import('CoreServices');
var contentType = 'public.plain-text';
var bundleID = Application('Atom').id();
$.LSSetDefaultRoleHandlerForContentType(
contentType,
$.kLSRolesAll,
bundleID
);
Loại tệp phải được nhắm mục tiêu theo cách Định danh loại thống nhất . Đây là các chuỗi văn bản đặc biệt xác định duy nhất một lớp hoặc loại mục nhất định. Liên kết sẽ đưa bạn đến một trang liệt kê các UTI được khai báo hệ thống của Apple cho tất cả các loại tệp có khả năng bạn sẽ quan tâm. Cấu trúc trong một loại cây thừa kế. Vì vậy, tôi có thể lười biếng chọn ra public.text
, mà tôi đã thấy đầu tiên trong danh sách, cho đến khi đọc thêm, chúng ta biết rằng UTI này là một loại cơ sở cho tất cả các văn bản, bao gồm HTML
và RTF
các tập tin.