paint-brush
Hellfred or: Tôi đã học cách tự động hóa macOS và trở nên hiệu quả như thế nàotừ tác giả@bradblundell
2,958 lượt đọc
2,958 lượt đọc

Hellfred or: Tôi đã học cách tự động hóa macOS và trở nên hiệu quả như thế nào

từ tác giả Brad Blundell9m2022/08/12
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Ứng dụng Hellfred được xây dựng dựa trên Hammerspoon để bạn có thể tự động hóa các tác vụ và tăng năng suất bằng cách lập trình các phím tắt vào quy trình công việc hàng ngày của mình.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Hellfred or: Tôi đã học cách tự động hóa macOS và trở nên hiệu quả như thế nào
Brad Blundell HackerNoon profile picture


Tôi muốn tốc độ. Tôi cần tốc độ.


Tất cả những lần nhấp chuột này, tất cả việc tìm kiếm này, tất cả những suy nghĩ lặp đi lặp lại và chi phí tinh thần đang cắt giảm việc thực sự hoàn thành công việc.


Tôi cần những người máy làm công việc cho tôi.


Gần đây tôi đã chuyển sang macOS sau nhiều năm trên Windows, nơi tôi đã mày mò với AutoHotkey.


Là một người họ hàng với Mac noob, tôi bắt đầu hack với Alfred , Karabiner và nhanh chóng tìm thấy niềm an ủi dưới dạng Hammerspoon.


Ah, Hammerspoon . Vâng, tôi đã sử dụng mã và mô-đun - “Những chiếc thìa” - từ những người siêu thông minh mã hóa và mở rộng Hammerspoon và điều đó đã giúp tôi có được một số dặm lớn, nhưng tôi cần nhiều hơn thế .


Sau đó, có Lua. Tôi muốn nâng cao kỹ năng trong Lua.
Cách tốt nhất để làm như vậy?

Mã cái gì đó.




Tham gia Hellfred , một bộ sưu tập gồm 3 ứng dụng nhỏ được xây dựng dựa trên Hammerspoon để bạn có thể tự động hóa các tác vụ, tăng năng suất và loại bỏ thời gian ngốn bằng cách lập trình các phím tắt cho quy trình công việc hàng ngày của mình.


Đó là một cách để ánh xạ các tác vụ lặp đi lặp lại, tốn thời gian thành các chuỗi chính, lệnh hoặc văn bản có thể tìm kiếm được.



Chết tiệt. Một tìm kiếm mờ, ánh xạ lựa chọn hành vi.


Lửa địa ngục. Trình ánh xạ từ khóa đến hành vi.


Được rồi. Một trình ánh xạ lệnh-hành vi.


TL; DR

Vì vậy, bạn muốn nhanh chóng chữa cháy? Chuyển đến phần cài đặt và hướng dẫn bên dưới hoặc tải xuống repocheckout chi nhánh basics .


 git checkout basics



Các ứng dụng

Lửa địa ngục

Một tiện ích ánh xạ nhanh, dựa trên chế độ, phím nóng để hành động.

  • Hỗ trợ kích hoạt phím đơn cũng như trình tự hợp âm chính làm trình kích hoạt.
  • Hiển thị hầu như mọi phím trên bàn phím bao gồm cả các phím bổ trợ để sử dụng làm trình kích hoạt.
  • Các chế độ cho phép cùng một trình kích hoạt có các hành vi khác nhau trong các ngữ cảnh khác nhau.


Vui lòng nói tiếng Anh?

Khi tôi nhập một ký tự hoặc một chuỗi ký tự, sau đó thực thi một chức năng cụ thể, nhưng chỉ khi tôi đang ở một chế độ cụ thể.


Được. Một ví dụ có thể?

  • Khi tôi nhập c rồi chạy chức năng launchGoogleChromeApp (nhưng chỉ khi tôi đang ở Chế độ mặc định)
  • Khi tôi nhập w theo sau là m rồi chạy function changeToWindowManagerMode (một lần nữa, trong khi ở Chế độ mặc định)
  • Khi tôi nhập c thì chạy chức năng centerWindowOnScreen (trong khi ở chế độ WindowManager)


