บันทึกเทคนิคของ zhaoJian

ตั้งค่าแอปเริ่มต้นบน Mac ทีละกลุ่มด้วย Defaultly ให้ไฟล์ไม่มีนามสกุลอย่าง .env และ Dockerfile เปิดด้วยโปรแกรมแก้ไขโค้ดได้

เทคโนโลยี ~9563 คำ · อ่าน 24 นาที - ครั้งที่อ่าน

เวลาเขียนโค้ดบน Mac ไฟล์ที่ไม่มีนามสกุลอย่าง .env, .gitignore และ Dockerfile สร้างความรำคาญมาตลอด ดับเบิลคลิกแล้วถ้าไม่เปิดใน TextEdit ก็เปิดไม่ได้เลย จะไปเปลี่ยนเป็น VS Code หรือ Zed ผ่าน ขอรายละเอียด › เปิดด้วย › เปลี่ยนทั้งหมด… ใน Finder ก็กดไปไม่มีผล ส่วน เปิดเสมอด้วย ก็มีผลแค่กับไฟล์เดียวที่เลือกอยู่

สาเหตุคือ macOS จัดไฟล์ไม่มีนามสกุลส่วนใหญ่ไว้เป็น public.data และไม่ยอมให้แอปไหนเป็นแอปเริ่มต้นของประเภทนี้ ต่อให้ใช้เครื่องมือบรรทัดคำสั่งไปแก้ก็ได้แค่ข้อผิดพลาด -50

อีกปัญหาคือการเชื่อมโยงไฟล์ถูกแย่งบ่อย พอติดตั้งแอปใหม่ (ตัวอย่างคลาสสิกคือ Xcode) การเชื่อมโยงที่ตั้งไว้ก็อาจถูกแย่งไป macOS ไม่แจ้งอะไรเลย และไม่มีวิธีกู้คืนในคลิกเดียว ต้องไล่แก้กลับทีละรูปแบบ แถมตั้งแต่ macOS 26.4 เป็นต้นมา เปลี่ยนแต่ละประเภทยังต้องกดยืนยันทีละครั้งด้วย

ผมเลยเขียน Defaultly ขึ้นมา เป็นแอป macOS ฟรีและโอเพนซอร์สสำหรับจัดการแอปเริ่มต้น ดูแลแอปที่ใช้เปิดประเภทไฟล์ นามสกุลไฟล์ และลิงก์ทั้งหมดได้จากหน้าต่างเดียว

หน้าต่างหลักของ Defaultly: แท็บประเภทไฟล์แบ่งเป็นกลุ่มข้อความ, Markdown, โค้ด, การกำหนดค่าและข้อมูล, ไฟล์ที่ไม่มีนามสกุล, PDF, เอกสาร ฯลฯ แต่ละกลุ่มเลือกแอปเริ่มต้นได้ทางขวา

