AppleScript Fun: Tự động thay đổi thư mục tải xuống của Safari

Mặc dù các chương trình và dịch vụ khác nhau trên máy tính nhằm mang lại sự thuận tiện cho bạn, nhưng đôi khi bạn có thể cần thực hiện các tác vụ lặp đi lặp lại bằng cách sử dụng các công cụ và chương trình khác nhau trên hệ thống. Trong những trường hợp này, việc sử dụng các công cụ kịch bản có thể đặc biệt hữu ích. Không giống như lập trình, kịch bản là khi bạn lấy một bộ công cụ và tiện ích hiện tại và tự động hóa các tương tác của chúng bằng các lệnh. Chẳng hạn, với Javascript, bạn có thể yêu cầu trình duyệt thay đổi cách hiển thị nội dung HTML hoặc với Automator, bạn có thể yêu cầu Finder tìm cách sắp xếp các tệp theo một cách nhất định.

Gần đây, một đồng nghiệp tại CNET đã tiếp cận tôi với một tình huống độc đáo, nơi anh ấy muốn máy Mac của mình tự động thay đổi thư mục tải xuống của Safari dựa trên sự hiện diện của ổ đĩa ngoài. Ý tưởng ở đây là để Safari đặt các tệp đã tải xuống trong thư mục Tải xuống mặc định, nhưng khi bạn đính kèm một ổ đĩa ngoài cụ thể (chẳng hạn như ngón tay cái gọi là "Tải xuống"), thì hệ thống sẽ tự động chuyển thư mục tải xuống của Safari sang ổ đĩa ngoài, vì nó có thể là cồng kềnh để tiếp tục thay đổi nó bằng tay.

Thật không may, bản thân Safari không có khả năng làm điều này, nhưng OS X có các tài nguyên có thể được sử dụng cho việc này và được viết kịch bản bằng AppleScript để quản lý ứng dụng Safari và một số dịch vụ OS X, kịch bản Shell để thực hiện một số hành động không sử dụng giao diện ứng dụng và trình khởi chạy hệ thống chỉ chạy các tập lệnh khi ổ đĩa được gắn vào.

Ban đầu khi nghĩ về vấn đề này, giải pháp có vẻ khá đơn giản và kịch bản sau đây có vẻ như là một câu trả lời hay:

  1. Thiết lập tập lệnh để chạy lệnh "mặc định ghi com.apple.Safari DownloadFolder NAME" để thay đổi thư mục tải xuống thành vị trí được chỉ định bởi "NAME"
  2. Chạy tập lệnh này bằng cách sử dụng trình khởi chạy hệ thống chỉ khi một ổ đĩa cụ thể được đính kèm.
  3. Lặp lại điều này với một lệnh tương tự chỉ đến một vị trí khác khi ổ đĩa không còn được gắn.

Mặc dù phương pháp cơ bản này có vẻ hợp lý, nhưng nó sẽ không hoạt động vì một số lý do. Đầu tiên, một khi Safari đang chạy thì cách duy nhất để thay đổi sở thích là thông qua chính chương trình. Khi chương trình tải, nó sẽ đọc các tùy chọn vào RAM và quản lý các cài đặt của nó ở đó, vì vậy nếu bạn chỉnh sửa tệp tùy chọn bằng TextEdit hoặc lệnh "mặc định" như đã đề cập ở trên, thì nó sẽ không có hiệu lực đối với chương trình. Hơn nữa, Safari ghi các tùy chọn của nó trở lại đĩa khi thoát, sẽ ghi đè lên bất kỳ cài đặt đã thay đổi nào.

Ngoài ra, phương pháp này giả định hệ thống có sẵn các tài nguyên sẽ theo dõi sự hiện diện của một ổ đĩa cụ thể và kích hoạt tập lệnh bất cứ khi nào ổ đĩa đó xuất hiện, đây không phải là trường hợp. Hệ thống có thể theo dõi xem các ổ đĩa có được gắn hay không, nhưng sẽ cần thêm kịch bản để chỉ định tên ổ đĩa để kiểm tra mỗi khi ổ đĩa được gắn vào.