Hellfuzz

Một tiện ích chọn tìm kiếm mờ với ánh xạ lựa chọn hành động.

  • Hỗ trợ các bộ lựa chọn đa cấp (lồng nhau).


Vui lòng nói tiếng Anh?

Khi tôi tìm kiếm trong danh sách các lựa chọn và chọn một, sau đó thực thi một chức năng cụ thể. Nếu lựa chọn của tôi có các lựa chọn phụ (nghĩ: parent => children ), thì hãy hiển thị cho tôi những lựa chọn đó để tôi có thể tìm kiếm.


Được. Một ví dụ có thể?

Giả sử bạn có cấu trúc này:

  • Khi tôi nhập ' goog ', sau đó đánh dấu lựa chọn ' Mở Google '. Chọn tùy chọn này sẽ thực thi chức năng openGoogleInBrowser .
  • Ngoài ra, nếu tôi nhập ' ứng dụng ', sau đó đánh dấu lựa chọn ' Khởi chạy ứng dụng '. Việc chọn tùy chọn này sẽ thay thế các lựa chọn hiện tại bằng Thiết bị đầu cuối , Ghi chúLịch (tập hợp con các lựa chọn cho Khởi chạy ứng dụng )
  • Khi tôi tìm kiếm một cách mờ nhạt qua những cái đó và chọn một cái, Hellfuzz sẽ thực thi launchOrOpenApp với ứng dụng đã chọn.


Hellprompt

Một tiện ích giống như dòng lệnh với hỗ trợ khớp chuỗi cơ bản.


Vui lòng nói tiếng Anh?

Khi tôi gõ lệnh và gửi nó, sau đó kiểm tra lệnh của tôi xem có bất kỳ mẫu chuỗi phù hợp nào không và thực thi các chức năng liên quan đến lệnh đó.


Được. Một ví dụ có thể?

  • Khi tôi nhập lệnh ' mở ghi chú ' và sau đó nhấn enter , sau đó thực hiện bất kỳ chức năng nào có filter (ví dụ: lệnh phải bắt đầu bằng từ ' mở ') và hành vi (ví dụ: mở ứng dụng được liên kết với ' ghi chú ') phù hợp để mở Ghi chú ứng dụng.

  • Khi tôi nhập ' Browse github ' và sau đó nhấn enter , sau đó thực thi bất kỳ chức năng nào có bộ lọc (ví dụ: lệnh bắt đầu bằng từ ' Browse ') và hành vi (url mở được liên kết với ' github ') phù hợp để mở liên kết.



