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
Đó 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.
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ặccheckout
chi nhánh basics
.
git checkout basics
Một tiện ích ánh xạ nhanh, dựa trên chế độ, phím nóng để hành động.
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ể?
launchGoogleChromeApp
(nhưng chỉ khi tôi đang ở Chế độ mặc định)changeToWindowManagerMode
(một lần nữa, trong khi ở Chế độ mặc định)centerWindowOnScreen
(trong khi ở chế độ WindowManager)
Một tiện ích chọn tìm kiếm mờ với ánh xạ lựa chọn hành động.
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:
openGoogleInBrowser
.launchOrOpenApp
với ứng dụng đã chọn.
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.
~/.hammerspoon
'của bạn:
git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon
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
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.
shift
+ ⌘
+ h
c
shift
+ ⌥
+ h
enter
và wiki cho Hellfred sẽ mở trong trình duyệtshift
+ ^
+ h
enter
và repo mã cho Hellfred sẽ mở trong trình duyệt
Những gì Hellfire , Hellfuzz và Hellprompt đạ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.
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ứ:
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ữ.
Mỗi ứng dụng tuân theo một loạt các bước tương tự.
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)
Hellfire hoạt động giống như sau:
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
triggers
và callbacks
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.
Đị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à
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!
Đây là cách Hellprompt hoạt độ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/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
Đây là cách Hellfuzz hoạt độ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 enter
và Terminal 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.
Để ý 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/