- Một cách tiếp cận mới dựa trên Firefox, biến chính trình duyệt thành công cụ có thể lập trình thông qua tệp cấu hình TypeScript
- Có thể triển khai các tính năng gần như không giới hạn như tùy biến giao diện trình duyệt, gọi tiến trình bên ngoài mà không bị ràng buộc bởi các hạn chế bảo mật của web extension
- Cung cấp hệ thống mode và ánh xạ phím theo phong cách Vim, hỗ trợ duyệt web hoàn toàn bằng bàn phím mà không cần chuột
- Tích hợp sẵn các tính năng thân thiện với lập trình viên như hint mode, tab fuzzy finder, REPL và đã được kiểm chứng qua 6 tháng sử dụng thực tế
- Có thể tải bản alpha cho macOS và Linux, đồng thời tương thích hoàn toàn với các Firefox extension và workflow hiện có
Bối cảnh phát triển Glide
- Trong khi dùng extension Tridactyl trên Firefox, tác giả đã gặp phải vấn đề về những hạn chế bảo mật mang tính nền tảng của web extension
- Trên một số trang nhất định như addons.mozilla.org, extension bị vô hiệu hóa hoàn toàn nên mọi ánh xạ phím đều không hoạt động
- Ngay cả trên trang chủ tùy chỉnh cũng phát sinh vấn đề Tridactyl không hoạt động
- Những ràng buộc này là mô hình bảo mật thiết yếu của trình duyệt để bảo vệ người dùng khỏi extension độc hại, nhưng đồng thời cũng hạn chế mạnh khả năng mở rộng
- Từ nhu cầu về một trình duyệt thật sự tùy biến, có thể làm mọi thứ không giới hạn từ chỉnh sửa chính UI của trình duyệt đến gọi công cụ bên ngoài, tác giả bắt đầu phát triển Glide
Điểm khác biệt cốt lõi của Glide
- Tệp cấu hình TypeScript mang lại quyền kiểm soát hoàn toàn
- Có thể dùng các API và tính năng mà web extension không bao giờ hỗ trợ được
- Vì chính người dùng cuối tự viết tệp cấu hình nên không cần áp các ràng buộc bảo mật như với extension; đây là một mô hình bảo mật khác về bản chất
- Những việc có thể làm trong tệp cấu hình
- Định nghĩa ánh xạ phím tùy chỉnh
- Truy cập API của web extension
- Chạy tiến trình bên ngoài tùy ý
- Định nghĩa macro và nhiều thứ khác
- Được xây dựng trên nền Firefox nên các Firefox extension và workflow hiện có vẫn hoạt động nguyên vẹn
Ví dụ cấu hình thực tế
Tự động clone kho GitHub và mở trình soạn thảo
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" });
- Khi nhấn
gC trên trang kho GitHub, hệ thống sẽ tự động thực hiện
- Trích xuất tên chủ sở hữu và tên kho từ URL hiện tại
- Clone kho vào đường dẫn
~/github.com/$owner/$repo
- Mở neovim trong terminal kitty và chuyển đến kho vừa clone
- Mỗi lần như vậy có thể tiết kiệm vài giây thao tác, trong khi việc thêm cấu hình chỉ mất vài phút
Chuyển nhanh sang tab lịch
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" });
- Có thể chuyển ngay sang tab Google Calendar bằng phím
gc
Hệ thống mode
- Mượn khái niệm mode của Vim, mọi ánh xạ phím đều được gắn với một mode cụ thể
- Tự động chuyển mode theo cách tương tác với trình duyệt
- mode
normal: mode mặc định
- mode
insert: tự động chuyển khi nhấp vào phần tử <input>, để ánh xạ phím không cản trở việc nhập văn bản
- mode
ignore: chuyển bằng Shift+Escape, dùng khi website xung đột với ánh xạ phím
Điều hướng bằng bàn phím
Hint mode
- Nhấn phím
f để vào hint mode
- Hiển thị lớp phủ nhãn văn bản trên mọi phần tử có thể nhấp vào được như liên kết, nút bấm...
- Khi gõ nhãn, phần tử tương ứng sẽ được focus và click
- Có thể thao tác toàn bộ trang web mà không cần chuột
Những tính năng cá nhân yêu thích
gI: tự động focus vào ô nhập liệu hiển thị lớn nhất trên trang, một tính năng mang lại cảm giác rất kỳ diệu
<space><space>: chạy tab fuzzy finder để dễ dàng tìm lại tab bị thất lạc
<c-i> và <c-o>: cực kỳ quan trọng cho điều hướng tab trước đó
:repl: kiểm thử nhanh các thay đổi trong cấu hình
- Hint mode: hữu ích khi không muốn với tay sang chuột
- Giao diện kiểu which-key: giúp gợi nhớ nhiều ánh xạ phím khác nhau
Tình trạng hiện tại và khả năng sử dụng
- Đã được dùng hàng ngày trong khoảng 6 tháng
- Vẫn đang ở giai đoạn alpha ban đầu, nhưng đã có thể tải về cho macOS và Linux
- Khuyến nghị xem hướng dẫn bằng lệnh
:tutor (dù vẫn chưa hoàn thiện)
- Người dùng Linux hiện vẫn phải tự giải nén và cấu hình vì chưa được đưa vào kho gói
- Có thể xem thêm ví dụ trong cookbook và dotfiles của tác giả
- Vì là bản alpha nên chưa phải mọi API đều đã được triển khai, nhưng mục tiêu chính là cung cấp quyền kiểm soát hoàn toàn
2 bình luận
Có vẻ phải dùng theo kiểu khá dị mới được. Nếu có thể dùng theo cách đủ để bù trừ những ưu điểm của GUI thì còn được..
Ý kiến trên Hacker News
config.jskhá phức tạp, và đã dùng như vậy một thời gian. Khi gói NixOS được merge, tôi chắc chắn sẽ thử. Nếu bạn vẫn đang dùng Firefox ESR mặc định thì tôi cực kỳ khuyến nghị VimFX. Xem https://github.com/akhodakivskiy/VimFx sẽ rõ hơn. Nhược điểm lớn nhất của VimFX là tài liệu về các API nội bộ của Firefox khá thiếu. Muốn làm những việc như quản lý tab thì những gì lẽ ra với WebExtensions API là xong rất nhanh lại phải tự đào vào source code. Điều tôi mong chờ nhất ở Glide là phần cho phép dùng các API như vậy trong file configuserChrome.css. Tôi sẽ tiếp tục theo dõi và hy vọng bạn tiếp tục làm ra thứ gì đó tuyệt vờichrome://không. Bản Vimium cho Firefox lúc nào cũng khiến tôi thấy thiếu ở điểm này