Defaultly ทำอะไรได้บ้าง

  • ตั้งแอปเริ่มต้นตามกลุ่ม: ประเภทไฟล์แบ่งตามการใช้งานเป็น ข้อความ, Markdown, โค้ด, การกำหนดค่าและข้อมูล, ไฟล์ที่ไม่มีนามสกุล, PDF, เอกสาร, รูปภาพ, วิดีโอ, เสียง, ไฟล์บีบอัด แต่ละกลุ่มมีเมนูแอปหนึ่งเมนู ตั้งทั้งกลุ่มได้ในครั้งเดียว ไม่ต้องยืนยันทีละรายการ มีผลภายในไม่กี่วินาที
  • ไฟล์ที่ไม่มีนามสกุล: ให้ .env, Dockerfile, .gitignore, .npmrc เปิดด้วยโปรแกรมแก้ไขที่คุณเลือก แม้โปรแกรมนั้นจะไม่ได้ประกาศว่ารองรับไฟล์เหล่านี้ก็ตาม
  • ข้อยกเว้นรายรูปแบบ: ขยายกลุ่มแล้วกำหนดแอปเฉพาะให้รูปแบบเดียว เช่น .md หรือ .py ภายหลังถ้าเปลี่ยนแอปของกลุ่มก็ไม่กระทบรูปแบบเหล่านี้
  • นามสกุลกำหนดเอง: เพิ่มนามสกุลที่ไม่มีในรายการได้ รวมถึง .go, .rs, .kt, .dart, .lua ที่ macOS รู้จักแค่ในฐานะประเภทชั่วคราว
  • แอปเริ่มต้นสำหรับลิงก์: ลิงก์เว็บ (http, https), อีเมล (mailto), การสมัครรับปฏิทิน (webcal), การโทร, ข้อความ SMS, FaceTime, SSH, FTP และการแชร์หน้าจอ เลือกแอปเริ่มต้นได้ทั้งหมด หรือจะเลือก ไม่เปิด ก็ได้ เช่น ให้คลิกเบอร์โทรบนหน้าเว็บแล้วไม่โทรออก
  • วินิจฉัย: ลากไฟล์มาวางเพื่อดูว่าทำไมไฟล์นั้นเปิดด้วยแอปนี้ แล้วเปลี่ยนเป็นแอปอื่นได้ทันที ลากโฟลเดอร์มาวางเพื่อหาไฟล์ที่มีการตั้งค่า เปิดด้วย ของตัวเองแล้วล้างออก
  • แจ้งเตือนเมื่อถูกแย่ง: เมื่อ Xcode เบราว์เซอร์ หรือแอปอื่นแย่งการเชื่อมโยงที่คุณตั้งไว้ Defaultly จะแสดงแบนเนอร์ให้กู้คืนได้ในคลิกเดียว
  • เลิกทำและกู้คืน: บันทึกสแนปช็อตก่อนการเปลี่ยนแปลงทุกครั้ง เลิกทำได้ด้วย ⌘Z หรือกู้คืนกลับไปเป็นสภาพก่อนเปิด Defaultly ครั้งแรกก็ได้ ก่อนกู้คืนจะแสดงตัวอย่างการเปลี่ยนแปลงทุกรายการให้ดูก่อน
  • ถอนการติดตั้งอย่างหมดจด: ตัวถอนการติดตั้งในตัวจะคืนการเชื่อมโยงทุกรายการกลับไปยังแอปเดิมก่อน แล้วค่อยย้ายตัวเองไปถังขยะ
  • 15 ภาษา: หน้าตาแอปรองรับ 15 ภาษา รวมถึงไทย อังกฤษ จีนตัวย่อ และญี่ปุ่น สลับได้ภายในแอป

Defaultly ไม่ทำงานเบื้องหลัง ไม่มีรายการเข้าสู่ระบบ ไม่เชื่อมต่อเครือข่าย และไม่เก็บข้อมูล

ติดตั้ง Defaultly

ต้องใช้ macOS 26 Tahoe ขึ้นไป

  1. เปิด หน้า Releases แล้วดาวน์โหลด Defaultly-<version>.dmg จากส่วน Assets ของรุ่นล่าสุด
  2. คลิกสองครั้งเพื่อเปิด DMG แล้วลาก Defaultly ไปวางบนโฟลเดอร์ แอปพลิเคชัน ในหน้าต่างเดียวกัน
  3. นำ DMG ออก แล้วเปิด Defaultly จากโฟลเดอร์แอปพลิเคชัน

ไม่มีตัวติดตั้งและไม่ต้องใช้รหัสผ่านผู้ดูแลระบบ เวลาอัปเดตก็แค่ดาวน์โหลด DMG ใหม่แล้วลากทับตัวเดิม การตั้งค่า กฎ และสแนปช็อตจะยังอยู่ครบ

เปิดครั้งแรก: อนุญาตแอปที่ยังไม่ผ่านการรับรอง