Cài đặt: Firestarter

  1. Tải xuống và cài đặt Hammerspoon
  2. Cài đặt Hellfred: Sao chép kho lưu trữ vào thư mục ` ~/.hammerspoon 'của bạn:


 git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon

Bootstrap: Thắp sáng nó

Có một tệp bootstrap cho Hellfred với thiết lập được định cấu hình trước. Hãy tham khảo nó trong tệp init.lua của init.lua .

https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0

Lưu tệp và tải lại cấu hình (hoặc tự tiết kiệm thời gian và sử dụng tải lại ưa thích )


Có cái gì trong hộp vậy? Thử cấu hình trước

Ngoài ra, 3 ứng dụng Hellfred đã sẵn sàng để sử dụng và được định cấu hình sẵn với một ví dụ khởi động nhanh. Hãy kiểm tra nó để đảm bảo mọi thứ đều được nối dây và hoạt động.

Thử Hellfire

  • Mở Hellfire bằng phím nóng shift + + h
  • Gõ ký tự c
  • Repo cho Hellfred sẽ mở trong trình duyệt.

Hãy thử Hellfuzz

  • Mở Hellfuzz bằng phím nóng shift + + h
  • Nhập từ ' wiki '
  • Điều này làm nổi bật tùy chọn ' Mở Hellfred wiki '
  • Nhấn enter và wiki cho Hellfred sẽ mở trong trình duyệt

Dùng thử Hellprompt

  • Mở Hellprompt bằng phím nóng shift + ^ + h
  • Nhập ' mã mở '
  • Nhấn enter và repo mã cho Hellfred sẽ mở trong trình duyệt



Những gì Hellfire , HellfuzzHellprompt đạt được là ánh xạ trình kích hoạt hoặc đầu vào cho một hành động hoặc hành vi , if-this-then-that kia, và trong khi chúng tôi vừa chứng minh bằng cách sử dụng mỗi ứng dụng để đạt được cùng một kết quả, bạn sẽ thấy mỗi ứng dụng phù hợp hơn với các trường hợp sử dụng nhất định hơn những trường hợp khác.



Hướng dẫn: Thiết lập cơ bản

Chúng tôi sẽ lập trình những gì

Bây giờ chúng ta hãy tăng nhiệt và cấu hình một cái gì đó hữu ích hơn một chút. Chúng tôi sẽ lập trình từng ứng dụng để giải quyết các tình huống sau để bạn có thể hiểu được mọi thứ:

  1. Một trình khởi chạy ứng dụng đơn giản
  2. Trình khởi chạy url cho các liên kết thường được truy cập


Bạn có thể tìm thấy các tệp cuối cùng cho hướng dẫn này trong thư mục hellfred / extension / basics trên nhánh cơ bản của kho lưu trữ.


Các mẫu cần lưu ý

Mỗi ứng dụng tuân theo một loạt các bước tương tự.

  1. Khởi tạo ứng dụng với ràng buộc phím nóng
  2. Định cấu hình các đối tượng ` Subscriber (Điều này có thể được thực hiện trong hellfred-bootstrap.lua nhưng chúng tôi sẽ tạo các tệp riêng biệt để giữ cho mọi thứ sạch sẽ. Chúng tôi sẽ tận dụng các phương thức gốc để giúp việc tạo đối tượng trở nên dễ dàng)
  3. Đăng ký người đăng ký với ứng dụng
  4. Phím nóng để chạy ứng dụng
  5. Phá hủy các nhiệm vụ hút thời gian


Thiết lập cho Hellfire

Hellfire hoạt động giống như sau:


Trình khởi chạy ứng dụng

Khởi tạo ứng dụng

Điều này đã được thực hiện với cấu hình trước trong hellfred-bootstrap.lua . Vui lòng thay đổi phím nóng thành một cái gì đó khác.
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541


Định cấu hình các đối tượng Subscriber

triggerscallbacks do người dùng định nghĩa và được bao bọc bên trong các đối tượng cấu hình đơn giản. Những đối tượng này, hoạt động như những subscribers khi được đăng ký với ứng dụng tương ứng và được thông báo bất cứ khi nào có điều gì đó quan trọng xảy ra bên trong ứng dụng.


Các đối tượng người đăng ký cho Hellfire tuân theo cấu trúc sau:

https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a

Lưu ý : Nếu fireIfModeIs không được xác định, Hellfire sẽ đặt chế độ ANY theo mặc định, có nghĩa là lệnh gọi lại sẽ kích hoạt ở bất kỳ chế độ nào khi được kích hoạt.


Tạo cấu trúc thư mục sau nếu nó không tồn tại: hellfred/extend/basics .

Sau đó, tạo một tệp Lua mới bên trong thư mục basics có tên hellfirepack-applications.lua - quy ước đặt tên tệp không có tầm quan trọng.


Thêm mã này:

https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2


Đăng ký người đăng ký với ứng dụng

Quay lại hellfred-bootstrap.lua , chúng ta cần đăng ký gói người đăng ký mà chúng ta vừa định cấu hình.

https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a


Chạy ứng dụng

Nhập Hellfire ( shift + + h ) và nhập bất kỳ trình kích hoạt mới nào:
f để mở ứng dụng Finder, t để mở Terminal hoặc n để mở ứng dụng Notes.


Liên kết Launcher (sử dụng Chế độ Hellfire)

Định cấu hình các đối tượng Subscriber

