HN เผยแพร่: FlashSpace – ตัวแทน Spaces สำหรับ macOS ที่รวดเร็วและโอเพนซอร์ส
(github.com/wojciech-kulik)- FlashSpace คือ ตัวจัดการพื้นที่ทำงานเสมือน ที่ออกแบบมาเพื่อเสริมและแทนที่ Spaces พื้นฐานของ macOS โดยมีเป้าหมายให้สลับพื้นที่ทำงานได้รวดเร็วโดยไม่ต้องรอแอนิเมชันของ macOS
- สามารถกำหนดแอปและจอแสดงผลให้กับแต่ละพื้นที่ทำงานได้ และเมื่อสลับ พื้นที่ทำงานจะแสดงแอปที่กำหนดไว้บนจอนั้นพร้อมซ่อนแอปอื่น ๆ ทำให้รองรับ การสลับหลายจอแบบอิสระ
- มีฟีเจอร์ Space Control, Workspace Switcher ที่ใช้
Option + Tab, Focus Manager, โปรไฟล์, ท่าทางปัด, Floating Apps, การตั้งค่าแบบ JSON/YAML/TOML, CLI และการเชื่อมต่อกับ SketchyBar และ Raycast - ต้องใช้ macOS 14.0 ขึ้นไป และเปิดการตั้งค่า “Displays have separate Spaces” พร้อมรองรับการติดตั้งผ่าน Homebrew, ดาวน์โหลดไบนารี หรือคอมไพล์จากซอร์ส
- ไม่รองรับพื้นที่ทำงานระดับหน้าต่างรายบานหรือการจัดเลย์เอาต์ และยังคงออกแบบโดยยึดแนวทางแสดง/ซ่อนแอปเป็นหลัก เนื่องจาก macOS ไม่มี public API สำหรับซ่อนหน้าต่างเฉพาะบาน และเพื่อคงไว้ซึ่ง ความเรียบง่ายและประสิทธิภาพ
FlashSpace ทำอะไรได้บ้าง
- FlashSpace เป็น ตัวจัดการพื้นที่ทำงานเสมือน สำหรับ macOS ที่ออกแบบมาเพื่อเสริมและแทนที่ macOS Spaces แบบเดิม
- เป้าหมายคือ การสลับพื้นที่ทำงานที่รวดเร็ว โดยไม่ต้องรอแอนิเมชันของ macOS
- แต่ละพื้นที่ทำงานสามารถกำหนดแอปได้ และตัวพื้นที่ทำงานเองก็สามารถกำหนดให้กับจอแสดงผลเฉพาะได้
- เมื่อสลับไปยังพื้นที่ทำงาน แอปที่กำหนดไว้จะถูกแสดงโดยอัตโนมัติ และแอปอื่นบนจอเดียวกันจะถูกซ่อน
- สามารถ สลับพื้นที่ทำงานแยกกันอย่างอิสระ บนหลายจอแสดงผลได้
การติดตั้งและลำดับการใช้งานพื้นฐาน
- ความต้องการของระบบคือ macOS 14.0 ขึ้นไป และต้องเปิด “Displays have separate Spaces” ในการตั้งค่าระบบ
Desktop & Dock - รองรับการติดตั้งผ่าน Homebrew, ดาวน์โหลดรีลีสไบนารี และคอมไพล์จากซอร์ส
- คำสั่งติดตั้งผ่าน Homebrew คือ
brew install flashspace - สามารถดาวน์โหลดไบนารีได้จาก Releases Page
- คำสั่งติดตั้งผ่าน Homebrew คือ
- ลำดับการใช้งานพื้นฐานมีดังนี้
- ย้ายทุกแอปไปยัง macOS Space เดียวของแต่ละจอแสดงผล
- สร้างพื้นที่ทำงาน
- กำหนดแอป
- กำหนดจอแสดงผลให้พื้นที่ทำงาน หรือใช้โหมดไดนามิก
- ตั้งค่าคีย์ลัดเพื่อให้เรียกใช้งานได้รวดเร็ว
- ทำขั้นตอนเดียวกันกับพื้นที่ทำงานอื่น
- สลับไปยังพื้นที่ทำงานที่ตั้งไว้ด้วยคีย์ลัด
- หากต้องการให้แอปเดียวกันอยู่ในหลายพื้นที่ทำงาน สามารถใช้ฟีเจอร์ Floating Apps ในการตั้งค่าแอป หรือเพิ่มแอปเข้าไปในหลายพื้นที่ทำงานจากหน้าต่างหลักของแอปได้
ฟีเจอร์หลัก
- มีทั้ง การสลับพื้นที่ทำงานอย่างรวดเร็ว และการรองรับหลายจอแสดงผล
- Space Control เป็นฟีเจอร์สำหรับพรีวิวพื้นที่ทำงานทั้งหมดในรูปแบบกริดและสลับไปยังพื้นที่ที่ต้องการ
- สามารถสลับพื้นที่ทำงานได้ด้วย
0-9และปุ่มลูกศร
- สามารถสลับพื้นที่ทำงานได้ด้วย
- Workspace Switcher โดยค่าเริ่มต้นใช้
Option + Tabเพื่อเปิดรายการพื้นที่ทำงานและสลับใช้งาน- ทำงานคล้ายกับตัวสลับแอปของ macOS อย่าง
CMD + Tab
- ทำงานคล้ายกับตัวสลับแอปของ macOS อย่าง
- Focus Manager รองรับการย้ายโฟกัสระหว่างหน้าต่างไปตามทิศทางที่ต้องการด้วยคีย์ลัด และยังรองรับการข้ามระหว่างจอแสดงผล
- ฟีเจอร์อื่น ๆ ได้แก่
- เปิดใช้งานพื้นที่ทำงานหลังตรวจจับการโฟกัสของแอป
- Cursor manager ที่จัดเคอร์เซอร์ให้อยู่กึ่งกลางหน้าต่างที่ใช้งานโดยอัตโนมัติ
- Profiles สำหรับสลับการตั้งค่าหลายชุดอย่างรวดเร็ว
- เมนูบาร์ที่ตั้งค่าไอคอนและข้อความแยกตามพื้นที่ทำงานได้
- ปรับแต่งการทำงานของท่าทางปัดบนแทร็กแพด
- การตั้งค่าผ่าน GUI และไฟล์คอนฟิก
- รองรับไฟล์คอนฟิกแบบ JSON, YAML, TOML
- ควบคุมแอปผ่าน CLI
- รองรับ Picture-in-Picture
- เชื่อมต่อกับ SketchyBar
- รองรับ Raycast extension
วิธีการกำหนดจอแสดงผล
- FlashSpace รองรับการกำหนดจอแสดงผล 2 แบบ คือ โหมดคงที่ และ โหมดไดนามิก
- โหมดคงที่เป็นค่าเริ่มต้น โดยจะกำหนดแต่ละพื้นที่ทำงานให้กับจอแสดงผลเฉพาะ
- เหมาะกับผู้ใช้ที่ต้องการพื้นที่ทำงานประจำสำหรับแต่ละจอแบบเดียวกับ macOS Spaces
- หากใช้หลายจอและสลับการจัดวางบ่อย อาจใช้งานได้ลำบาก
- โหมดไดนามิกจะกำหนดแต่ละพื้นที่ทำงานไปยังจอที่มีแอปของพื้นที่ทำงานนั้นอยู่โดยอัตโนมัติ
- สามารถแสดงพื้นที่ทำงานเดียวกันพร้อมกันบนหลายจอได้
- มีประโยชน์เมื่ออยากย้ายแอประหว่างจอเพื่อจัดพื้นที่ทำงานใหม่
- ในโหมดนี้จะไม่สามารถแสดง พื้นที่ทำงานว่าง ได้
- สามารถเปลี่ยนโหมดการกำหนดจอแสดงผลได้ใน Workspaces ของการตั้งค่าแอป
การรองรับ Picture-in-Picture และข้อจำกัด
- FlashSpace รองรับโหมด Picture-in-Picture แต่ยังเป็นฟีเจอร์ทดลอง
- สามารถปิดฟีเจอร์นี้ได้ที่
App Settings -> Workspaces - macOS ไม่มี public API สำหรับซ่อนเฉพาะบางหน้าต่าง และเมื่อซ่อนแอป หน้าต่าง PiP ก็จะถูกซ่อนไปด้วย
- เพื่อแก้ปัญหานี้ FlashSpace จะตรวจจับว่าแอปรองรับ PiP หรือไม่ แล้ว ซ่อนหน้าต่างทั้งหมดไว้ที่มุมจอ ยกเว้นหน้าต่าง PiP
- หากไม่พบหน้าต่าง PiP ที่มองเห็นได้ จะกลับไปใช้พฤติกรรมมาตรฐาน
- เบราว์เซอร์ที่รองรับได้แก่ Safari, Zen Browser, Chrome, Firefox, Brave, Vivaldi, Arc, Dia, Opera, Microsoft Edge และ Comet
- หากภาษาของเบราว์เซอร์ไม่ได้ตั้งเป็น English ฟีเจอร์นี้อาจไม่ทำงาน
หลักการออกแบบและสิ่งที่ตั้งใจไม่รองรับ
- คุณค่าของโปรเจกต์นี้คือ ประสิทธิภาพ, ความเรียบง่าย, ความเสถียร, การไม่รบกวนการทำงาน และปรัชญาแบบ UNIX
- FlashSpace มองว่าการจัดการพื้นที่ทำงานเป็นงานอย่างหนึ่ง และมุ่งทำงานนั้นให้ดี
-
การทำงานแบบไม่รบกวน
- FlashSpace ไม่จัดการหน้าต่างแบบเชิงรุก
- หากเรียกแอปที่ไม่ได้ถูกกำหนดไว้สำหรับพื้นที่ทำงานนั้นหลังจากสลับพื้นที่ทำงาน แอปนั้นจะถูกแสดงทับบนแอปของพื้นที่ทำงาน
- พฤติกรรมนี้ช่วยให้เข้าถึงแอปอื่นได้รวดเร็วโดยไม่เกิดอาการกลิทช์หรือการสลับพื้นที่ทำงานโดยไม่จำเป็น
- ในตัวจัดการหน้าต่างแบบไทล์ มักเกิดอาการกลิทช์ได้ง่ายจากป๊อปอัปหรือกล่องโต้ตอบที่ไม่ได้ตั้งค่าไว้
- FlashSpace เลือกไม่จัดการหน้าต่างและแอปที่ไม่ได้กำหนดไว้ เพื่อให้ทำงานร่วมกับระบบได้โดยไม่รบกวนกัน
-
ไม่รองรับพื้นที่ทำงานระดับหน้าต่างรายแอป
- FlashSpace ไม่รองรับแนวคิดการแยกหน้าต่างแต่ละบานของแอปตามพื้นที่ทำงาน
- นี่เป็นการตัดสินใจโดยตั้งใจเพื่อคงความเรียบง่ายและความเร็ว
- มันพึ่งพาความสามารถแสดง/ซ่อนแบบเนทีฟ เพื่อให้จัดการและสลับพื้นที่ทำงานได้อย่างมีประสิทธิภาพ
- วิธีนี้ช่วยประหยัดแบตเตอรี่และไม่ทำให้ฟีเจอร์ระบบอย่าง Mission Control เสียไป
- การรองรับระดับหน้าต่างรายบานจะเพิ่มความซับซ้อนอย่างมากและอาจกระทบต่อประสิทธิภาพ
- macOS ไม่มี public API สำหรับซ่อนหน้าต่างเฉพาะบาน และทางเลือกตอนนี้มีเพียงย้ายหน้าต่างไปที่มุมจอหรือย่อหน้าต่าง ซึ่งทั้งสองแบบไม่ใช่ประสบการณ์ใช้งานที่ดีนัก
-
ไม่รองรับเลย์เอาต์
- FlashSpace ไม่รองรับการย้ายหน้าต่าง ปรับขนาด หรือเปลี่ยนเลย์เอาต์
- ฟีเจอร์เหล่านี้เพิ่มความซับซ้อนอย่างมากและอาจส่งผลเสียต่อประสิทธิภาพ
- การรองรับทุก edge case และกลิทช์ต้องใช้ความพยายามอย่างมาก
- สามารถใช้ร่วมกับแอปจัดการหน้าต่างอย่าง Magnet, Rectangle, Raycast ฯลฯ ได้อยู่แล้ว จึงไม่ทำฟังก์ชันนี้ซ้ำ
การเชื่อมต่อ, CLI, การคอมไพล์
- สามารถเชื่อมต่อกับ SketchyBar และเครื่องมืออื่น ๆ ได้ และจะรันสคริปต์ที่ตั้งค่าไว้เมื่อมีการเปลี่ยนพื้นที่ทำงาน
- CLI รองรับการจัดการพื้นที่ทำงาน แอป และโปรไฟล์
- ต้องติดตั้งก่อนจากส่วน CLI ในการตั้งค่าแอป
- สามารถดูคำสั่งที่ใช้งานได้ด้วย
flashspace --help
- การคอมไพล์จากซอร์สใช้ XcodeGen เพื่อสร้างโปรเจกต์ Xcode จาก
project.yml- หลังโคลนรีโพแล้ว ให้ติดตั้ง dependency ด้วย
brew bundle - จากนั้นรัน
xcodegen generateแล้วเปิดFlashSpace.xcodeprojใน Xcode เพื่อคอมไพล์ - ทุกครั้งที่สลับ branch หรือ pull การเปลี่ยนแปลงใหม่ ต้องรัน
xcodegen generateอีกครั้ง - หากต้องการสร้างโปรเจกต์พร้อมการตั้งค่าการเซ็นโค้ด สามารถใช้
XCODE_DEVELOPMENT_TEAM=YOUR_TEAM_ID xcodegen generate
- หลังโคลนรีโพแล้ว ให้ติดตั้ง dependency ด้วย
เคล็ดลับการใช้งาน
- macOS มีบั๊กที่ทำให้แอปไปโผล่บนจอผิดหลังปลุกเครื่องจากโหมดพัก
- จะเกิดขึ้นเมื่อแอปถูกซ่อนไว้ระหว่างที่เครื่องพัก
- หากเปิดจอทุกจอก่อนล็อกอินหลังปลุกเครื่อง แอปอาจกลับไปแสดงบนจอที่ถูกต้องได้
- macOS 15 มีฟีเจอร์ย้ายและปรับขนาดหน้าต่างได้โดยไม่ต้องใช้แอปจากภายนอก
- สามารถดูเมนูย่อย
Move & Resizeได้จากWindowบนเมนูบาร์ - การปรับแต่งคีย์ลัดยังค่อนข้างจำกัด และหากต้องการความยืดหยุ่นมากกว่านั้น การใช้แอปจัดการหน้าต่างอย่าง Raycast หรือ Magnet จะเหมาะกว่า
- สามารถดูเมนูย่อย
- การสลับโฟกัสระหว่างหน้าต่างของแอปเดียวกันทำได้ด้วยคีย์ลัด
Cmd + `ของ macOS - SKHD คือเครื่องมือ CLI สำหรับกำหนดคีย์ลัดโกลบอลแบบกำหนดเอง และสามารถใช้ร่วมกับ FlashSpace CLI ได้
- ผู้ใช้ Raycast สามารถจัดการ FlashSpace ได้โดยไม่ต้องละมือจากคีย์บอร์ดผ่าน Raycast extension
1 ความคิดเห็น
สงสัยว่าใช้งานร่วมกับ Amethyst ได้ไหม อยากได้หน้าต่างแบบไทล์ แต่ไม่อยากได้อาการหน่วงตอนสลับสเปซ
ดีมาก! หวังว่าจะเพิ่มมุมมองแบบกริดของเวิร์กสเปซได้ คิดถึง TotalSpaces
มาถูกจังหวะมาก ตอนนี้กำลังสำรวจตัวเลือกในพื้นที่นี้อีกครั้งและตัดสินใจเลือก AeroSpace ไว้แล้ว จะลองใช้ตัวนี้ดู
ขอบคุณ! เพิ่งติดตั้งเมื่อกี้และจนถึงตอนนี้ก็ทำงานได้ดี
ใช้ AeroSpace เพื่อจุดประสงค์นี้มานานกว่าหนึ่งปีแล้ว ปิดความสามารถด้านไทล์ทั้งหมดในการตั้งค่า และใช้คีย์ลัดอยู่แค่สองอย่าง: สลับไปยังเวิร์กสเปซ และย้ายหน้าต่างปัจจุบันไปยังเวิร์กสเปซ จำเป็นมากเวลาทำงานบนหน้าจอเล็ก