- เป็นเครื่องมืออัตโนมัติแบบโอเพนซอร์สที่สามารถควบคุมสภาพแวดล้อม macOS ด้วยสคริปต์ Lua โดยทำหน้าที่เป็นสะพานเชื่อมระหว่างระบบปฏิบัติการกับเอนจินสคริปต์
- ผ่านส่วนขยาย (extensions) ที่หลากหลายซึ่งเปิดเผยความสามารถของระบบ ทำให้สามารถนำมาผสมกันเพื่อทำงานอัตโนมัติที่ซับซ้อน เช่น การจัดการหน้าต่าง การควบคุมอินพุต เป็นต้น
- รองรับการติดตั้งผ่าน Homebrew หรือการดาวน์โหลดด้วยตนเอง และจะทำงานได้เมื่อผู้ใช้เขียนไฟล์ตั้งค่า
~/.hammerspoon/init.lua ด้วยตนเอง
- โปรเจ็กต์นี้ถูกฟอร์กมาจาก Mjolnir เพื่อมอบประสบการณ์ใช้งานที่บูรณาการมากขึ้น และมุ่งขยาย System API พร้อมเสริมการผสานการทำงานระหว่างส่วนขยายอย่างต่อเนื่อง
- กลายเป็นแพลตฟอร์มอัตโนมัติขั้นสูงที่ช่วยให้นักพัฒนาและผู้ใช้ระดับสูงควบคุม macOS ได้อย่างละเอียด
ภาพรวมของ Hammerspoon
- Hammerspoon เป็นเครื่องมืออัตโนมัติทรงพลังสำหรับ macOS (เดิมคือ OS X) โดยทำงานในรูปแบบสะพานเชื่อมระหว่างระบบปฏิบัติการกับเอนจินสคริปต์ Lua
- ผู้ใช้สามารถควบคุมความสามารถต่าง ๆ ของระบบผ่านสคริปต์ Lua ได้
- ความสามารถหลักถูกจัดให้ผ่านส่วนขยาย (extensions) ซึ่งโมดูลเหล่านี้จะเปิดเผยฟังก์ชันเฉพาะของระบบ
- จึงสามารถนำไปใช้ทำงานอัตโนมัติได้หลากหลาย เช่น การจัดการหน้าต่าง การควบคุมเสียง และการตั้งค่าอุปกรณ์อินพุต
วิธีติดตั้ง
- ติดตั้งด้วยตนเอง
- ดาวน์โหลด รีลีสล่าสุด จาก GitHub
- ย้าย
Hammerspoon.app ไปยังโฟลเดอร์ Applications
- ติดตั้งผ่าน Homebrew
- คำสั่ง:
brew install hammerspoon --cask
การตั้งค่าเริ่มต้นและการใช้งาน
- หลังติดตั้งเสร็จ จะยังไม่มีการทำงานใด ๆ จนกว่าผู้ใช้จะสร้างไฟล์
~/.hammerspoon/init.lua ด้วยตนเอง
- แหล่งข้อมูลอ้างอิงที่น่าสนใจ:
ประวัติของโปรเจ็กต์
- Hammerspoon เริ่มต้นจากการเป็นฟอร์กของโปรเจ็กต์ Mjolnir
- Mjolnir มุ่งเน้นโครงสร้างแอปพลิเคชันแบบมินิมอล และจัดการส่วนขยายเป็นแพ็กเกจ Lua ภายนอก
- Hammerspoon พัฒนาต่อยอดจากแนวคิดนี้เพื่อมอบประสบการณ์ผู้ใช้ที่บูรณาการมากขึ้น
ทิศทางในอนาคตของโปรเจ็กต์
- ขยายขอบเขตของ System API
- เสริมการผสานการทำงานระหว่างส่วนขยาย
- ปรับปรุงประสบการณ์ผู้ใช้
องค์ประกอบทางเทคนิคและสถิติ
- สัดส่วนภาษาหลัก: Objective-C 51%, Lua 24.7%, C 16.3%, HTML 5.6%, Shell 0.7%, Python 0.5%
- สถิติ GitHub: 14.9k stars, 678 forks, ผู้มีส่วนร่วม 133 คน
- ใบอนุญาต: MIT License
- เว็บไซต์ทางการ: www.hammerspoon.org
แท็กหัวข้อหลัก
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
Hammerspoon เป็นเหมือนกาวที่คอยเชื่อมทุกอย่างบน Mac ของฉันเข้าด้วยกัน
มันสามารถดัมพ์แท็บ Safari ไปเป็นเอกสาร Obsidian ได้ หรือใช้ คีย์ผสม Hyper (Ctrl+Opt+Cmd) เพื่อเปิดแอปหลักอย่าง Safari, Finder, Terminal, VS Code, Notes ฯลฯ ในหน้าต่างใหม่
ฉันตั้งค่าอัตโนมัติไว้หลายแบบร่วมกับ AeroSpace เช่น ย้ายหน้าต่างไปยังจออื่น, วางสองหน้าต่างเคียงกัน, สลับตำแหน่งกัน, หรือรวมทุกหน้าต่างไว้ใน workspace เดียว
นอกจากนี้ยังรีสตาร์ตแอปเบื้องหลังอัตโนมัติเมื่อแอปตาย และขึ้นพรอมป์ต์ให้ unmount เมื่อ disk image ถูกโยนลงถังขยะ
ยังมีฟีเจอร์ที่ทำงานร่วมกับ Skim เพื่อกระโดดไปยังส่วนเฉพาะของ PDF ด้วยลิงก์ Markdown ได้ด้วย
เดิมทีใช้ลิงก์แชร์จาก Outlook แต่ภายหลังต้องยืนยันตัวตน เลยต้องอ้อมผ่าน Apple Calendar แทน แต่ที่ยังเป็นปริศนาคือมีแค่ 40% ของตารางนัดที่ซิงก์มา
เมื่อก่อนฉันชอบ tiling window manager แต่บน Mac ฉันใช้แอปที่ซับซ้อนทางภาพเยอะขึ้น ก็เลยให้ความสำคัญกับการจัดเลย์เอาต์หน้าจอมากกว่า
ฉันทำ พรีเซ็ตขนาดหน้าต่าง แยกไว้สำหรับเมล, IDE, เบราว์เซอร์, เทอร์มินัล และแอปแชต แล้วสลับด้วยคีย์ลัดของ Hammerspoon
ต่อให้ IDE กำลัง build อยู่ พอเปิดเบราว์เซอร์มาก็ยังมองเห็นล็อกด้านล่างได้ และการสลับแอปด้วย modal shortcut ก็เร็วมาก
แนวคิด modal หลายชั้นนี่น่าสนใจดี
ในฐานะ ผู้ดูแลโครงการ ของ Hammerspoon ตอนนี้ฉันกำลังพัฒนา v2 ที่จะเปลี่ยนจาก Lua ไปเป็น JavaScript
โปรเจกต์ของฉัน Spacehammer เป็นทูลคิต modal สำหรับ Hammerspoon ที่ได้แรงบันดาลใจจาก Spacemacs/Doom
คุณสามารถกด “alt+spc a b” เพื่อเปิดเบราว์เซอร์ หรือ “alt+spc m j/k” เพื่อปรับเสียง หรือแม้แต่แก้ไขข้อความจากแอปใดก็ได้ใน Emacs
มันเขียนด้วย Fennel และพัฒนาแบบเรียลไทม์ผ่าน REPL ได้ อีกทั้งยังทำงานร่วมกับ window manager อย่าง Yabai ได้ดี
ฉันใช้ Hammerspoon ทำ tiling window manager ปลอม ๆ ขึ้นมาเอง
มันจัดวางหน้าต่างใหม่ตามสัดส่วนหน้าจอ และย้ายข้ามจอด้วยคีย์ลัดได้ด้วย
ฉันเพิ่งลองใช้ Hammerspoon เป็นครั้งแรกเมื่อไม่นานมานี้ และให้ ChatGPT เขียนสคริปต์ AppleScript เพื่อ bind คีย์ลัดเข้ากับ ตัวเลือกในแอปบนเมนูบาร์โดยตรง
มันเจ๋งมาก และต่อไปก็ตั้งใจจะลองทำ automation อย่างอื่นเพิ่มอีก
มีคนทำสคริปต์สำหรับซ่อนคอนโทรลแชร์หน้าจอของ Zoom เพื่อไม่ให้มันกลับมาอีกแม้กด ESC
คอนฟิกทั้งหมดของฉันมีแค่บรรทัดเดียว
ใช้
ctrl + Dเพื่อเรียก อินเทอร์เฟซแบบกริด ขึ้นมาจัดหน้าต่างไปยังตำแหน่งที่ต้องการมันเรียบง่ายและตรงไปตรงมากว่า window manager ตัวอื่น
hs.grid.setGrid('4x4')หรือปรับขนาดตัวอักษรด้วยhs.grid.ui.textSizeCtrl+Dในเทอร์มินัลหรือเปล่าฉันเองก็หลุดพ้นจาก ความเครียดในการสลับหน้าต่าง ได้เพราะ Hammerspoon
ใช้ Cmd+1~9 เพื่อสลับหน้าต่าง Chrome และ Cmd+0 เพื่อเปิดไดอะล็อกเลือกหน้าต่าง
ดูได้จากไฟล์คอนฟิกของฉัน ซึ่งมันจำชื่อหน้าต่างและคงไว้ได้แม้รีสตาร์ตแล้ว
Hammerspoon ทรงพลังกว่า Automator บน Mac
ในเมื่อ Automator รองรับ JavaScriptCore แล้ว ถ้า Hammerspoon เปลี่ยนจาก Lua ไปใช้ JS เช่นกัน ก็น่าจะดึงแพ็กเกจ Node มาใช้ได้ตรง ๆ
ถ้าต้องเขียนใหม่เป็น Lua อีกรอบก็คงลำบากไม่น้อย