4 คะแนน โดย GN⁺ 2026-03-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นเครื่องมืออัตโนมัติแบบโอเพนซอร์สที่สามารถควบคุมสภาพแวดล้อม macOS ด้วยสคริปต์ Lua โดยทำหน้าที่เป็นสะพานเชื่อมระหว่างระบบปฏิบัติการกับเอนจินสคริปต์
  • ผ่านส่วนขยาย (extensions) ที่หลากหลายซึ่งเปิดเผยความสามารถของระบบ ทำให้สามารถนำมาผสมกันเพื่อทำงานอัตโนมัติที่ซับซ้อน เช่น การจัดการหน้าต่าง การควบคุมอินพุต เป็นต้น
  • รองรับการติดตั้งผ่าน Homebrew หรือการดาวน์โหลดด้วยตนเอง และจะทำงานได้เมื่อผู้ใช้เขียนไฟล์ตั้งค่า ~/.hammerspoon/init.lua ด้วยตนเอง
  • โปรเจ็กต์นี้ถูกฟอร์กมาจาก Mjolnir เพื่อมอบประสบการณ์ใช้งานที่บูรณาการมากขึ้น และมุ่งขยาย System API พร้อมเสริมการผสานการทำงานระหว่างส่วนขยายอย่างต่อเนื่อง
  • กลายเป็นแพลตฟอร์มอัตโนมัติขั้นสูงที่ช่วยให้นักพัฒนาและผู้ใช้ระดับสูงควบคุม macOS ได้อย่างละเอียด

ภาพรวมของ Hammerspoon

  • Hammerspoon เป็นเครื่องมืออัตโนมัติทรงพลังสำหรับ macOS (เดิมคือ OS X) โดยทำงานในรูปแบบสะพานเชื่อมระหว่างระบบปฏิบัติการกับเอนจินสคริปต์ Lua
    • ผู้ใช้สามารถควบคุมความสามารถต่าง ๆ ของระบบผ่านสคริปต์ Lua ได้
  • ความสามารถหลักถูกจัดให้ผ่านส่วนขยาย (extensions) ซึ่งโมดูลเหล่านี้จะเปิดเผยฟังก์ชันเฉพาะของระบบ
    • จึงสามารถนำไปใช้ทำงานอัตโนมัติได้หลากหลาย เช่น การจัดการหน้าต่าง การควบคุมเสียง และการตั้งค่าอุปกรณ์อินพุต

วิธีติดตั้ง

  • ติดตั้งด้วยตนเอง
  • ติดตั้งผ่าน Homebrew
    • คำสั่ง: brew install hammerspoon --cask

การตั้งค่าเริ่มต้นและการใช้งาน

ประวัติของโปรเจ็กต์

  • 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 ความคิดเห็น

 