Defaultly ยังไม่ได้รับการรับรอง (notarize) จาก Apple ครั้งแรกที่เปิด macOS จะบล็อกไว้ อนุญาตแค่ครั้งเดียวก็พอ:

  1. คลิกสองครั้งที่ Defaultly เมื่อ macOS แจ้งว่าไม่สามารถตรวจสอบได้ ให้คลิก เสร็จสิ้น อย่าคลิกปุ่มสีน้ำเงิน ย้ายไปยังถังขยะ

    หน้าต่างโต้ตอบของ macOS แจ้งว่าไม่สามารถตรวจสอบ Defaultly ได้ ให้คลิกปุ่มเสร็จสิ้น

  2. เปิด การตั้งค่าระบบ › ความเป็นส่วนตัวและความปลอดภัย เลื่อนลงไปที่ ความปลอดภัย แล้วคลิก ยืนยันจะเปิด ข้าง Defaultly ปุ่มนี้จะแสดงอยู่ประมาณหนึ่งชั่วโมงหลังขั้นตอนที่ 1

    หน้าความเป็นส่วนตัวและความปลอดภัยในการตั้งค่าระบบ Defaultly ถูกบล็อกในส่วนความปลอดภัย ข้างๆ มีปุ่มยืนยันจะเปิด

  3. ป้อนรหัสผ่านเข้าสู่ระบบหรือใช้ Touch ID แล้วคลิก ยืนยันจะเปิด อีกครั้งในหน้าต่างโต้ตอบที่ตามมา

    หน้าต่างยืนยัน คลิกยืนยันจะเปิดเพื่อเรียกใช้ Defaultly

หลังจากนี้ Defaultly ก็เปิดได้ตามปกติ แอปผู้ช่วยที่มาในตัวก็ได้รับอนุญาตไปพร้อมกัน เปิดไฟล์ไม่มีนามสกุลจะไม่มีคำเตือนขึ้นมาอีก ภาพหน้าจอเป็นภาษาอังกฤษ ส่วนบน macOS ภาษาไทย ชื่อปุ่มจะเป็นตามที่เขียนไว้ข้างบน

วิธีใช้งาน

ให้ .env และ Dockerfile เปิดด้วยโปรแกรมแก้ไข

ในแท็บ ประเภทไฟล์ หากลุ่ม ไฟล์ที่ไม่มีนามสกุล แล้วเลือกโปรแกรมแก้ไขของคุณจากเมนูทางขวา (เช่น VS Code, Zed, Sublime Text) จากนั้นคลิก นำไปใช้ ที่ด้านล่างของหน้าต่าง หลังจากนี้ดับเบิลคลิกไฟล์อย่าง .env หรือ Dockerfile ก็จะเปิดด้วยโปรแกรมนั้นทันที

ตั้งโปรแกรมแก้ไขเริ่มต้นให้ไฟล์โค้ดทีเดียว

ใช้วิธีเดียวกัน เลือกแอปให้กลุ่ม โค้ด, การกำหนดค่าและข้อมูล, Markdown แล้วคลิก นำไปใช้ กลุ่มโค้ดครอบคลุมภาษาที่ใช้กันบ่อยอย่าง JavaScript, TypeScript (.tsx), Python, Java, C, C++, C#, PHP, Ruby, Swift, Go, Rust, Kotlin, Dart, Lua, Shell, PowerShell, SQL รวมถึง .go และ .rs ที่ไม่มีประเภทอย่างเป็นทางการใน macOS ด้วย

ถ้าอยากให้รูปแบบไหนเป็นข้อยกเว้น ให้คลิกแถวของกลุ่มเพื่อขยาย แล้วเลือกแอปอื่นในเมนูของแถวนั้น แถวจะมีเครื่องหมาย ตั้งค่าแยก ถ้าจะให้กลับไปใช้ตามกลุ่ม ให้เลือก ใช้ตามกลุ่ม

ค้นหาและเพิ่มนามสกุลไฟล์

