- Uma nova abordagem que transforma o próprio navegador em uma ferramenta programável por meio de um arquivo de configuração em TypeScript baseado no Firefox
- Permite implementar recursos ilimitados, como customização da UI do navegador e chamada de processos externos, sem as restrições de segurança das extensões web
- Oferece um sistema de modos e mapeamento de teclas no estilo Vim, permitindo navegação totalmente centrada no teclado sem usar o mouse
- Traz por padrão recursos amigáveis para desenvolvedores, como modo de dicas, localizador difuso de abas e REPL, já validados em 6 meses de uso real
- Versão alpha disponível para download no macOS e Linux, com compatibilidade total com extensões e fluxos de trabalho existentes do Firefox
Contexto de desenvolvimento do Glide
- O desenvolvedor usava a extensão Tridactyl no Firefox e acabou enfrentando o problema das restrições fundamentais de segurança das extensões web
- Em certos sites, como addons.mozilla.org, a extensão é completamente desativada e todos os mapeamentos de teclas deixam de funcionar
- Também houve o problema de o Tridactyl não funcionar em uma página inicial personalizada
- Essas restrições fazem parte do modelo de segurança essencial do navegador para proteger o usuário de extensões maliciosas, mas ao mesmo tempo limitam bastante a extensibilidade
- Ao perceber a necessidade de um navegador verdadeiramente personalizável, capaz de ir da customização da própria UI até a chamada de ferramentas externas sem limitações, ele começou a desenvolver o Glide
Principais diferenciais do Glide
- Controle total com base em um arquivo de configuração em TypeScript
- É possível usar APIs e recursos que uma extensão web jamais conseguiria suportar
- Como o usuário final escreve diretamente o arquivo de configuração, não há necessidade de impor restrições de segurança, o que cria um modelo de segurança fundamentalmente diferente
- O que pode ser feito no arquivo de configuração
- Definir mapeamentos de teclas personalizados
- Acessar a API de extensões web
- Executar processos externos arbitrários
- Definir macros, entre outras coisas
- Construído sobre o Firefox, então extensões e fluxos de trabalho existentes do Firefox continuam funcionando normalmente
Exemplos práticos de configuração
Clonagem automática de repositório do GitHub e abertura do 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" });
- Ao pressionar
gC em uma página de repositório no GitHub, as seguintes ações são executadas automaticamente
- Extrair o nome do proprietário e do repositório a partir da URL atual
- Clonar o repositório em
~/github.com/$owner/$repo
- Abrir o neovim no terminal kitty dentro do repositório clonado
- Isso economiza alguns segundos em cada tarefa, e adicionar a configuração leva apenas alguns minutos
Troca rápida para a aba do calendário
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" });
- Com
gc, é possível alternar instantaneamente para a aba do Google Calendar
Sistema de modos
- Adota o conceito de modos do Vim, de modo que todo mapeamento de teclas fica associado a um modo específico
- Alterna automaticamente de modo conforme a interação com o navegador
- Modo
normal: modo padrão
- Modo
insert: ao clicar em um elemento <input>, a troca acontece automaticamente para que os mapeamentos não interfiram na digitação
- Modo
ignore: alternado com Shift+Escape, usado quando um site entra em conflito com os mapeamentos de teclas
Navegação baseada em teclado
Modo de dicas
- Pressione
f para entrar no modo de dicas
- Uma sobreposição de rótulos de texto aparece sobre todos os elementos clicáveis, como links e botões
- Ao digitar o rótulo, o elemento correspondente recebe foco e é clicado
- É possível operar uma página web inteira sem usar o mouse
Recursos preferidos pessoalmente
gI: coloca automaticamente o foco no maior campo de entrada visível da página; é um recurso que parece mágica
<space><space>: executa o localizador difuso de abas, facilitando encontrar abas perdidas
<c-i> e <c-o>: essenciais para a navegação entre abas anteriores
:repl: permite testar rapidamente alterações na configuração
- Modo de dicas: útil quando você não quer esticar a mão até o mouse
- UI no estilo which-key: uma interface que ajuda a lembrar vários mapeamentos de teclas
Estado atual e disponibilidade
- Em uso diário há cerca de 6 meses
- Ainda está em estágio alpha inicial, mas já pode ser baixado para macOS e Linux
- Recomenda-se conferir o tutorial com o comando
:tutor (ainda não está concluído)
- Usuários de Linux ainda precisam descompactar e configurar manualmente, já que o navegador ainda não está nos repositórios de pacotes
- Mais exemplos podem ser vistos no cookbook e nos dotfiles do desenvolvedor
- Por ser uma versão alpha, nem todas as APIs ainda estão implementadas, mas o objetivo principal é oferecer controle total
2 comentários
Parece que tem que usar de um jeito bem de nicho. As vantagens da GUI... a não ser que dê para usar de um jeito que compense isso..
Comentários do Hacker News
config.jscomplexo. Quando o pacote do NixOS for integrado, com certeza vou testar. Se você pretende continuar no Firefox ESR padrão, recomendo fortemente o VimFX. Vale ver https://github.com/akhodakivskiy/VimFx. A maior desvantagem do VimFX é a falta de documentação das APIs internas do Firefox. Para tarefas como gerenciamento de abas, eu tinha que fuçar o código-fonte diretamente, mesmo em coisas que seriam simples com a API WebExtensions. O que mais me anima no Glide é justamente a possibilidade de expor essas APIs no arquivo de configuserChrome.csspara combinar com meu gosto estético. Vou continuar acompanhando e torcendo para que siga sendo um projeto incrívelchrome://. Isso sempre fez falta para mim na versão do Vimium para Firefox