- Un nuevo enfoque basado en Firefox que convierte al navegador en una herramienta programable mediante un archivo de configuración en TypeScript
- Permite implementar funciones ilimitadas como la personalización de la UI del navegador o la invocación de procesos externos sin las restricciones de seguridad de las extensiones web
- Ofrece un sistema de modos y mapeo de teclas estilo Vim para una navegación completamente centrada en el teclado, sin usar mouse
- Incluye por defecto funciones pensadas para desarrolladores como modo hint, buscador difuso de pestañas y REPL, y ya fue validado con uso real durante 6 meses
- Versión alfa disponible para descargar en macOS y Linux, con compatibilidad total con las extensiones y flujos de trabajo existentes de Firefox
Antecedentes del desarrollo de Glide
- El desarrollador usaba la extensión Tridactyl en Firefox y se encontró con el problema de las limitaciones de seguridad fundamentales de las extensiones web
- En ciertos sitios como addons.mozilla.org, la extensión se desactiva por completo y ningún mapeo de teclas funciona
- También surgía el problema de que Tridactyl no funcionaba en una página de inicio personalizada
- Estas limitaciones forman parte del modelo de seguridad esencial del navegador para proteger al usuario de extensiones maliciosas, pero al mismo tiempo restringen mucho la extensibilidad
- Al reconocer la necesidad de un navegador verdaderamente personalizable que permitiera desde modificar la propia UI del navegador hasta invocar herramientas externas sin restricciones, comenzó el desarrollo de Glide
Diferenciadores clave de Glide
- Control total basado en un archivo de configuración en TypeScript
- Permite usar APIs y funciones que una extensión web nunca podría ofrecer
- Como el usuario final escribe directamente el archivo de configuración, no hace falta imponer restricciones de seguridad, lo que da lugar a un modelo de seguridad fundamentalmente distinto
- Cosas que se pueden hacer desde el archivo de configuración
- Definir mapeos de teclas personalizados
- Acceder a la API de extensiones web
- Ejecutar procesos externos arbitrarios
- Definir macros, entre otras cosas
- Está construido sobre Firefox, así que las extensiones y los flujos de trabajo existentes de Firefox siguen funcionando tal cual
Ejemplos prácticos de configuración
Clonar automáticamente un repositorio de GitHub y abrir el 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" });
- Al presionar la tecla
gC en la página de un repositorio de GitHub, se realizan automáticamente las siguientes acciones
- Extraer del URL actual el propietario y el nombre del repositorio
- Clonar el repositorio en la ruta
~/github.com/$owner/$repo
- Abrir neovim en la terminal kitty y moverse al repositorio clonado
- Se ahorran varios segundos en cada tarea, y añadir la configuración toma apenas unos minutos
Cambiar rápidamente a la pestaña del calendario
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" });
- Con la tecla
gc se puede cambiar al instante a la pestaña de Google Calendar
Sistema de modos
- Toma prestado el concepto de modos de Vim, de modo que todos los mapeos de teclas están ligados a un modo específico
- Cambio automático de modo según la interacción con el navegador
- Modo
normal: modo predeterminado
- Modo
insert: cambia automáticamente al hacer clic en un elemento <input>, para que los mapeos de teclas no interfieran con la escritura de texto
- Modo
ignore: se activa con Shift+Escape y se usa cuando un sitio web entra en conflicto con los mapeos de teclas
Navegación basada en teclado
Modo hint
- Presiona la tecla
f para entrar en modo hint
- Se muestran overlays con etiquetas de texto sobre todos los elementos clicables (links, botones, etc.)
- Al escribir la etiqueta, se enfoca y se hace clic en el elemento correspondiente
- Permite manipular por completo una página web sin usar mouse
Funciones preferidas personalmente
gI: enfoca automáticamente el elemento de entrada visible más grande de la página; se siente casi mágico
<space><space>: ejecuta el buscador difuso de pestañas para encontrar fácilmente una pestaña perdida
<c-i> y <c-o>: esenciales para la navegación por pestañas previas
:repl: permite probar rápidamente cambios en la configuración
- Modo hint: útil cuando no quieres extender la mano hacia el mouse
- UI estilo which-key: una interfaz que ayuda a recordar distintos mapeos de teclas
Estado actual y disponibilidad
- En uso diario desde hace aproximadamente 6 meses
- Sigue en una fase alfa temprana, pero ya se puede descargar para macOS y Linux
- Se recomienda revisar el tutorial con el comando
:tutor (todavía no está terminado)
- Los usuarios de Linux aún deben descomprimir y configurar manualmente, ya que todavía no está en repositorios de paquetes
- Se pueden ver más ejemplos en el cookbook y en los dotfiles del desarrollador
- Como es una versión alfa, todavía no están implementadas todas las APIs, pero el objetivo principal es ofrecer control total
2 comentarios
Parece que habría que usarlo de forma muy de nicho. Las ventajas de la GUI... solo si se puede usar de una manera que las compense.
Opiniones en Hacker News
config.jsbastante complejo. En cuanto se fusione el paquete de NixOS, seguro lo voy a probar. Si van a seguir usando Firefox ESR base, recomiendo mucho VimFX. Puede servir revisar https://github.com/akhodakivskiy/VimFx. La mayor desventaja de VimFX es la poca documentación de las APIs internas de Firefox. Para cosas como la gestión de pestañas, tuve que meterme a revisar el código fuente directamente, cuando con la API de WebExtensions habría sido fácil. Lo que más me entusiasma de Glide es justamente la parte donde esas APIs se puedan usar desde el archivo de configuraciónglide-hintconuserChrome.csspara ajustarlo a mi gusto estético. Voy a seguirlo porque espero que siga creando cosas genialeschrome://. Esa siempre fue una limitación frustrante de la versión de Vimium para Firefox