3 คะแนน โดย GN⁺ 2025-10-03 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • แนวทางใหม่ที่ทำให้ตัวเบราว์เซอร์เองกลายเป็นเครื่องมือที่เขียนโปรแกรมได้ ผ่าน ไฟล์ตั้งค่า TypeScript ที่อิงบน Firefox
  • สามารถปรับแต่ง UI ของเบราว์เซอร์ เรียกใช้โปรเซสภายนอก และทำฟังก์ชันได้อย่างไร้ขีดจำกัด โดยไม่มีข้อจำกัดด้านความปลอดภัยของเว็บเอ็กซ์เทนชัน
  • มี ระบบโหมดและการแมปปุ่ม แบบสไตล์ Vim รองรับการท่องเว็บด้วยคีย์บอร์ดอย่างเต็มรูปแบบโดยไม่ต้องใช้เมาส์
  • มี ฟีเจอร์ที่เป็นมิตรกับนักพัฒนา ติดมาให้ เช่น hint mode, tab fuzzy finder, REPL และผ่านการใช้งานจริงมาแล้ว 6 เดือน
  • ดาวน์โหลดเวอร์ชันอัลฟ่า ได้บน macOS และ Linux และเข้ากันได้เต็มรูปแบบกับเอ็กซ์เทนชันและเวิร์กโฟลว์เดิมของ Firefox

ที่มาของการพัฒนา Glide

  • ผู้พัฒนาเคยใช้เอ็กซ์เทนชัน Tridactyl บน Firefox และพบปัญหาเรื่อง ข้อจำกัดด้านความปลอดภัยพื้นฐานของเว็บเอ็กซ์เทนชัน
    • บนบางเว็บไซต์เช่น addons.mozilla.org เอ็กซ์เทนชันจะถูกปิดใช้งานทั้งหมด ทำให้การแมปปุ่มใช้การไม่ได้
    • แม้แต่บนโฮมเพจที่ปรับแต่งเองก็พบปัญหาที่ Tridactyl ไม่ทำงาน
  • ข้อจำกัดเหล่านี้เป็น โมเดลความปลอดภัยที่จำเป็นของเบราว์เซอร์ เพื่อปกป้องผู้ใช้จากเอ็กซ์เทนชันที่เป็นอันตราย แต่ในอีกด้านหนึ่งก็จำกัดความสามารถในการขยายอย่างมาก
  • จากความต้องการเบราว์เซอร์ที่ปรับแต่งได้อย่างแท้จริงซึ่งทำได้ตั้งแต่การปรับแต่ง UI ของเบราว์เซอร์เองไปจนถึงการเรียกใช้เครื่องมือภายนอกแบบ ไร้ข้อจำกัด จึงเริ่มพัฒนา Glide ขึ้นมา

จุดแตกต่างสำคัญของ Glide

  • มอบการควบคุมอย่างสมบูรณ์ผ่าน ไฟล์ตั้งค่า TypeScript
    • ใช้งาน API และความสามารถที่เว็บเอ็กซ์เทนชันไม่มีทางรองรับได้
    • เนื่องจากผู้ใช้ปลายทางเป็นผู้เขียนไฟล์ตั้งค่าเอง จึงไม่จำเป็นต้องมีข้อจำกัดด้านความปลอดภัยแบบเดิม เป็นโมเดลความปลอดภัยที่ต่างออกไปโดยพื้นฐาน
  • สิ่งที่ทำได้จากไฟล์ตั้งค่า
    • กำหนด การแมปปุ่ม แบบกำหนดเอง
    • เข้าถึง Web Extension API
    • รัน โปรเซสภายนอก ตามต้องการ
    • กำหนด มาโคร เป็นต้น
  • สร้างบนพื้นฐานของ Firefox จึงทำงานร่วมกับเอ็กซ์เทนชันและเวิร์กโฟลว์เดิมของ Firefox ได้โดยตรง

ตัวอย่างการตั้งค่าที่ใช้งานได้จริง

โคลน GitHub repository อัตโนมัติและเปิดตัวแก้ไขโค้ด

