Por quê aprender Emacs em 2021?
GNU Emacs é um sofware geralmente apresentado como um editor de texto e rivalizado com o editor de texto Vim. No entanto, existem algumas concepções populares que são incorretas sobre o que é de fato o Emacs. Nesta publicação tentarei explicar o que é o "mindset Emacs".
O que é o Emacs?
O Emacs é este simpático software visto na imagem acima. Apesar disto, é um alvo frequente de mitos e concepções erradas. Por exemplo, uma afirmação que já escutei algumas vezes sobre o Emacs é:
Emacs é bloatware. Dezenas de megabytes pra um editor de texto? Gah!
Também, uma piada antiga sobre o Emacs que ainda é bem recorrente nos dias atuais é:
Emacs é um ótimo sistema operacional, em que só falta um bom editor.
Enquanto esta última afirmação acima é para ser levada apenas na brincadeira, a intenção do Emacs não é ser um "sistema operacional". Mas a intenção também não é ser só um editor de texto. Então, o que é o Emacs?
Cada um tem sua própria forma de expressar uma definição dependendo da audiência a quem quer apresentar. A minha aqui será:
Emacs é um interpretador Lisp com recursos para criar interfaces programáveis orientadas a texto, cuja aplicação principal é um editor [de texto].
Sim, é uma frase, mas que transmite as características que eu gostaria de salientar na próxima seção.
Como o Emacs é diferente dos editores de texto?
A definição de Emacs apresentada acima requer uma explicação mais elaborada. Nesta seção vou citar 5 características que considero principais para entrar no mindset Emacs.
1. Lisp
A linguagem de programação que o Emacs interpreta chama-se Emacs Lisp, da família de linguagens Lisp. Esta linguagem é de propósito geral e distribuída com funções especializadas em edição de texto. Linguagens dessa família são altamente expressivas e customizáveis e possuem todos os recursos que se espera de uma linguagem de programação – condicionais, iterações, funções, etc – além de outros recursos mais avançados como macros. Assim, o usuário pode definir suas próprias funções e macros como em uma linguagem de programação de propósito geral. Além das customizações pessoais, pode-se criar código para compartilhar na forma de pacotes ou hacks.
Todas as operações, mesmo as mais básicas de edição como mover o cursor para esquerda ou direita são chamadas para funções em Emacs Lisp, respectivamente left-char
e right-char
, e estão mapeadas para as teclas de seta para a esquerda e direita. Mesmo estas já implementadas podem ser modificadas a realizar outras tarefas, ou as teclas de seta podem ser remapeadas para outra função.
2. Transparência
Assim como tudo no Emacs pode ser modificado, tudo pode ser analisado. Há funções para descrever variáveis, funções, símbolos e como estão implementados. Nada fica escondido.
Quer ver o que uma função faz? Execute describe-function
e o nome da função. Quer ver como está implementado o código Lisp? Execute find-function
e o nome da função. Variáveis? describe-variable
.
O Emacs é auto-documentado e vem com um tutorial interativo que pode ser lido com help-with-tutorial
e com o tutorial de Emacs Lisp em info
. Não é necessário buscar informação na web.
3. Modo "pseudo-gráfico"
As interfaces em modo texto como TUI não possuem um bom suporte a mouse, enquanto as aplicações gráficas escritas em frameworks como GTK ou Qt geralmente não tem bom suporte a teclado. O Emacs possui suporte excelente para os dois casos.
Se você utiliza um shell no Emacs como o shx
, pode visualizar imagens e plotar gráficos no próprio shell. O cursor pode se mover pela saída dos comandos para fazer operações, como se todo o shell (prompt + comando + saída) fosse um arquivo de texto qualquer. Não é necessário utilizar o mouse para selecionar e copiar texto como nos demais terminais.
4. Framework para aplicações
Esta é a característica que mais diferencia o Emacs de um editor de texto. Ele pode ser visto como um framework para criar aplicações programáveis baseadas em texto, como se fosse um terminal pseudo-gráfico, e o editor é uma delas.
Por padrão o Emacs vem com aplicações tais como Dired (gerenciador de arquivos), VC (controle de versão), Org (organizador pessoal e [muitas] outras coisas mais), eww (navegador web), Gnus (leitor de RSS e e-mail). Outras aplicações populares distribuídas pela comunidade são Magit (interface para repositórios Git), elfeed (leitor de RSS/Atom) e mu4e (cliente de e-mail).
Todas essas aplicações são escritas e modificáveis na mesma linguagem (Emacs Lisp) e integradas com o resto do Emacs.
5. Integração
Quando se usa uma configuração de diferentes programas como xmonad, newsboat, luakit, vim, mutt, cmus, ranger, tmux dentre outros há uma fragmentação das configurações: cada um destes projetos possui seu próprio diretório de configuração, o qual o usuário precisa gerenciar manualmente, e às vezes utilizam até linguagens diferentes para serem configurados. Só entre os programas listados acima há 7 linguagens de programação diferentes! Para gerenciar estes arquivos de configuração é muito mais conveniente usar um programa adicional como o GNU Stow. E, para piorar, estas combinações de programas não compartilham recursos, dando apenas a ilusão de um ambiente integrado.
No Emacs, todo o ambiente é integrado e recursos podem ser compartilhados entre todas as aplicações. Por exemplo: a combinação C-k
(Ctrl esquerdo + k) executa a função kill-line
, que apaga a linha a partir de onde está o cursor. Esta função apaga a linha tanto do seu commit no Magit, quanto do email que você está redigindo, quanto a linha de uma tabela no Org, quanto um nome de arquivo no Dired, quanto a saída no shx
, etc. Tudo no Emacs é texto, e tudo é processável utilizando as mesmas ferramentas.
Não é necessário trocar para a janela de uma aplicação para modificar seu estado: basta executar um comando que o modifique. Por exemplo, não é necessário entrar no seu cliente de e-mail para enviar um e-mail. Basta chamar a função mu4e-compose-new
a partir de qualquer lugar. Por conveniência, as funções podem ser atribuídas a uma tecla de atalho.
A integração não se limita apenas ao ambiente Emacs. Sendo uma peça importante do projeto GNU, ele também tem excelente integração com o resto do sistema operacional. Possui um excelente conjunto de ferramentas para Lisp (como a IDE SLIME), Guix e também Bash.
A Filosofia Unix
Dentro do movimento software livre há os proponentes da filosofia Unix. Considerando que tanto o GNU quanto o Linux foram criados com a intenção de substituir o Unix, que era um sistema operacional proprietário, há uma certa "herança filosófica" deste sistema.
A filosofia Unix pode ser resumida em três itens como na definição por Peter Salus:
- Escreva programas que façam apenas uma coisa, mas que a façam bem feita.
- Escreva programas que trabalhem juntos.
- Escreva programas que manipulem streams de texto, pois essa é uma interface universal.
Devido ao Emacs ser considerado "bloatware" ele é frequentemente contrastado com o primeiro item, por ser um programa que faria muitas coisas diferentes. Mas, vamos analisar a filosofia mais a fundo.
A seção anterior evidencia que o Emacs atende o terceiro critério, portanto não há o que comentar aqui. Tudo no Emacs ocorre em modo texto.
Dentro do Emacs podem existir pacotes completos, assim como vários pacotes mínimos cuja composição soma à funcionalidade de outros. Mesmo os pacotes completos tem uma forte integração com o resto do ambiente e partes individuais podem ser reutilizadas, satisfazendo a segunda condição.
Já o Emacs como um programa em si faz apenas uma coisa e a faz bem feita: interpretar Emacs Lisp. Ele vem com algumas aplicações implementadas na sua linguagem de extensão, mas a única coisa que o Emacs realmente faz é ser um interpretador de Emacs Lisp.
Sendo assim, não há nenhuma violação incondicional à filosofia Unix por parte do Emacs.
Respondendo à pergunta do título
Se você:
- se importa que seu ambiente seja bem integrado e não queira gerenciar um monte de arquivos de configuração espalhados por aí
- não quer reaprender novas teclas de atalho e/ou linguagens de programação/configuração para utilizar um outro programa
- quer compartilhar os mesmos temas e cores entre todas as aplicações
- quer usar mais software GNU
- quer modificar seu ambiente extensivamente
então compensa aprender o Emacs. E, mesmo que você não se identifique com nenhum item da lista, o Emacs representa uma mudança de paradigma. Não é só mais uma ferramenta a ser decorada, mas sim um novo mindset a ser explorado.
Referências
Why I Switched to Emacs | Protesilaos Stavrou
Vlog: Emacs mindset and Unix philosophy | Protesilaos Stavrou
Gostei. Bem escrito!
Artigo tão bom que me deu vontade de começar agora!
Eu escrevi a minha tese de doutorado (em Matematica) utilizando o Emacs. Me lembro de que na epoca havia ficado na duvida entre o Emacs e o Vim, mas acabei optando pelo Emacs — nao me lembro bem porque. Na epoca foi muito divertido, eu tinha todo o conteudo na cabeca (quando precisava, fazia algum calculo em papel e logo retornava para o computador). Digitei a tese toda atraves dele, deitado ah cama com um suporte para o notebook (que ficava acima da barriga; muito confortavel, visto que as maos nao deixavam o teclado, uma maravilha). Utilizei-o ainda por 3/2 anos depois de concluir o doutorado, numa base diaria. De repente, quando dei por mim, estava com dores nas maos pela primeira vez em minha vida. Depos de muita pesquisa pela Internet descobri que o que sentia eram as tais “Emacs’ hands”. Isto eh real. Migrei aos poucos para o Vim. Para mim, Vim ‘is the big deal’. Nao digo que Emacs nao valha a pena, muito pelo contrario. Digo apenas que se voce vai, realmente, dar uma chance verdadeira a ele, que pelo menos utilize Evil Mode.
Seu artigo está muito bem escrito, graças a ele (o artigo) me veio a lembrança os antigos eventos de software livre que eram realizados no nordeste (sempre tinha alguém de EMACS palestrando), particularmente eu mesmo nunca fui muito adepto de EMACS (sempre fui team Vim), mas ao ler seu texto, confesso que deu vontade de testar (pela milésima vez) o EMACS e tentar deixar ele como meu editor padrão por alguns dias.
Comecei a usar o emacs a ~30 anos atrás e ainda uso!
É um excelente editor de texto, super produtivo e eficiente.
Lembrando que repositórios como o MELPA tem mais de 2500 pacotes que podem ser baixados e instalados como plugins.
Muitos deles super úteis e, principalmente, produtivos.
Na prática o emacs faz com que sejamos mais focados e eficientes.
Eu adoro!