- Nouvelle approche basée sur Firefox qui transforme le navigateur lui-même en outil programmable via un fichier de configuration TypeScript
- Permet une personnalisation illimitée de l’interface du navigateur, l’appel de processus externes, etc., sans les contraintes de sécurité des extensions web
- Propose un système de modes et des associations de touches de style Vim pour une navigation entièrement au clavier, sans souris
- Inclut par défaut des fonctions conviviales pour les développeurs comme le mode indices, un fuzzy finder d’onglets et un REPL, avec une validation en usage réel pendant 6 mois
- Version alpha téléchargeable sur macOS et Linux, avec compatibilité complète avec les extensions et workflows Firefox existants
Contexte de développement de Glide
- Le développeur utilisait l’extension Tridactyl sur Firefox lorsqu’il a rencontré le problème des contraintes de sécurité fondamentales des extensions web
- Sur certains sites comme addons.mozilla.org, les extensions sont entièrement désactivées et toutes les associations de touches cessent de fonctionner
- Tridactyl ne fonctionnait pas non plus sur sa page d’accueil personnalisée
- Ces contraintes relèvent du modèle de sécurité indispensable du navigateur pour protéger les utilisateurs contre les extensions malveillantes, mais elles limitent fortement l’extensibilité
- C’est ce constat qui a lancé le développement de Glide, avec l’idée d’un navigateur réellement personnalisable, sans restrictions, allant de la personnalisation de l’interface à l’appel d’outils externes
Différences clés de Glide
- Contrôle total grâce à un fichier de configuration TypeScript
- Donne accès à des API et fonctionnalités qu’une extension web ne pourra jamais prendre en charge
- Comme l’utilisateur final écrit lui-même le fichier de configuration, il n’est pas nécessaire d’imposer les mêmes contraintes de sécurité : le modèle de sécurité est fondamentalement différent
- Ce qu’il est possible de faire dans le fichier de configuration
- Définir des associations de touches personnalisées
- Accéder aux API d’extensions web
- Exécuter des processus externes arbitraires
- Définir des macros, etc.
- Construit sur Firefox, ce qui permet de conserver les extensions et workflows Firefox existants tels quels
Exemples de configuration pratiques
Cloner automatiquement un dépôt GitHub et lancer l’éditeur
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" });
- Sur une page de dépôt GitHub, appuyer sur
gC exécute automatiquement les actions suivantes
- Extraire le propriétaire et le nom du dépôt à partir de l’URL courante
- Cloner le dépôt dans
~/github.com/$owner/$repo
- Ouvrir neovim dans le terminal kitty sur le dépôt cloné
- Chaque opération fait gagner quelques secondes, pour seulement quelques minutes nécessaires à l’ajout de la configuration
Basculer rapidement vers l’onglet calendrier
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" });
- La touche
gc permet de passer instantanément à l’onglet Google Calendar
Système de modes
- Reprend le concept de modes de Vim, où chaque association de touches est liée à un mode spécifique
- Changement automatique de mode selon l’interaction avec le navigateur
- Mode
normal : mode par défaut
- Mode
insert : activé automatiquement lors d’un clic sur un élément <input>, pour que les associations de touches n’interfèrent pas avec la saisie de texte
- Mode
ignore : activé avec Shift+Escape, utile quand un site web entre en conflit avec les associations de touches
Navigation au clavier
Mode indices
- Appuyer sur
f pour entrer en mode indices
- Affiche une superposition de libellés textuels sur tous les éléments cliquables (liens, boutons, etc.)
- Saisir un libellé permet de focaliser puis cliquer sur l’élément correspondant
- Permet une interaction complète avec les pages web sans souris
Fonctions personnellement préférées
gI : focalise automatiquement le plus grand champ de saisie visible de la page, une fonction presque magique
<space><space> : lance le fuzzy finder d’onglets pour retrouver facilement un onglet perdu
<c-i> et <c-o> : essentiels pour la navigation dans les onglets précédents
:repl : permet de tester rapidement les modifications de configuration
- Mode indices : pratique quand on n’a pas envie de tendre la main vers la souris
- Interface de style which-key : rappelle les différentes associations de touches disponibles
État actuel et disponibilité
- Utilisé au quotidien depuis environ 6 mois
- Encore en phase alpha précoce, mais téléchargeable sur macOS et Linux
- Il est recommandé de consulter le tutoriel avec la commande
:tutor (il n’est pas encore terminé)
- Les utilisateurs Linux doivent encore extraire l’archive et configurer l’application manuellement, car elle n’est pas encore publiée dans les dépôts de paquets
- Davantage d’exemples sont disponibles dans le cookbook et les dotfiles du développeur
- Comme il s’agit d’une version alpha, toutes les API ne sont pas encore implémentées, mais l’objectif principal reste d’offrir un contrôle total
2 commentaires
Il semble qu’il faille l’utiliser de manière assez pointue. Les avantages de l’interface graphique... à condition de pouvoir l’utiliser au point de les compenser...
Avis Hacker News