Cuối cùng, có một số sắc thái để xem xét. Chẳng hạn, vì chính Safari cần được sử dụng để thay đổi tùy chọn của nó khi chạy, nên làm như vậy sẽ buộc nó trở thành ứng dụng quan trọng nhất, nơi nó sẽ tồn tại trừ khi trước tiên bạn có kịch bản phát hiện ứng dụng đầu tiên và khôi phục nó khi sửa đổi thành Safari đã hoàn thành Ngoài ra, bạn không muốn tập lệnh chạy và chuyển chương trình đang hoạt động xung quanh khi có bất kỳ ổ đĩa ngẫu nhiên nào được đính kèm.

Vì những điều này, kịch bản sẽ cần bao gồm năm cân nhắc sau:

  1. Chỉ khởi chạy khi một ổ đĩa mới được gắn
  2. Chỉ thay đổi cài đặt nếu ổ đĩa có tên "Tải xuống" (hoặc bất kỳ tên nào được bỏ qua) được đính kèm
  3. Có điều kiện trong cách tiếp cận để thay đổi cài đặt về việc Safari có được khởi chạy hay không
  4. Chỉ thay đổi cài đặt nếu có vị trí tải xuống mong muốn mới
  5. Có khả năng khôi phục ứng dụng quan trọng nhất nếu tập lệnh cần chuyển sang Safari

Để thực hiện các tùy chọn này, hai kịch bản sẽ cần phải được tạo. Đầu tiên là dành cho launcher hệ thống "launchd" sẽ được sử dụng để giám sát các điểm gắn ổ đĩa của hệ thống, để xem liệu ổ đĩa mới có được gắn và gắn hay không. Nếu vậy, nó sẽ khởi chạy tập lệnh sẽ kiểm tra tên ổ đĩa, xem Safari có chạy hay không và sau đó chỉ thay đổi cài đặt của Safari nếu chúng khác với chủ yếu chọn ổ đĩa ngoài nhưng nếu nó không xuất hiện thì hãy sử dụng thư mục Tải xuống mặc định .

Script 1: LaunchAgent để theo dõi các ổ đĩa

Kịch bản đầu tiên được thực hiện là dành cho trình khởi chạy hệ thống, được gọi là Tác nhân khởi động. Để tạo nó, hãy mở Terminal và gõ lệnh sau (sao chép và dán nó cho đơn giản):

chạm ~ / Thư viện / LaunchAgents / local.ChangeSafariDoad.plist

Khi hoàn thành, mở nó trong TextEdit bằng cách chạy lệnh sau:

mở -e ~ / Library / LaunchAgents / local.ChangeSafariDoad.plist

Bây giờ bạn sẽ mở một tài liệu TextEdit trống, vì vậy hãy sao chép văn bản sau vào đó và lưu tài liệu, nhưng hãy mở nó ngay bây giờ. Bạn sẽ cần thay đổi phần "PHIM" để thay đổi vị trí của tập lệnh:

 Dán nhãn cục bộ.ChangeSafariTải xuống QueueDirectories WatchPaths / Vol chương trình / usr / bin / osascript Chương trìnhArgument osascript FILEPATH 

Khi bạn đăng nhập, tập lệnh này sẽ được tải vào quy trình khởi chạy hệ thống và cung cấp cho nó các điều kiện và hướng dẫn để chạy tập lệnh chính để chỉnh sửa tùy chọn của Safari. Trong trường hợp này, trình khởi chạy sẽ được yêu cầu xem thư mục / Tập để xem có bất kỳ thay đổi nào xảy ra trong thư mục đó không. Vì đây là nơi các hệ thống tập tin được gắn kết, bất cứ khi nào một ổ đĩa được gắn hoặc tách ra khỏi hệ thống, điều này sẽ kích hoạt tập lệnh chính để chạy.

Script 2: AppleScript để thay đổi cài đặt

Kịch bản thứ hai là tập lệnh chính sẽ thực hiện tất cả các hành động, bao gồm kiểm tra tên ổ đĩa, cho dù Safari có mở hay không và bất kỳ điều kiện nào khác để thay đổi tùy chọn. Để tạo nó, hãy chuyển đến thư mục / Ứng dụng / Tiện ích / và mở chương trình AppleScript Editor. Một cửa sổ soạn thảo trống sẽ mở ra và khi nó sao chép và dán đoạn script sau vào nó:

