- Firefox-आधारित TypeScript config file के ज़रिए ब्राउज़र को खुद एक programmable tool में बदलने का नया तरीका
- web extension की security limitations के बिना browser UI customization, external process calls आदि जैसी असीमित capabilities लागू करना संभव
- Vim-स्टाइल mode system और key mapping के साथ mouse के बिना पूरी तरह keyboard-centric browsing का समर्थन
- hint mode, tab fuzzy finder, REPL जैसी developer-friendly features डिफ़ॉल्ट रूप से शामिल, और 6 महीनों के वास्तविक उपयोग में परखी गई
- macOS और Linux पर alpha version download उपलब्ध, और मौजूदा Firefox extensions व workflows के साथ पूरी तरह compatible
Glide की विकास पृष्ठभूमि
- डेवलपर Firefox में Tridactyl extension का उपयोग करते समय web extension की मूलभूत security limitations की समस्या से गुज़रे
- addons.mozilla.org जैसी कुछ साइटों पर extension पूरी तरह disabled हो जाता है, जिससे सभी key mappings काम करना बंद कर देते हैं
- custom homepage पर भी Tridactyl के काम न करने की समस्या हुई
- ये limitations यूज़र को malicious extensions से बचाने के लिए ब्राउज़र के ज़रूरी security model का हिस्सा हैं, लेकिन साथ ही extensibility को बहुत सीमित कर देती हैं
- browser UI customization से लेकर external tools को call करने तक बिना किसी सीमा के संभव एक सच्चे customized browser की ज़रूरत को समझते हुए Glide का विकास शुरू किया गया
Glide की मुख्य विशेष भिन्नताएँ
- TypeScript config file के आधार पर पूरा नियंत्रण
- ऐसे API और features उपलब्ध हैं जिन्हें web extensions कभी support नहीं कर सकते
- क्योंकि end user स्वयं config file लिखता है, इसलिए security restrictions लगाने की ज़रूरत नहीं पड़ती; यह मूल रूप से अलग security model है
- config file में किए जा सकने वाले काम
- custom key mappings define करना
- web extension API access करना
- मनचाहे external processes चलाना
- macros define करना आदि
- Firefox-आधारित होने के कारण मौजूदा Firefox extensions और workflows वैसे ही काम करते हैं
उपयोगी config उदाहरण
GitHub repository को अपने-आप clone करना और 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" });
- GitHub repository page पर
gC दबाते ही अपने-आप ये काम होते हैं
- मौजूदा URL से owner और repository नाम निकालना
- repository को
~/github.com/$owner/$repo path में clone करना
- kitty terminal में neovim खोलकर cloned repository पर जाना
- हर बार कुछ सेकंड बचते हैं, और यह config जोड़ने में सिर्फ कुछ मिनट लगे
calendar tab पर तेज़ी से स्विच करना
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 key से Google Calendar tab पर तुरंत जाया जा सकता है
Mode system
- Vim की mode अवधारणा अपनाई गई है, जिसमें हर key mapping किसी विशेष mode से जुड़ी होती है
- ब्राउज़र के साथ interaction के आधार पर mode अपने-आप बदलता है
normal mode: डिफ़ॉल्ट mode
insert mode: <input> element पर click करते ही अपने-आप सक्रिय, ताकि key mappings text input में बाधा न बनें
ignore mode: Shift+Escape से सक्रिय, जब website के keys और mappings में टकराव हो
Keyboard-आधारित navigation
Hint mode
f key दबाकर hint mode में जाएँ
- सभी clickable elements (links, buttons आदि) पर text labels overlay के रूप में दिखते हैं
- label टाइप करने पर उस element पर focus और click किया जाता है
- mouse के बिना पूरे web page को नियंत्रित किया जा सकता है
व्यक्तिगत रूप से पसंदीदा features
gI: page के सबसे बड़े visible input element पर अपने-आप focus, यह लगभग जादू जैसा लगता है
<space><space>: tab fuzzy finder चलाकर खोए हुए tabs आसानी से ढूँढना
<c-i> और <c-o>: tab history navigation के लिए बहुत ज़रूरी
:repl: config changes को तेज़ी से test करना
- hint mode: जब mouse की ओर हाथ बढ़ाना न चाहें, तब उपयोगी
- which-key स्टाइल UI: अलग-अलग key mappings याद दिलाने वाला interface
वर्तमान स्थिति और उपलब्धता
- लगभग 6 महीनों से रोज़मर्रा में उपयोग किया जा रहा है
- अभी भी शुरुआती alpha stage में है, लेकिन macOS और Linux पर download उपलब्ध है
:tutor command से tutorial देखने की सलाह (हालाँकि यह अभी पूरा नहीं हुआ है)
- Linux users को अभी package repository में उपलब्ध न होने के कारण manual extract और setup करना होगा
- cookbook और डेवलपर के dotfiles में और उदाहरण देखे जा सकते हैं
- alpha version होने के कारण अभी सभी API लागू नहीं हुए हैं, लेकिन पूरा नियंत्रण देना ही मुख्य लक्ष्य है
2 टिप्पणियां
लगता है इसे काफ़ी nerdy तरीके से इस्तेमाल करना पड़ेगा। GUI के फ़ायदों को... अगर उसकी भरपाई करते हुए इसे उपयोगी ढंग से इस्तेमाल किया जा सके, तो ठीक है..
Hacker News की राय