glide.keymaps.set("normal", "gC", async () => {  
  // extract the owner and repo from a url like 'https://github.com/glide-browser/glide'  
  const [owner, repo] = glide.ctx.url.pathname.split("/").slice(1, 3);  
  if (!owner || !repo) throw new Error("current URL is not a github repo");  
  // * clone the current github repo to ~/github.com/$owner/$repo  
  // * start kitty with neovim open at the cloned repo  
  const repo_path = glide.path.join(glide.path.home_dir, "github.com", owner, repo);  
  await glide.process.execute("gh", ["repo", "clone", glide.ctx.url, repo_path]);  
  await glide.process.execute("kitty", ["-d", repo_path, "nvim"], { cwd: repo_path });  
}, { description: "open the GitHub repo in the focused tab in Neovim" });  
  • เมื่อกด gC บนหน้า GitHub repository จะทำงานต่อไปนี้โดยอัตโนมัติ
    • ดึงชื่อ owner และ repository จาก URL ปัจจุบัน
    • โคลน repository ไปยังพาธ ~/github.com/$owner/$repo
    • เปิด neovim ในเทอร์มินัล kitty และย้ายไปยัง repository ที่โคลนไว้
  • ช่วยประหยัดเวลาได้ครั้งละไม่กี่วินาที และใช้เวลาเพิ่มการตั้งค่าเพียงไม่กี่นาที

สลับไปแท็บปฏิทินอย่างรวดเร็ว

glide.keymaps.set("normal", "gc", async () => {  
  const tab = await glide.tabs.get_first({ url: "https://calendar.google.com/*"; });  
  assert(tab && tab.id);  
  await browser.tabs.update(tab.id, { active: true });  
}, { description: "[g]o to [c]alendar.google.com" });  
  • กด gc เพื่อสลับไปยังแท็บ Google Calendar ได้ทันที

ระบบโหมด

  • นำ แนวคิดเรื่องโหมด ของ Vim มาใช้ ทำให้การแมปปุ่มทั้งหมดผูกกับโหมดเฉพาะ
  • สลับโหมดอัตโนมัติ ตามการโต้ตอบกับเบราว์เซอร์
    • โหมด normal: โหมดพื้นฐาน
    • โหมด insert: สลับอัตโนมัติเมื่อคลิกองค์ประกอบ <input> เพื่อไม่ให้การแมปปุ่มรบกวนการพิมพ์ข้อความ
    • โหมด ignore: สลับด้วย Shift+Escape ใช้เมื่อเว็บไซต์ชนกับการแมปปุ่ม

การนำทางด้วยคีย์บอร์ด

Hint mode

  • กดปุ่ม f เพื่อเข้า hint mode
  • แสดงโอเวอร์เลย์ ป้ายข้อความ บนองค์ประกอบที่คลิกได้ทั้งหมด เช่น ลิงก์และปุ่ม
  • เมื่อพิมพ์ป้ายกำกับ ระบบจะโฟกัสและคลิกองค์ประกอบนั้น
  • ควบคุมหน้าเว็บได้อย่างสมบูรณ์โดยไม่ต้องใช้เมาส์

ฟีเจอร์ที่ชอบเป็นการส่วนตัว

  • gI: โฟกัสไปยัง ช่องกรอกข้อมูลที่มองเห็นและมีขนาดใหญ่ที่สุด บนหน้าโดยอัตโนมัติ เป็นฟีเจอร์ที่ให้ความรู้สึกเหมือนเวทมนตร์
  • <space><space>: เรียกใช้ tab fuzzy finder เพื่อหาแท็บที่หายไปได้ง่าย
  • <c-i> และ <c-o>: สำคัญมากสำหรับ การนำทางแท็บก่อนหน้า
  • :repl: ทดสอบการเปลี่ยนแปลงในการตั้งค่า ได้อย่างรวดเร็ว
  • hint mode: มีประโยชน์เวลาที่ไม่อยากเอื้อมมือไปจับเมาส์
  • UI สไตล์ which-key: อินเทอร์เฟซที่ช่วย เตือนความจำเรื่องการแมปปุ่ม ต่าง ๆ

สถานะปัจจุบันและความพร้อมใช้งาน

  • ใช้งานในชีวิตประจำวันมาแล้วประมาณ 6 เดือน
  • แม้ยังอยู่ใน ช่วงอัลฟ่าเริ่มต้น แต่สามารถดาวน์โหลดได้บน macOS และ Linux
  • แนะนำให้ดูบทสอนผ่านคำสั่ง :tutor (แม้จะยังไม่เสร็จสมบูรณ์)
  • ผู้ใช้ Linux ยังต้องแตกไฟล์และตั้งค่าด้วยตนเอง เพราะยังไม่ถูกเพิ่มเข้า package repository
  • ดูตัวอย่างเพิ่มเติมได้ใน cookbook และ dotfiles ของผู้พัฒนา
  • เนื่องจากเป็นเวอร์ชันอัลฟ่า API บางส่วนยังไม่ถูกพัฒนาครบ แต่เป้าหมายหลักคือการมอบการควบคุมอย่างสมบูรณ์