Được rồi, bây giờ hãy định cấu hình người đăng ký cho trình khởi chạy url Liên kết chung của chúng tôi. Tạo một tệp Lua mới trong hellfred/extend/basics có tên hellfirepack-common-links.lua


Thêm mã này:

https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1


Đăng ký người đăng ký với ứng dụng

Quay lại hellfred-bootstrap.lua , chúng ta cần đăng ký gói người đăng ký mà chúng ta vừa định cấu hình.
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060


Chạy ứng dụng

Nhập Hellfire ( shift + + h ) và nhập bất kỳ kích hoạt mới nào: t , g , h hoặc s .


Treo lên! Bạn có nhận thấy t việc nhập kích hoạt để khởi chạy Terminal cũng như mở trang web TechCrunch không? Đó có lẽ không phải là điều chúng ta muốn xảy ra. Hãy tận dụng tính năng Chế độ của Hellfire .


Các chế độ cung cấp một cách để có cùng một trình kích hoạt hoạt động khác nhau trong các bối cảnh khác nhau.


Theo mặc định, Hellfire khởi động trong một chế độ được gọi là… bạn đoán nó… chế độ ' Mặc định '.
Chúng tôi có thể định cấu hình một số chế độ tùy chỉnh để sử dụng với Hellfire để các trình kích hoạt có thể hoạt động khác nhau dưới các chế độ khác nhau - hoặc 'không gian tên' nếu bạn muốn.


Hãy xem xét luồng này:

Tạo một tệp Lua mới trong hellfred/extend/basics được gọi là hellfire-modes-extended.lua expand.lua.

Chúng tôi sẽ tạo một chế độ riêng biệt để kích hoạt các liên kết chung .


Thêm mã này:

https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e


Chúng tôi sẽ yêu cầu tệp này trong hellfred-bootstrap.lua vì vậy nó là toàn cầu có thể truy cập. Chúng tôi sẽ làm tương tự với tệp Chế độ Hellfire để chúng tôi có quyền truy cập vào các chế độ có sẵn của Hellfire trong các phần khác của ứng dụng của chúng tôi.


Thêm mã sau vào hellfred-bootstrap.lua (trong phần siêu dữ liệu, ở phía trên cùng của tệp)

https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f


Bây giờ chúng tôi cần một cách để thay đổi chế độ thành chế độ Liên kết chung mới của chúng tôi.

Chúng tôi sẽ sử dụng chuỗi khóa của c theo sau là l .

Chúng tôi cũng cần có thể quay lại chế độ Mặc định

Chúng ta sẽ sử dụng dấu chấm phẩy ; như một sự kích hoạt.


Đó là tiếp theo…


Định cấu hình các đối tượng Người đăng ký kích hoạt thay đổi chế Subscriber

Tạo một tệp Lua mới trong hellfred/extend/basics được gọi là hellfire-mode-triggers.lua


Thêm mã này:

https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12


Đăng ký người đăng ký với ứng dụng

Trong hellfred-bootstrap.lua , đăng ký người đăng ký để kích hoạt chế độ mới:

https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1


Thử nghiệm chuyển đổi giữa các chế độ

Bây giờ nhập Hellfire ( shift + + h ) và chuyển đổi giữa hai chế độ. Chế độ FTW!


Cập nhật người đăng ký để hoạt động ở các chế độ

Bây giờ chúng tôi cần cập nhật người đăng ký của mình trong hellfirepack-common-links.lua để họ chỉ kích hoạt khi chế độ Common Links đang hoạt động.

Chúng tôi sẽ cập nhật phương thức gốc và gán _G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS cho fireIfModeIs thay vì nil .


Phương thức được cập nhật sẽ giống như sau:

https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757


Chúng tôi cũng cần cập nhật người đăng ký của mình trong hellfirepack-applications.lua để họ chỉ kích hoạt khi chế độ Mặc định của Hellfire đang hoạt động.


Phương thức được cập nhật sẽ giống như sau:

https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0


Chạy ứng dụng