- Đặt tên ổ đĩa thay thế để sử dụng làm thư mục tải xuống tại đây

đặt dlFolder thành convertHome ("/ Tập / Tải xuống")

nói với ứng dụng "Finder"

nếu tồn tại [ tệp POSIX dlFolder] thì

- Không làm gì và sử dụng thư mục

khác

- đặt dlFolder vào thư mục gốc mặc định

đặt dlFolder thành (đường dẫn POSIX của ( đường dẫn đến thư mục gốc dưới dạng văn bản )) & "Tải xuống"

kết thúc nếu

kết thúc

- có được đường dẫn hiện tại từ safari plist

đặt currentpath thành convertHome ( tập lệnh shell "mặc định đọc com.apple.Safari DownloaderPath")

- chỉ thay đổi đường dẫn nếu cài đặt hiện tại không khớp với đường dẫn đầu vào (có gì đó cần thay đổi)

if (currentpath dưới dạng văn bản ) không bằng (dlFolder dưới dạng văn bản ) thì

- nếu Safari đang chạy, hãy thay đổi cài đặt thông qua tùy chọn của Safari

nếu appIsRasty ("Safari") thì

- xác định ứng dụng ngoài cùng để khôi phục khi hoàn thành tập lệnh

đặt frontApp thành đường dẫn đến ứng dụng ngoài cùng dưới dạng văn bản

- sao chép đường dẫn thư mục tải xuống vào clipboard

đặt bảng tạm thành dlFolder dưới dạng văn bản

kích hoạt ứng dụng "Safari"

báo cho ứng dụng "Sự kiện hệ thống" để báo cho quá trình ứng dụng "Safari"

- mở các tùy chọn hoặc đưa ra phía trước (cửa sổ 1)

tổ hợp phím ", " bằng cách sử dụng {lệnh down}

độ trễ 1 - tạm dừng trong màn hình hiển thị cửa sổ có thể dẫn đến lỗi, vì vậy chúng tôi đợi một giây

- Thay đổi sang tab Chung

nhấp vào nút "Chung" của thanh công cụ 1 của cửa sổ 1

- Thay đổi vị trí tải xuống thành Khác

nút bật lên "Lưu tệp đã tải xuống vào:" của nhóm 1 của nhóm 1 của cửa sổ "Chung"

nhấp chuột

nhấp vào mục menu "Khác ..." của menu 1 - ba dấu chấm là dấu chấm lửng, không phải ba dấu chấm

kết thúc

- Mở hộp thoại "đi đến thư mục"

tổ hợp phím "g" bằng cách sử dụng {shift down, lệnh down}

- Dán đường dẫn thư mục vào trường vị trí

nói với cửa sổ "Đi đến thư mục"

tổ hợp phím "v" bằng cách sử dụng {lệnh down}

tổ hợp phím trở lại

kết thúc

nhấp vào nút "Chọn" của trang 1 của cửa sổ "Chung"

- đóng các sở thích

tổ hợp phím "w" bằng cách sử dụng {lệnh down}

kết thúc

- khôi phục ứng dụng tối đa sau khi hoàn thành công việc

báo cho ứng dụng frontApp để kích hoạt

khác

- nếu Safari KHÔNG chạy, thì hãy sử dụng lệnh mặc định để thay đổi tùy chọn

thực hiện tập lệnh shell ("mặc định viết com.apple.Safari Tải xuốngPath" & dlFolder)

kết thúc nếu

kết thúc nếu

- Chức năng chuyển đổi các tham chiếu đường dẫn về nhà thành các đường dẫn đầy đủ

trên convertHome (currentpath)

nếu currentpath chứa "~ /" thì

đặt oldD006iter thành các dấu phân cách mục văn bản của AppleScript

đặt các dấu phân cách mục văn bản của AppleScript thành {"~ /"}

đặt textPath cho mỗi mục văn bản của currentpath

đặt các dấu phân cách mục văn bản của AppleScript thành oldD006iter

