- Ein neuer Ansatz auf Firefox-Basis, der den Browser selbst über eine TypeScript-Konfigurationsdatei zu einem programmierbaren Werkzeug macht
- Ohne die Sicherheitsbeschränkungen von Web-Erweiterungen lassen sich Browser-UI anpassen, externe Prozesse aufrufen und praktisch unbegrenzte Funktionen umsetzen
- Bietet ein Vim-artiges Modussystem und Key-Mappings und ermöglicht damit vollständig tastaturzentriertes Browsing ohne Maus
- Stellt entwicklerfreundliche Funktionen wie Hint Mode, Tab-Fuzzy-Finder und REPL standardmäßig bereit; der Alltagseinsatz wurde über 6 Monate hinweg validiert
- Alpha-Versionen für macOS und Linux stehen zum Download bereit und sind vollständig kompatibel mit bestehenden Firefox-Erweiterungen und Workflows
Hintergrund der Entwicklung von Glide
- Der Entwickler nutzte in Firefox die Erweiterung Tridactyl und stieß dabei auf die grundlegenden Sicherheitsbeschränkungen von Web-Erweiterungen
- Auf bestimmten Websites wie addons.mozilla.org werden Erweiterungen vollständig deaktiviert, sodass keine Key-Mappings funktionieren
- Auch auf einer benutzerdefinierten Startseite trat das Problem auf, dass Tridactyl nicht funktionierte
- Diese Einschränkungen sind zwar Teil des notwendigen Sicherheitsmodells des Browsers, um Nutzer vor bösartigen Erweiterungen zu schützen, begrenzen aber gleichzeitig die Erweiterbarkeit stark
- Daraus entstand die Einsicht, dass ein wirklich anpassbarer Browser nötig ist, der von der Anpassung der Browser-UI bis zum Aufruf externer Tools alles ohne Einschränkungen ermöglicht, woraufhin die Entwicklung von Glide begann
Die wichtigsten Unterscheidungsmerkmale von Glide
- Vollständige Kontrolle auf Basis einer TypeScript-Konfigurationsdatei
- APIs und Funktionen sind nutzbar, die in Web-Erweiterungen niemals unterstützt werden könnten
- Da Endnutzer die Konfigurationsdatei selbst schreiben, ist ein grundlegend anderes Sicherheitsmodell möglich, bei dem solche Einschränkungen nicht nötig sind
- Mögliche Aktionen in der Konfigurationsdatei
- Benutzerdefinierte Key-Mappings definieren
- Auf die Web-Erweiterungs-API zugreifen
- Beliebige externe Prozesse ausführen
- Makros definieren usw.
- Auf Firefox-Basis entwickelt, sodass bestehende Firefox-Erweiterungen und Workflows unverändert funktionieren
Praktische Konfigurationsbeispiele
GitHub-Repository automatisch klonen und Editor starten
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" });
- Auf einer GitHub-Repository-Seite führt das Drücken von
gC automatisch Folgendes aus
- Extrahiert Eigentümer und Repository-Namen aus der aktuellen URL
- Klont das Repository nach
~/github.com/$owner/$repo
- Öffnet neovim im kitty-Terminal im geklonten Repository
- Das spart pro Vorgang einige Sekunden, während das Hinzufügen der Konfiguration nur wenige Minuten dauert
Schnell zu einem Kalender-Tab wechseln
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" });
- Mit
gc kann sofort zu einem Google-Kalender-Tab gewechselt werden
Modussystem
- Übernimmt das Moduskonzept von Vim, bei dem alle Key-Mappings an einen bestimmten Modus gebunden sind
- Automatischer Moduswechsel je nach Interaktion mit dem Browser
normal-Modus: Standardmodus
insert-Modus: Beim Klicken auf ein <input>-Element wird automatisch umgeschaltet, damit Key-Mappings die Texteingabe nicht stören
ignore-Modus: Umschalten mit Shift+Escape; nützlich, wenn eine Website mit den Key-Mappings kollidiert
Tastaturbasierte Navigation
Hint Mode
- Mit der Taste
f in den Hint Mode wechseln
- Über allen anklickbaren Elementen (Links, Buttons usw.) werden Overlays mit Text-Labels angezeigt
- Durch Eingabe des Labels wird das entsprechende Element fokussiert und angeklickt
- Dadurch ist eine vollständige Bedienung der Webseite ohne Maus möglich
Persönlich bevorzugte Funktionen
gI: Setzt automatisch den Fokus auf das größte sichtbare Eingabefeld der Seite; fühlt sich fast magisch an
<space><space>: Startet den Tab-Fuzzy-Finder, um verlorene Tabs leicht wiederzufinden
<c-i> und <c-o>: Unverzichtbar für die Navigation durch vorherige Tabs
:repl: Schnelles Testen von Konfigurationsänderungen
- Hint Mode: Praktisch, wenn man nicht zur Maus greifen möchte
- which-key-artige UI: Eine Oberfläche, die an verschiedene Key-Mappings erinnert
Aktueller Stand und Verfügbarkeit
- Seit etwa 6 Monaten täglich im Einsatz
- Noch in einer frühen Alpha-Phase, aber für macOS und Linux verfügbar
- Es wird empfohlen, das Tutorial über den Befehl
:tutor aufzurufen (noch nicht vollständig fertiggestellt)
- Linux-Nutzer müssen derzeit noch manuell entpacken und konfigurieren, da das Programm noch in keinem Paket-Repository enthalten ist
- Weitere Beispiele gibt es im Cookbook und in den dotfiles des Entwicklers
- Da es sich um eine Alpha-Version handelt, sind noch nicht alle APIs implementiert, aber das zentrale Ziel ist vollständige Kontrolle
2 Kommentare
Man muss ihn wohl ziemlich nerdig nutzen. Wenn man die Vorteile einer GUI damit ausreichend ausgleichen kann ...
Hacker-News-Kommentare
glide-hint-CSS habe ich außerdem überuserChrome.cssmeinem ästhetischen Geschmack entsprechend angepasst. Ich werde das weiter im Blick behalten und hoffe, dass du weiter so coole Sachen baust.j/knicht ganz flüssig an. Gibt es vielleicht eine Möglichkeit, das natürlicher zu machen? Vielleicht habe ich es in der Doku auch einfach überlesen.chrome://-Seiten funktioniert. Das war bei der Firefox-Version von Vimium immer ein Schwachpunkt.