Vào Hellfire ( shift + + h ) và chuyển đổi giữa các chế độ. Kích hoạt t hiện hoạt động khác nhau tùy thuộc vào chế độ mà Hellfire đang ở. Thật tuyệt!


Thiết lập cho Hellprompt

Đây là cách Hellprompt hoạt động:

Trình khởi chạy ứng dụng và URL

Khởi tạo ứng dụng

Điều này đã được thực hiện với cấu hình trước trong hellfred-bootstrap.lua . Vui lòng thay đổi phím nóng thành một cái gì đó khác.

https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4


Định cấu hình các đối tượng Subscriber

Những người đăng ký cho Hellprompt có cấu trúc khác với những người đăng ký cho Hellfire.

Hãy xem xét cấu trúc này:

https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df

Lưu ý : Nếu filter không được xác định thì lệnh gọi lại sẽ luôn được thực hiện.


Tạo một tệp Lua mới trong hellfred/extend/basics được gọi là hellpromptpack-commands.lua

Thêm mã này:

https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f


Đăng ký người đăng ký với ứng dụng

Quay lại hellfred-bootstrap.lua , chúng ta cần đăng ký gói người đăng ký mà chúng ta vừa định cấu hình.

https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61


Chạy ứng dụng
Nhập Hellprompt ( shift + ^ + h ) và kiểm tra các lệnh đó. Inferno!

Thử:

 browse news

và:

 open terminal


Thiết lập cho Hellfuzz

Đây là cách Hellfuzz hoạt động:

Trình khởi chạy ứng dụng

Khởi tạo ứng dụng

Điều này đã được thực hiện với cấu hình trước trong hellfred-bootstrap.lua . Vui lòng thay đổi phím nóng thành một cái gì đó khác.
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187


Định cấu hình các đối tượng Subscriber

Những người đăng ký Hellfuzz có cấu trúc khác với các ứng dụng khác.

Hãy xem xét cấu trúc này:

https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208

Lưu ý : Nếu nextChoicesFn được xác định thì việc callback sẽ bị bỏ qua.


Để giúp mọi thứ dễ dàng hơn, chúng tôi sẽ sử dụng phương pháp trợ giúp để định cấu hình người đăng ký cho Hellfuzz


Tạo một tệp Lua mới trong hellfred/extend/basics có tên hellfuzzpack-apps-and-links.lua


Thêm mã này:

https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a


Đăng ký người đăng ký với ứng dụng

Trong hellfred-bootstrap.lua , đăng ký gói người đăng ký.

https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273


Chạy ứng dụng

Nhập Hellfuzz ( shift + + h ) và nhập lệnh. Ví dụ, bắt đầu nhập từ 'Terminal' , bạn sẽ thấy tùy chọn mở Terminal được tô sáng. Nhấn enterTerminal sẽ mở ra. Hút nóng!


Trình khởi chạy liên kết (sử dụng tập hợp lựa chọn lồng nhau)

Một tính năng tiện dụng của Hellfuzz là khả năng lồng các tập hợp các lựa chọn.

Hãy xem xét quy trình cập nhật này:


Hãy thử điều này với tác vụ Trình khởi chạy liên kết của chúng tôi, chúng tôi sẽ tạo cấu trúc lựa chọn phân cấp sau:

Cập nhật mã trong hellfuzzpack-apps-and-links.lua như sau:

https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61


Bây giờ nhập Hellfuzz ( shift + + h ) và bắt đầu tìm kiếm ' Liên kết chung '. Bạn có thể chọn lựa chọn ' Liên kết chung ' và tập hợp con các lựa chọn từ commonLinkNextChoices sẽ được hiển thị và có thể được tìm kiếm mờ. Chọn bất kỳ tùy chọn liên kết nào sẽ mở url tương ứng.



Phần mở rộng: Đổ thêm dầu vào lửa.

Để ý các thử nghiệm và tiện ích mở rộng Hellfred sắp tới trên repo bằng cách xem nhánh extend .

 git checkout extend




Bây giờ đi lên địa ngục \m/