2 ความคิดเห็น

 
shakespeares 2025-10-07

ดูเหมือนว่าจะต้องใช้งานแบบสายฮาร์ดคอร์พอสมควรนะครับ ถ้าสามารถใช้งานได้คุ้มค่าพอที่จะชดเชยข้อดีของ GUI ได้ล่ะก็นะ..

 
GN⁺ 2025-10-03
ความคิดเห็นใน Hacker News
  • โดยรวมไม่ใช่แนวของฉันเสียทีเดียว แต่การฟอร์กจาก Firefox แทน Chromium ให้ความรู้สึกสดใหม่ ตอนนี้ก็เลยมี Firefox fork ที่ถูกปรับแต่งหนัก ๆ อยู่ถึงสามตัวแล้วคือ Zen, Floorp และตัวนี้
    • ยังมี Tor ด้วย นับว่าเข้ากระแสนี้เหมือนกัน
    • มี LibreWolf ด้วย ซึ่งส่วนตัวก็หวังว่านี่น่าจะกลายเป็นค่าเริ่มต้นได้
  • คิดว่าไอเดียดีมาก และก็สบายใจขึ้นเมื่อเห็นคอมเมนต์ที่บอกว่าจะดูแลรักษาด้วยวิธีติดตาม security patch
  • ฉันก็เคยเจอข้อจำกัดของ addons.mozilla.org ตอนใช้ Vimium C เหมือนกัน แม้จะไม่ได้เกิดบ่อยจนถึงขั้นต้องเปลี่ยนเบราว์เซอร์ แต่กลับรู้สึกสนใจเครื่องมือที่ทำให้เดสก์ท็อปลินุกซ์ทั้งระบบเน้นคีย์บอร์ดมากกว่ามากกว่า อย่างเช่นสิ่งที่ homerow ทำบน macOS
  • ผู้เขียนเอง ถ้ามีอะไรสงสัยก็ถามได้เสมอ
    • ชอบ Hint API มาก โดยเฉพาะตรงที่ให้ hint กับองค์ประกอบของเบราว์เซอร์เองได้ แต่คิดว่าผู้ใช้ระดับสูงน่าจะอยากใช้ระบบ hint เพื่อเลือกองค์ประกอบได้หลากหลายประเภทกว่านี้ อยากให้ขยายความสามารถให้ส่ง CSS selector เพื่อกำหนดได้ว่าองค์ประกอบไหนจะมี hint เช่น ผู้ใช้อาจสร้างคำสั่งที่เลือกองค์ประกอบเฉพาะแล้วคัดลอกข้อความของมันได้
    • สงสัยว่ารองรับ DRM หรือไม่ อยากรู้ว่าใช้กับเว็บไซต์สตรีมมิงเชิงพาณิชย์อย่าง Netflix ได้ไหม ก่อนหน้านี้เรื่องนี้เป็นปัญหาใหญ่กับ Firefox fork อีกอย่างก็สงสัยเรื่อง Firefox Sync และอยากถามด้วยว่าสามารถเรียก RPC จาก process ภายนอกได้หรือไม่ เช่น ดึง URL, รายการ หรือคอนเทนต์ของแท็บที่เปิดอยู่ในตอนนี้ หรือควบคุมแท็บจากระยะไกลให้ย้ายไปยัง URL อื่น เพื่อเอาไปเชื่อมกับแอปหรือสคริปต์อื่น ๆ ได้หรือเปล่า Firefox ยังอ่อนในด้านนี้ สุดท้ายก็อยากรู้ว่ามีความปลอดภัยมากน้อยแค่ไหน
    • โปรเจกต์ดูยอดเยี่ยมมาก อยากรู้ว่า config ยืดหยุ่นพอให้ตั้งคีย์ไบน์ดิ้งสไตล์ Helix/Kakoune ได้ไหม
    • อยากรู้ว่าสามารถใช้ไฟล์ config เพื่อติดตั้งส่วนขยายอัตโนมัติและเปลี่ยนการตั้งค่าในตัวของ Firefox ได้หรือไม่ โปรแกรมอื่น ๆ ที่เหลือฉันตั้งค่าด้วย dotfiles หมด ก็เลยอยากให้ Firefox มีตัวเลือกแบบนั้นเหมือนกัน
  • ดูดีมากจริง ๆ ตอนนี้ฉันใช้ Firefox กับ VimFX และ config.js ที่ซับซ้อนมาพักใหญ่แล้ว ถ้าแพ็กเกจ NixOS ถูกรวมเมื่อไรจะลองแน่นอน ถ้ายังใช้ Firefox ESR ปกติอยู่ก็ขอแนะนำ VimFX อย่างมาก ลองดู https://github.com/akhodakivskiy/VimFx ได้เลย ข้อเสียใหญ่สุดของ VimFX คือเอกสาร Firefox internal API มีน้อยมาก งานอย่างการจัดการแท็บซึ่งถ้าเป็น WebExtensions API คงจบง่าย ๆ กลับต้องไปขุดซอร์สโค้ดเอง สิ่งที่ฉันคาดหวังที่สุดจาก Glide คือการเปิดให้ใช้ API แบบนี้จากไฟล์ config ได้
  • ʕ•ᴥ•ʔ ฉันเจอสิ่งนี้จาก Bear Blog และกำลังลองใช้อย่างสนุกอยู่ ตั้งค่า sidebar กับ pinned tabs ให้คล้าย zen browser ของฉัน แล้วเอาไปใส่ใน productivity stack สำหรับงานเพื่อทดสอบอยู่ ยังปรับธีม glide-hint CSS ให้เข้ากับรสนิยมของตัวเองด้วย userChrome.css อีกด้วย จะคอยติดตามและหวังว่าจะได้เห็นงานเจ๋ง ๆ ต่อไป
    1. https://freeimage.host/i/KMQu3EQ
    2. https://freeimage.host/i/KMQAJ9t
    • โดยเฉลี่ยแล้วเปิดแท็บพร้อมกันกี่แท็บ อยากรู้ว่ามีปัญหาในการหาแท็บจาก favicon อย่างเดียวหรือเปล่า
  • ยังไม่ได้ดูโครงสร้างซอร์สโค้ดลึกมาก แต่พอพูดว่าเป็น Firefox fork ก็สงสัยว่าในอนาคตจะวางแผนรวม security patch หรือการแก้ไขต่าง ๆ จาก Firefox อย่างไร
    • ทำด้วยวิธีแพตช์อัตโนมัติและเพิ่มไฟล์ใหม่ ตอน build จะดาวน์โหลดซอร์ส Firefox แล้วนำแพตช์ไปใช้ ทำให้อัปเกรดเวอร์ชัน Firefox ได้ง่ายมาก ในทางปฏิบัติจึงอัปเดตได้ถี่และกำลังตามช่อง Firefox beta อยู่
  • ในที่สุด compact mode ก็กลับมาแล้ว รู้สึกขอบคุณมาก ดีใจที่ได้เห็น Firefox fork และคอนเซปต์แบบนี้ก็น่าสนใจมาก ฉันเป็นคนที่ใช้ vim ทุกที่อยู่แล้ว เลยรู้สึกว่าต้องลองด้วยตัวเองให้ได้
    • แต่ตอนเลื่อนด้วย j/k รู้สึกว่าการเคลื่อนไหวยังไม่ลื่นนัก เลยสงสัยว่ามีวิธีทำให้การเลื่อนดูเป็นธรรมชาติกว่านี้ไหม (หรือบางทีฉันอาจอ่านเอกสารข้ามไปเอง)
  • คิดว่าค่อนข้างเจ๋ง ฉันใช้ Vimium บน Chrome มาตลอดและพอใจมาก
    1. https://chromewebstore.google.com/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb
    • สงสัยว่าใช้บนหน้า chrome:// ได้ไหม เวอร์ชัน Firefox ของ Vimium ทำตรงนี้ได้น่าผิดหวังเสมอ
  • ฉันไล่อ่านเอกสารไปเรื่อย ๆ แล้วรู้สึกว่านี่คือเบราว์เซอร์ในฝันของฉัน เป็น Firefox-based และ WebExt API ก็ใช้ได้เต็มที่ แถมยังสั่งรันคำสั่งนอกเบราว์เซอร์ได้ด้วย ชอบมาก อยากให้ Firefox Developer Edition เป็นแบบนี้ และวันนี้จะต้องลองใช้ทันทีแน่นอน