GN⁺ 2026-03-15
ความคิดเห็นจาก Hacker News
  • Hammerspoon เป็นเหมือนกาวที่คอยเชื่อมทุกอย่างบน Mac ของฉันเข้าด้วยกัน
    มันสามารถดัมพ์แท็บ Safari ไปเป็นเอกสาร Obsidian ได้ หรือใช้ คีย์ผสม Hyper (Ctrl+Opt+Cmd) เพื่อเปิดแอปหลักอย่าง Safari, Finder, Terminal, VS Code, Notes ฯลฯ ในหน้าต่างใหม่
    ฉันตั้งค่าอัตโนมัติไว้หลายแบบร่วมกับ AeroSpace เช่น ย้ายหน้าต่างไปยังจออื่น, วางสองหน้าต่างเคียงกัน, สลับตำแหน่งกัน, หรือรวมทุกหน้าต่างไว้ใน workspace เดียว
    นอกจากนี้ยังรีสตาร์ตแอปเบื้องหลังอัตโนมัติเมื่อแอปตาย และขึ้นพรอมป์ต์ให้ unmount เมื่อ disk image ถูกโยนลงถังขยะ
    ยังมีฟีเจอร์ที่ทำงานร่วมกับ Skim เพื่อกระโดดไปยังส่วนเฉพาะของ PDF ด้วยลิงก์ Markdown ได้ด้วย

    • ฉันใช้แค่สองอย่างเท่านั้น — เช็กรายการหน้าต่าง Teams แล้วถ้ากำลังประชุมอยู่ก็ส่ง webhook ไปที่ HomeAssistant เพื่อเปลี่ยน พรีเซ็ตไฟ และดึงปฏิทิน ical มาเช็กว่ามีประชุมในอีก 15 นาทีไหม ถ้ามีก็สลับเป็นพรีเซ็ต “pending”
      เดิมทีใช้ลิงก์แชร์จาก Outlook แต่ภายหลังต้องยืนยันตัวตน เลยต้องอ้อมผ่าน Apple Calendar แทน แต่ที่ยังเป็นปริศนาคือมีแค่ 40% ของตารางนัดที่ซิงก์มา
    • อยากรู้ว่าคุณดัมพ์แท็บ Safari ไป Obsidian ยังไง เป็นฟีเจอร์ง่าย ๆ หรือมีสคริปต์ที่พอจะแชร์ได้ไหม
    • นี่มัน ‘spooning’ ที่น่าประทับใจจริง ๆ ฉันใช้แค่จัดการหน้าต่าง แต่แค่นั้นก็ทำให้ macOS น่าใช้ขึ้นมากแล้ว
    • อยากรู้ว่าพอจะแชร์ไฟล์คอนฟิกได้ไหม
    • ตัวอย่างนี้ทำให้ฉันเริ่มมีไอเดียแล้วว่าจะเอาไปใช้ยังไงได้บ้าง
  • เมื่อก่อนฉันชอบ tiling window manager แต่บน Mac ฉันใช้แอปที่ซับซ้อนทางภาพเยอะขึ้น ก็เลยให้ความสำคัญกับการจัดเลย์เอาต์หน้าจอมากกว่า
    ฉันทำ พรีเซ็ตขนาดหน้าต่าง แยกไว้สำหรับเมล, IDE, เบราว์เซอร์, เทอร์มินัล และแอปแชต แล้วสลับด้วยคีย์ลัดของ Hammerspoon
    ต่อให้ IDE กำลัง build อยู่ พอเปิดเบราว์เซอร์มาก็ยังมองเห็นล็อกด้านล่างได้ และการสลับแอปด้วย modal shortcut ก็เร็วมาก
    แนวคิด modal หลายชั้นนี่น่าสนใจดี

  • ในฐานะ ผู้ดูแลโครงการ ของ Hammerspoon ตอนนี้ฉันกำลังพัฒนา v2 ที่จะเปลี่ยนจาก Lua ไปเป็น JavaScript

    • ฉันชอบ Lua มาก และ Hammerspoon ก็แทบเป็นเหตุผลเดียวที่ยังได้ใช้ Lua อยู่ พอจะเปลี่ยนเป็น JS ก็เสียดาย แต่ก็คิดว่าเป็นทางเลือกที่สมจริง
    • ในฐานะผู้ใช้มานาน ฉันอยากรู้เหตุผลของการย้ายออกจาก Lua แต่ยังไงก็ขอบคุณสำหรับแอปที่ยอดเยี่ยมนี้
    • มีการแซวแบบคาดหวังว่า “จะออกในอีก 18 วันเหรอ?”
    • อยากรู้ วิสัยทัศน์ ของ v2 เหตุผลของการเปลี่ยนสถาปัตยกรรม และพื้นหลังที่เลือก JS
    • ยังสงสัยด้วยว่าอาจเกิด synergy กับการรองรับ JavaScript ของ AppleScript หรือไม่
  • โปรเจกต์ของฉัน Spacehammer เป็นทูลคิต modal สำหรับ Hammerspoon ที่ได้แรงบันดาลใจจาก Spacemacs/Doom
    คุณสามารถกด “alt+spc a b” เพื่อเปิดเบราว์เซอร์ หรือ “alt+spc m j/k” เพื่อปรับเสียง หรือแม้แต่แก้ไขข้อความจากแอปใดก็ได้ใน Emacs
    มันเขียนด้วย Fennel และพัฒนาแบบเรียลไทม์ผ่าน REPL ได้ อีกทั้งยังทำงานร่วมกับ window manager อย่าง Yabai ได้ดี

    • มีคนเล่นมุกว่า “คีย์ปรับเสียงมันก็มีอยู่บนคีย์บอร์ดแล้ว...” แต่ก็เข้าใจได้ถ้าเป็นผู้ใช้ Touch Bar Mac
  • ฉันใช้ Hammerspoon ทำ tiling window manager ปลอม ๆ ขึ้นมาเอง
    มันจัดวางหน้าต่างใหม่ตามสัดส่วนหน้าจอ และย้ายข้ามจอด้วยคีย์ลัดได้ด้วย

    • ขอแนะนำ AeroSpace มันทำงานได้ดีในแบบที่ผู้ใช้ i3 จะคุ้นเคย
    • ฉันก็ใช้คล้าย ๆ กัน แต่เพิ่มการจัดวางซ้าย-กลาง-ขวาด้วย การคำนวณขนาดหน้าต่างด้วยคณิตศาสตร์มัน ประหลาดแต่เท่ดี
    • ฉันใช้ hammerspoon-shiftit เป็นโปรเจกต์ที่จำลอง ShiftIt ที่ตายไปแล้วได้อย่างสมบูรณ์
    • ฉันเองก็ใช้ hyper+ลูกศรเพื่อย้ายหน้าต่าง และ hyper+enter เพื่อสลับ fullscreen ชอบ ความลื่นไหลเป็นธรรมชาติของการย้ายหน้าต่าง
    • ฉันชอบปลั๊กอิน miro-windows-manager เหมาะมากกับการวนลูปเลย์เอาต์ครึ่งจอ/สามส่วน
  • ฉันเพิ่งลองใช้ Hammerspoon เป็นครั้งแรกเมื่อไม่นานมานี้ และให้ ChatGPT เขียนสคริปต์ AppleScript เพื่อ bind คีย์ลัดเข้ากับ ตัวเลือกในแอปบนเมนูบาร์โดยตรง
    มันเจ๋งมาก และต่อไปก็ตั้งใจจะลองทำ automation อย่างอื่นเพิ่มอีก

  • มีคนทำสคริปต์สำหรับซ่อนคอนโทรลแชร์หน้าจอของ Zoom เพื่อไม่ให้มันกลับมาอีกแม้กด ESC

    • มีคนตอบว่า “แค่นี้ก็คุ้มค่าพอจะติดตั้งแล้ว”
  • คอนฟิกทั้งหมดของฉันมีแค่บรรทัดเดียว
    ใช้ ctrl + D เพื่อเรียก อินเทอร์เฟซแบบกริด ขึ้นมาจัดหน้าต่างไปยังตำแหน่งที่ต้องการ
    มันเรียบง่ายและตรงไปตรงมากว่า window manager ตัวอื่น

    • มีคนทึ่งว่า “ไม่รู้มาก่อนว่ามีฟีเจอร์นี้” และบอกว่าสามารถเปลี่ยนขนาดกริดได้ด้วย hs.grid.setGrid('4x4') หรือปรับขนาดตัวอักษรด้วย hs.grid.ui.textSize
    • ฉันก็ใช้ฟีเจอร์คล้ายกัน แต่ตั้งให้ยืดขนาดจากด้านเดียวได้ จึงยืดหยุ่นกว่า
    • การซิงก์คอนฟิกข้ามหลายอุปกรณ์อาจกลายเป็น นรกของ dotfile ได้ ถึงอย่างนั้นก็ยังเป็นหนึ่งในเครื่องมือสมัยใหม่ไม่กี่ตัวที่ให้คุณควบคุมหน้าต่างได้โดยไม่ต้องจับเมาส์
    • สงสัยว่ามันชนกับ Ctrl+D ในเทอร์มินัลหรือเปล่า
  • ฉันเองก็หลุดพ้นจาก ความเครียดในการสลับหน้าต่าง ได้เพราะ Hammerspoon
    ใช้ Cmd+1~9 เพื่อสลับหน้าต่าง Chrome และ Cmd+0 เพื่อเปิดไดอะล็อกเลือกหน้าต่าง
    ดูได้จากไฟล์คอนฟิกของฉัน ซึ่งมันจำชื่อหน้าต่างและคงไว้ได้แม้รีสตาร์ตแล้ว

  • Hammerspoon ทรงพลังกว่า Automator บน Mac
    ในเมื่อ Automator รองรับ JavaScriptCore แล้ว ถ้า Hammerspoon เปลี่ยนจาก Lua ไปใช้ JS เช่นกัน ก็น่าจะดึงแพ็กเกจ Node มาใช้ได้ตรง ๆ
    ถ้าต้องเขียนใหม่เป็น Lua อีกรอบก็คงลำบากไม่น้อย