4 điểm bởi GN⁺ 2026-03-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ốngtă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

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

 
GN⁺ 2026-03-15
Ý 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

    • Tôi chỉ dùng nó cho hai mục đích — kiểm tra danh sách cửa sổ Teams, nếu đang họp thì gửi webhook đến HomeAssistant để đổi preset đèn, và tải lịch ical xuống để nếu có cuộc họp trong vòng 15 phút thì chuyển sang preset “pending”
      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
    • Tôi tò mò không biết cách đổ tab Safari sang Obsidian như thế nào. Không rõ đó có phải tính năng đơn giản hay có script nào đủ hay để chia sẻ không
    • Đây đúng là kiểu “spooning” rất ấn tượng. Tôi chỉ dùng nó để quản lý cửa sổ thôi, nhưng chỉ vậy cũng đã khiến macOS dùng tốt hơn rất nhiều
    • Không biết bạn có thể chia sẻ file cấu hình được không
    • Nhờ các ví dụ này mà tôi cũng nảy ra vài ý tưởng về cách mình có thể tận dụng 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

    • Tôi rất thích Lua nên đó gần như là lý do duy nhất khiến tôi dùng Hammerspoon, vì vậy nếu chuyển sang JS thì sẽ hơi tiếc, nhưng tôi nghĩ đó là một lựa chọn thực tế
    • Với tư cách người dùng lâu năm, tôi tò mò lý do chuyển khỏi Lua, nhưng dù sao đây vẫn là một ứng dụng tuyệt vời nên xin cảm ơn
    • Có người đùa vui và đầy mong đợi rằng: “Phát hành sau 18 ngày nữa à?”
    • Tôi tò mò về tầm nhìn cho v2, lý do thay đổi kiến trúc, và bối cảnh dẫn đến việc chọn JS
    • Tôi cũng tự hỏi liệu có thể tạo ra hiệp lực với hỗ trợ JavaScript của AppleScript hay không
  • 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

    • Có người đùa rằng: “Bàn phím đã có phím chỉnh âm lượng rồi mà...”. Tuy vậy, nếu là người dùng Touch Bar Mac thì tôi hiểu
  • 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

    • Tôi khuyên dùng AeroSpace. Nó hoạt động rất tốt theo cách quen thuộc với người dùng i3
    • Tôi cũng dùng tương tự, nhưng có thêm bố trí trái·giữa·phải. Việc tính kích thước cửa sổ bằng toán học kỳ quặc nhưng thú vị
    • Tôi dùng hammerspoon-shiftit. Đây là dự án tái hiện hoàn hảo ShiftIt đã chết
    • Tôi cũng dùng hyper+các phím mũi tên để di chuyển cửa sổ, và hyper+enter để chuyển toàn màn hình. Tôi rất thích cảm giác di chuyển cửa sổ tự nhiên này
    • Tôi thích plugin miro-windows-manager. Nó rất tiện để xoay vòng bố cục nửa màn hình / chia 3
  • 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

    • Có người phản hồi rằng “chỉ riêng việc này thôi cũng đáng để cài”
  • Toàn bộ cấu hình của tôi chỉ có đúng một dòng
    ctrl + D mở giao diện lưới để tôi chỉnh cửa sổ vào vị trí mong muốn
    Nó đơn giản và trực quan hơn các window manager khác nhiều

    • Có người ngạc nhiên vì không biết tính năng này tồn tại. Bạn còn có thể đổi kích thước lưới bằng hs.grid.setGrid('4x4'), hoặc chỉnh cỡ chữ bằng hs.grid.ui.textSize
    • Tôi cũng dùng tính năng tương tự, nhưng cấu hình linh hoạt hơn, chẳng hạn như chỉ resize từ một phía
    • Việc đồng bộ cấu hình giữa nhiều thiết bị có thể trở thành địa ngục dotfile. Dù vậy, đây vẫn là một trong số ít công cụ hiện đại cho phép điều khiển cửa sổ mà không cần dùng chuột
    • Tôi thắc mắc không biết nó có xung đột với Ctrl+D trong terminal không
  • Nhờ 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ả