đặt đường dẫn hiện tại thành đường dẫn POSIX của ( đường dẫn đến thư mục gốc dưới dạng văn bản ) & mục 2 trong textPath

kết thúc nếu

trả lại hiện tại

chuyển đổi cuối

- Chức năng kiểm tra xem ứng dụng "appName" có chạy hay không (trong trường hợp này, được sử dụng cho Safari)

trên appIsRasty (appName)

báo cho ứng dụng "Sự kiện hệ thống" tới (tên của các quy trình ) có chứa appName

kết thúc ứng dụng

Văn bản của tập lệnh ban đầu sẽ có màu tím, nhưng khi bạn nhấp vào nút thanh công cụ Biên dịch hoặc nếu bạn lưu tập lệnh thì nó sẽ có màu tương tự như những gì bạn thấy ở đây. Lưu tập lệnh với tên như "ChangeDoads" vào vị trí bạn chọn (bạn có thể đặt tập lệnh trong thư mục "Tập lệnh" trong thư mục Tài liệu hoặc trong thư viện người dùng của bạn) và đóng trình soạn thảo AppleScript.

Bây giờ hãy mở một cửa sổ Terminal mới và kéo tệp script vừa tạo vào nó. Khi bạn thực hiện việc này, đường dẫn tệp đầy đủ tới tập lệnh sẽ được nhập vào cửa sổ, nó sẽ trông giống như "/Users/username/Document/ChangeDoads.scpt." Sử dụng chuột, chọn toàn bộ đường dẫn tệp, nhấn Command-C để sao chép nó vào bảng tạm và quay lại Tập lệnh 1 trong TextEdit và thay thế mục nhập "LỌC TẠO" bằng văn bản đã sao chép của bạn. Sau đó lưu và đóng tài liệu.

Tại thời điểm này các kịch bản được thiết lập. Chỉ cần đăng xuất và đăng nhập lại để tải tập lệnh khởi chạy (Tập lệnh 1) và bây giờ khi bạn gắn ổ đĩa có tên "Tải xuống", cài đặt của Safari sẽ tự động thay đổi để sử dụng ổ đĩa đó làm thư mục tải xuống. Nếu sau đó bạn ngắt kết nối ổ đĩa, cài đặt sẽ được hoàn nguyên. Điều tương tự cũng sẽ xảy ra nếu bạn đổi tên một ổ đĩa thành "Tải xuống" hoặc đổi tên của nó từ "Tải xuống" thành một cái khác.

Hãy nhớ rằng trong khi tập lệnh này hoạt động, nó chỉ được thử nghiệm trên OS X 10.6 "Snow Leopard" và OS X 10.7 "Lion" chạy Safari 5.1; tuy nhiên, nó chỉ hoạt động tốt trên các cấu hình hệ thống khác chạy ít nhất Safari 5.0. Các yêu cầu chính là khi tập lệnh đang thao túng các tùy chọn của Safari từ bên trong chương trình, nó sử dụng các chỉ mục nút để mở các menu khác nhau và nhấp vào các nút khác nhau trên màn hình. Nếu Apple thay đổi tổ chức tùy chọn trong Safari trong tương lai, thì phần này của tập lệnh sẽ không hoạt động cho đến khi được chỉnh sửa để trỏ lại các nút thích hợp. Tuy nhiên, bây giờ đó là một hạn chế chúng ta sẽ phải giải quyết. Một cách giải quyết cho vấn đề này ở Lion là tận dụng tính năng Resume của Apple trong tập lệnh để thoát Safari, thay đổi tùy chọn và sau đó khởi chạy lại chương trình thay vì phải lập trình giao diện.

Cuối cùng, nếu bạn quyết định không muốn tập lệnh này nữa, thì bạn có thể gỡ cài đặt nó bằng cách xóa tệp AppleScript và sau đó xóa tệp LaunchAgent bằng tay hoặc bằng cách chạy lệnh sau trong Terminal. Khi điều này được thực hiện, chỉ cần đăng xuất và đăng nhập lại, và bạn sẽ quay lại hình vuông:

rm ~ / Library / LaunchAgents / local.ChangeSafariDoad.plist


 

Để LạI Bình LuậN CủA BạN