พิมพ์นามสกุลลงในช่องค้นหาที่มุมขวาบน เช่น py หรือ env แล้วจะข้ามไปยังแถวนั้นทันที ถ้านามสกุลไม่อยู่ในกลุ่มไหนเลย ผลการค้นหาจะมี เพิ่ม… ให้ พิมพ์นามสกุลลงไปแล้ว Defaultly จะแสดงว่า macOS รู้จักนามสกุลนี้เป็นอะไร พร้อมแนะนำกลุ่มที่ควรใส่ จากนั้นคลิก เพิ่ม ก็เสร็จ

ตั้งเบราว์เซอร์และแอปอีเมลเริ่มต้น

ใต้ประเภทไฟล์มีการ์ด ลิงก์ ใช้ตั้งว่าลิงก์เว็บเบราว์เซอร์ อีเมล การสมัครรับปฏิทิน การโทร SSH ฯลฯ จะเปิดด้วยแอปไหน ตอนเปลี่ยนเบราว์เซอร์ macOS จะยังเด้งหน้าต่างระบบขึ้นมาให้ยืนยัน เพื่อกันไม่ให้เบราว์เซอร์ถูกเปลี่ยนแบบเงียบๆ

นำไปใช้ เลิกทำ และกู้คืน

การเปลี่ยนแปลงทั้งหมดจะถูกพักไว้ก่อน ด้านล่างของหน้าต่างจะแสดงจำนวนการเปลี่ยนแปลงที่รออยู่ คลิก นำไปใช้ เพื่อให้มีผล หรือคลิก ละทิ้ง เพื่อยกเลิก

  • แก้ไข › เลิกทำ (⌘Z) เลิกทำการนำไปใช้ครั้งล่าสุด และเลิกทำต่อกันได้หลายครั้ง
  • ปุ่มลูกศรวงกลมในแถบเครื่องมือคือ กู้คืนเป็นค่าเริ่มต้น จะชี้ทุกประเภทไฟล์และลิงก์ที่ Defaultly เคยเปลี่ยนกลับไปยังแอปที่ใช้อยู่ตอนเปิด Defaultly ครั้งแรก ก่อนลงมือจะแสดงการเปลี่ยนแปลงทุกรายการให้ดู
  • การตั้งค่า › ประวัติ เก็บสแนปช็อตล่าสุดไว้ 20 รายการ กู้คืนรายการไหนก็ได้

วินิจฉัยว่าทำไมไฟล์นี้เปิดด้วยแอปนี้

สลับไปที่แท็บ วินิจฉัย แล้วลากไฟล์มาวางในกรอบเส้นประ จะแสดงว่าแอปไหนเปิดไฟล์นั้นและเพราะอะไร ไม่ว่าจะเป็นเพราะไฟล์นี้มีการตั้งค่า เปิดด้วย ของตัวเองใน Finder หรือคุณเลือกแอปนี้ให้กับไฟล์ประเภทนี้ หรือไม่ได้ตั้งอะไรไว้เลย macOS จึงเลือกเอง ใต้ผลลัพธ์กด ใช้แอปอื่นแทน เพื่อเปลี่ยนไปใช้แอปอื่นได้ทันที

ถ้าลากโฟลเดอร์มาวาง Defaultly จะแสดงทุกไฟล์ในนั้นที่มีการตั้งค่า เปิดด้วย ของตัวเอง เลือกไฟล์แล้วคลิก ลบการตั้งค่าของไฟล์เหล่านั้น ไฟล์เหล่านั้นก็จะกลับไปใช้การตั้งค่าตามประเภทของตัวเอง

Defaultly ทำได้อย่างไร

ในแพ็กเกจแอปของ Defaultly มีแอปผู้ช่วยตัวเล็กๆ ชื่อ Defaultly Helper อยู่ด้วย เมื่อคุณเลือกโปรแกรมแก้ไขให้ไฟล์ไม่มีนามสกุล Defaultly จะชี้ public.data ไปที่แอปผู้ช่วยนี้ ตอนเปิดไฟล์ประเภทนี้ แอปผู้ช่วยจะตรวจเนื้อหาไฟล์ ถ้าเป็นไฟล์ข้อความก็ส่งต่อให้โปรแกรมแก้ไขที่คุณเลือก ถ้าเป็นไฟล์ไบนารีก็แสดงใน Finder แล้วปิดตัวเอง มันไม่มีหน้าต่าง ไม่ค้างอยู่เบื้องหลัง และว่างไม่ถึงหนึ่งวินาทีก็ปิดตัวแล้ว

