- Công cụ tự động hóa mã nguồn mở cho phép điều khiển môi trường macOS bằng script Lua, đóng vai trò như một cầu nối giữa hệ điều hành và engine scripting
- Thông qua nhiều mô-đun mở rộng (extensions) khác nhau, công cụ này phơi bày các chức năng hệ thống và có thể kết hợp chúng để tự động hóa những tác vụ phức tạp như quản lý cửa sổ, điều khiển nhập liệu
- Hỗ trợ cài đặt bằng Homebrew hoặc tải thủ công, và chỉ hoạt động khi người dùng tự viết tệp cấu hình
~/.hammerspoon/init.lua
- Dự án được fork từ Mjolnir để mang lại trải nghiệm người dùng tích hợp hơn, đồng thời liên tục hướng tới mở rộng API hệ thống và tăng cường tích hợp giữa các extension
- Đã trở thành một nền tảng tự động hóa nâng cao giúp lập trình viên và power user kiểm soát macOS một cách chi tiết
Tổng quan về Hammerspoon
- Hammerspoon là một công cụ tự động hóa mạnh mẽ cho macOS (trước đây là OS X), hoạt động như một cầu nối giữa hệ điều hành và engine scripting Lua
- Người dùng có thể điều khiển nhiều chức năng khác nhau của hệ thống thông qua script Lua
- Các tính năng cốt lõi được cung cấp qua mô-đun mở rộng (extensions), những mô-đun này phơi bày các chức năng cụ thể của hệ thống
- Nhờ đó có thể thực hiện nhiều tác vụ tự động hóa như quản lý cửa sổ, điều khiển âm thanh, thiết lập thiết bị nhập liệu
Cách cài đặt
- Cài đặt thủ công
- Cài đặt bằng Homebrew
- Lệnh:
brew install hammerspoon --cask
Thiết lập ban đầu và cách sử dụng
- Ngay sau khi cài đặt, ứng dụng sẽ không thực hiện gì cả; người dùng phải tự tạo tệp
~/.hammerspoon/init.lua
- Các tài nguyên tham khảo:
Lịch sử dự án
- Hammerspoon bắt đầu như một fork của dự án Mjolnir
- Mjolnir hướng tới cấu trúc ứng dụng tối giản và quản lý các extension như các gói Lua bên ngoài
- Dựa trên nền tảng đó, Hammerspoon được phát triển để mang lại trải nghiệm người dùng tích hợp hơn
Định hướng tương lai của dự án
- Mở rộng phạm vi API hệ thống
- Tăng cường tích hợp giữa các mô-đun mở rộng
- Cải thiện trải nghiệm người dùng
Cấu thành kỹ thuật và thống kê
- Thành phần ngôn ngữ chính: Objective-C 51%, Lua 24.7%, C 16.3%, HTML 5.6%, Shell 0.7%, Python 0.5%
- Thống kê GitHub: 14.9k stars, 678 forks, 133 người đóng góp
- Giấy phép: MIT License
- Trang web chính thức: www.hammerspoon.org
Các thẻ chủ đề chính
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
1 bình luận
Ý kiến trên Hacker News
Hammerspoon giống như chất keo gắn kết mọi thứ trên chiếc Mac của tôi
Tôi dùng nó để đổ các tab Safari vào tài liệu Obsidian, hoặc dùng tổ hợp phím Hyper (Ctrl+Opt+Cmd) để mở cửa sổ mới cho các ứng dụng chính như Safari, Finder, Terminal, VS Code, Notes
Tôi cũng thiết lập nhiều tự động hóa khác nhau kết hợp với AeroSpace như chuyển cửa sổ sang màn hình khác, đặt hai cửa sổ cạnh nhau, hoán đổi chúng, hoặc gom mọi cửa sổ vào một workspace
Ngoài ra, nếu ứng dụng chạy nền bị chết thì nó sẽ tự khởi động lại, và khi image đĩa bị đưa vào thùng rác thì sẽ hiện lời nhắc để unmount
Nó còn có thể tích hợp với Skim để nhảy đến một mục cụ thể trong PDF bằng liên kết Markdown
Trước đây tôi dùng liên kết chia sẻ Outlook nhưng giờ cần xác thực nên phải đi qua Apple Calendar. Tuy vậy, việc chỉ có 40% lịch được đồng bộ vẫn là một bí ẩn
Trước đây tôi thích tiling window manager, nhưng trên Mac tôi dùng nhiều ứng dụng phức tạp về mặt hiển thị nên bố cục màn hình trở nên quan trọng hơn
Tôi tạo các preset kích thước cửa sổ phù hợp riêng cho mail, IDE, trình duyệt, terminal, ứng dụng chat rồi chuyển đổi bằng phím tắt Hammerspoon
Ngay cả khi IDE đang build mà mở trình duyệt lên, tôi vẫn có thể nhìn thấy log ở phía dưới, và việc chuyển ứng dụng bằng phím tắt modal cũng rất nhanh
Khái niệm modal nhiều tầng rất thú vị
Với tư cách là maintainer của Hammerspoon, tôi hiện đang phát triển v2 chuyển từ Lua sang JavaScript
Dự án Spacehammer của tôi là một bộ công cụ modal cho Hammerspoon lấy cảm hứng từ Spacemacs/Doom
Bạn có thể mở trình duyệt bằng “alt+spc a b”, điều chỉnh âm lượng bằng “alt+spc m j/k”, hoặc chỉnh sửa văn bản trong bất kỳ ứng dụng nào bằng Emacs
Nó được viết bằng Fennel, có thể phát triển theo thời gian thực qua REPL, và cũng tích hợp tốt với các window manager như Yabai
Tôi dùng Hammerspoon để tự làm một tiling window manager giả lập
Tôi sắp xếp lại cửa sổ theo tỷ lệ màn hình, và cũng có thể chuyển chúng giữa các màn hình bằng phím tắt
Gần đây tôi lần đầu thử Hammerspoon, và ChatGPT đã viết giúp tôi một script bằng AppleScript để gán trực tiếp phím tắt cho các tùy chọn trong ứng dụng menu bar
Nó thực sự rất ngầu, và tôi định sẽ thử thêm nhiều tự động hóa hơn nữa trong tương lai
Tôi đã tạo một script để ẩn thanh điều khiển chia sẻ màn hình của Zoom, để dù bấm ESC thì nó cũng không hiện lại
Toàn bộ cấu hình của tôi chỉ có đúng một dòng
ctrl + Dmở giao diện lưới để tôi chỉnh cửa sổ vào vị trí mong muốnNó đơn giản và trực quan hơn các window manager khác nhiều
hs.grid.setGrid('4x4'), hoặc chỉnh cỡ chữ bằnghs.grid.ui.textSizeCtrl+Dtrong terminal khôngNhờ Hammerspoon mà tôi cũng thoát khỏi căng thẳng chuyển đổi cửa sổ
Tôi dùng Cmd+1~9 để chuyển giữa các cửa sổ Chrome, và Cmd+0 để mở hộp thoại chọn
File cấu hình của tôi cho thấy cách ghi nhớ tên cửa sổ và giữ nguyên chúng cả sau khi khởi động lại
Hammerspoon mạnh hơn Automator trên Mac
Cũng như Automator giờ đã hỗ trợ JavaScriptCore, nếu Hammerspoon dùng JS thay vì Lua thì có thể tận dụng trực tiếp các gói Node
Nếu phải viết lại chúng bằng Lua thì chắc sẽ khá vất vả