- Pendekatan baru berbasis Firefox yang menjadikan browser itu sendiri sebagai alat yang dapat diprogram melalui file konfigurasi TypeScript
- Memungkinkan implementasi fitur tanpa batas seperti kustomisasi UI browser dan pemanggilan proses eksternal tanpa batasan keamanan yang dimiliki ekstensi web
- Menyediakan sistem mode dan key mapping bergaya Vim untuk mendukung penjelajahan yang sepenuhnya berpusat pada keyboard tanpa mouse
- Menyertakan fitur ramah pengembang seperti hint mode, tab fuzzy finder, dan REPL secara bawaan, serta telah teruji dalam penggunaan nyata selama 6 bulan
- Versi alpha dapat diunduh untuk macOS dan Linux, serta sepenuhnya kompatibel dengan ekstensi Firefox dan workflow yang sudah ada
Latar belakang pengembangan Glide
- Pengembang mengalami masalah batasan keamanan mendasar pada ekstensi web saat menggunakan ekstensi Tridactyl di Firefox
- Di situs tertentu seperti addons.mozilla.org, ekstensi sepenuhnya dinonaktifkan sehingga semua key mapping tidak berfungsi
- Tridactyl juga tidak berfungsi pada homepage kustom
- Batasan ini adalah model keamanan penting milik browser untuk melindungi pengguna dari ekstensi berbahaya, tetapi pada saat yang sama sangat membatasi ekstensibilitas
- Menyadari perlunya browser yang benar-benar dapat dikustomisasi tanpa batas, mulai dari kustomisasi UI browser itu sendiri hingga pemanggilan alat eksternal, lalu memulai pengembangan Glide
Pembeda utama Glide
- File konfigurasi TypeScript memberikan kontrol penuh
- Dapat menggunakan API dan fitur yang sama sekali tidak mungkin didukung oleh ekstensi web
- Karena pengguna akhir menulis sendiri file konfigurasinya, tidak perlu menerapkan batasan keamanan yang ketat, sehingga model keamanannya secara mendasar berbeda
- Hal-hal yang dapat dilakukan dari file konfigurasi
- Mendefinisikan key mapping kustom
- Mengakses API ekstensi web
- Menjalankan proses eksternal arbitrer
- Mendefinisikan macro, dan lain-lain
- Dibangun berbasis Firefox sehingga ekstensi Firefox dan workflow yang sudah ada tetap berfungsi apa adanya
Contoh konfigurasi praktis
Clone otomatis repositori GitHub dan jalankan editor
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" });
- Saat menekan tombol
gC di halaman repositori GitHub, tindakan berikut dijalankan secara otomatis
- Mengekstrak nama pemilik dan repositori dari URL saat ini
- Meng-clone repositori ke jalur
~/github.com/$owner/$repo
- Membuka neovim di terminal kitty dan berpindah ke repositori hasil clone
- Menghemat beberapa detik untuk tiap pekerjaan, sementara penambahan konfigurasi hanya memerlukan beberapa menit
Berpindah cepat ke tab kalender
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" });
- Dengan tombol
gc, Anda bisa langsung berpindah ke tab Google Calendar
Sistem mode
- Mengadopsi konsep mode dari Vim, sehingga semua key mapping terhubung ke mode tertentu
- Mode berubah otomatis sesuai interaksi dengan browser
- mode
normal: mode dasar
- mode
insert: otomatis aktif saat elemen <input> diklik, sehingga key mapping tidak mengganggu input teks
- mode
ignore: diaktifkan dengan Shift+Escape, digunakan saat situs web berbenturan dengan key mapping
Navigasi berbasis keyboard
Hint mode
- Tekan tombol
f untuk masuk ke hint mode
- Menampilkan overlay label teks di atas semua elemen yang dapat diklik, seperti tautan dan tombol
- Saat label diketik, elemen terkait akan difokuskan dan diklik
- Memungkinkan pengoperasian halaman web sepenuhnya tanpa mouse
Fitur yang secara pribadi disukai
gI: otomatis memfokuskan elemen input terlihat terbesar di halaman, fitur yang terasa seperti sihir
<space><space>: menjalankan tab fuzzy finder untuk menemukan tab yang hilang dengan mudah
<c-i> dan <c-o>: penting untuk navigasi tab sebelumnya
:repl: menguji perubahan konfigurasi dengan cepat
- hint mode: berguna saat tidak ingin meraih mouse
- UI gaya which-key: antarmuka yang membantu mengingat berbagai key mapping
Status saat ini dan ketersediaan
- Sudah digunakan sehari-hari selama sekitar 6 bulan
- Masih dalam tahap alpha awal, tetapi sudah bisa diunduh untuk macOS dan Linux
- Disarankan melihat tutorial melalui perintah
:tutor (meski belum sepenuhnya selesai)
- Pengguna Linux masih perlu mengekstrak arsip dan mengatur secara manual karena belum terdaftar di repositori paket
- Lebih banyak contoh tersedia di cookbook dan dotfiles milik pengembang
- Karena ini versi alpha, belum semua API diimplementasikan, tetapi tujuan utamanya adalah memberikan kontrol penuh
2 komentar
Sepertinya harus dipakai dengan cukup maniak. Kalau memang bisa digunakan sampai cukup menutupi keunggulan GUI sih..
Komentar Hacker News
addons.mozilla.orgsaat memakai Vimium C. Memang tidak cukup sering sampai membuatku ingin ganti browser, tapi aku justru lebih tertarik pada alat yang membuat seluruh desktop Linux berpusat pada keyboard, seperti yang dilakukan homerow di macOSconfig.jsyang rumit. Kalau paket NixOS-nya nanti sudah di-merge, aku pasti akan mencobanya. Jika kamu tetap memakai Firefox ESR bawaan, aku sangat merekomendasikan VimFX. Lihat https://github.com/akhodakivskiy/VimFx. Kekurangan terbesar VimFX adalah minimnya dokumentasi API internal Firefox. Untuk pekerjaan seperti manajemen tab, hal yang seharusnya mudah dengan WebExtensions API malah mengharuskan kita membongkar source code langsung. Hal yang paling membuatku antusias dari Glide adalah kemungkinan API seperti ini bisa dipakai dari file configglide-hintjuga sudah kutemakan lewatuserChrome.csssesuai selera estetikaku. Aku akan terus mengikuti perkembangannya dan berharap karya keren ini terus berlanjutj/k, gerakannya terasa kurang mulus. Aku penasaran apakah ada cara membuat scroll-nya terasa lebih natural, meski mungkin aku saja yang melewatkan dokumentasinyachrome://. Versi Firefox dari Vimium selalu terasa kurang di bagian itu