ประเภทที่แอปที่คุณเลือกรองรับอยู่แล้ว อย่าง .md หรือ .py จะถูกกำหนดให้แอปนั้นโดยตรง ไม่ผ่านแอปผู้ช่วย

macOS ไม่มี API สาธารณะสำหรับตั้งแอปเริ่มต้นให้ public.data ดังนั้น Defaultly จึงเขียนการเปลี่ยนแปลงประเภทไฟล์ทั้งหมดลงในค่าการตั้งค่า LaunchServices ในครั้งเดียว แล้วรีสตาร์ตบริการ lsd หนึ่งครั้งให้มีผล กลไกนี้ไม่มีเอกสารอย่างเป็นทางการจาก Apple และอาจใช้ไม่ได้หลังอัปเดตระบบ ถ้าการเปลี่ยนแปลงรายการไหนไม่มีผล Defaultly จะเปลี่ยนไปใช้ API สาธารณะ (ซึ่งต้องให้คุณยืนยันทีละรายการ) ส่วนไฟล์ไม่มีนามสกุลก็เปลี่ยนไปใช้กฎโฟลเดอร์ใน การตั้งค่า ได้

คำถามที่พบบ่อย

จะเปลี่ยนแอปเริ่มต้นของไฟล์ไม่มีนามสกุลบน Mac ได้อย่างไร? เปิด Defaultly เลือกแอปให้ ไฟล์ที่ไม่มีนามสกุล แล้วคลิก นำไปใช้ หลังจากนั้นไฟล์อย่าง .env และ Dockerfile จะเปิดด้วยแอปนั้น

ทำไม “เปลี่ยนทั้งหมด” ใน Finder ใช้ไม่ได้กับไฟล์ .env? macOS มองไฟล์แบบนี้เป็นข้อมูลทั่วไป (public.data) และไม่อนุญาตให้เปลี่ยนแอปเริ่มต้นผ่าน API สาธารณะ Defaultly อาศัยแอปผู้ช่วยเลี่ยงข้อจำกัดนี้

ทำไมไฟล์ .ts ไม่อยู่ในกลุ่มโค้ด? macOS รู้จัก .ts เป็นรูปแบบวิดีโอ (MPEG-2 transport stream) ถ้าเปลี่ยนจะกระทบไฟล์วิดีโอจริงๆ กลุ่มโค้ดจึงมีแค่ .tsx ของ TypeScript

เลิกทำการเปลี่ยนแปลงทั้งหมดได้ไหม? ได้ ตอนเปิดครั้งแรก Defaultly จะบันทึกการเชื่อมโยงเดิมไว้และจะไม่เขียนทับบันทึกนี้เด็ดขาด กู้คืนเป็นค่าเริ่มต้น จะชี้ทุกประเภทที่เคยเปลี่ยนกลับไปยังแอปเดิม

ถอนการติดตั้งอย่างไร? ที่ด้านล่างของ การตั้งค่า › สิ่งที่ Defaultly เขียน ให้คลิก ถอนการติดตั้ง Defaultly… แอปจะกู้คืนการเชื่อมโยงที่เปลี่ยนไว้ทั้งหมดก่อน แล้วค่อยย้ายตัวเองไปถังขยะ

รายละเอียดเพิ่มเติม รวมถึงโหมดนักพัฒนา กฎ และกฎโฟลเดอร์ ดูได้ที่ README ภาษาไทย ของโปรเจกต์

ที่อยู่โปรเจกต์บน GitHub: https://github.com/zhaojiannet/defaultly

แชร์:

ความคิดเห็น