KEMACS (KISS)

Índice

Última versão sempre em: org-mode ou html

1. TL;DR;

Se você já tem o Emacs instalado e apenas deseja utilizar esta configuração, faça o seguinte:

1.1. Linux

mv ~/.emacs.d ~/.emacs.d.bak
git clone https://codeberg.org/guaracy/kemacs.git ~/.emacs.d
emacs

Em .emacs.d/doc/index.html você encontrará a documentação para consulta futura.

1.2. TODO Windows

2. Objetivo

A ideia inicial é criar um arquivo de configuração básico com algumas facilidades para quem está acostumado com outros editores e deseja conhecer o Emacs. Acho que a maior dificuldade são alguns atalhos utilizados frequentemente como Ctrl-c, Ctrl-v, Ctrl-x e Ctrl-z que são automáticamente digitados pelos usuários mas, no Emacs, funcionam de forma diferente. Quão decepcionante deve ser para um iniciante digitar Ctrl-z para desfazer uma operação e a janela desapareer da tela. De resto, muitas coisas o usuário aprende como fazer por meio de atalhos (depende de programa para programa mesmo para a mesma área e mesmo sistema operacional). Outras operações são feitas pelo menu e, acredite, a mesma coisa pode ser feita no Emacs. Existem opções no menu como Search, Replace, Bookmarks, dividir a janela vertical ou horizontalmente e todo o resto.

Com o tempo você vai aprendendo que é muito mais rápido e prático digitar Ctrl-x 3 para dividir a janela horizontalmente do que tirar a mão do teclado, pegar o mouse, arrastar até a opção File e clicar, arrastar até a opção New Window on Right e clicar. Como foi possível ver, algumas coisas no menu também não são tão organizadas. A opção poderia muito bem estar no menu Buffer. Mas a configuração irá instalar pacotes para facilitar a tarefa e, mesmo não sabendo onde se encontra algo, a busca utilizando o teclado se torna super simples e fácil.

Existem outras configurações (Starter Kits) mas a maioria não pensa muito no iniciante e já configuram o Emacs ára alguém que saiba um mínimo sobre o editor. Uma das primeiras coisas e esconderem o menu e a barra de ferramentas. Aí o cara vê aquela janela preta, ver, azul ou outra cor e não sabe por onde começar. Algumas usam o Dashboard mas não adianta nada quendo o usuário estiver realmente usando o programa. Ninguém nasce sabendo que F10 mostra o menu no Emacs.

Mas vamos parar de conversa fiada e iniciar o que interessa que é …

3. Convenções

Algumas convenções utilizadas pelo Emacs e neste documento que são importantes.

  • M-x significa a tecla Alt e a letra x (Alt Windows Option Mac).
  • C-b significa a tecla Control e a letra b.
  • S-TAB significa Shift e a tecla Tab.
  • RET significa pressionar a tecla Enter.
  • buffer é onde você lê e escreve o texto (mais complexo mas ficamos assim).
  • frame basicamente o que chamamos de janela na interface gráfica.
  • window basicamente são os frames das janelas (reparou que é invertido? window <-> frame).
  • modeline linha em cada frame com informações linha/coluna do cursor, modo, etc.
  • echo area é onde o Emacs informa alguma ação para você.
  • minibuffer é uma área de interação entre você e o Emacs, quando você precisa digitar o nome de um arquivo, por exemplo.
  • fringe pequenas colunas laterais que indicam final de arquivo, se a linha continua para fora do frame ou continua na linha de baixo, bookmarks, etc..

emacs-areas.png

4. Arquivo de configuração

Existem diversas formas de configurar o Emacs. Vamos utilizar o arquivo init.el que estará localizado na pasta .emacs.d na pasta do usuário. O arquivo .el significa que será em emacs-lisp, um dialeto de Lisp utilizado pelo Emacs (geralmente editores mais poderosos utilizam alguma linguagem comoLua, JavaScript ou outras para a configuração)

Obs.: Este arquivo está em org-mode, uma linguagem de marcação que é extremamente poderosa quando utilizada com o Emacs. A documentação index.html foi geranda pressionando C-c C-e (para exportar e h h (para arquivo html). Depois pressiono C-c C-v t para exportar apenas os blocos de código para o arquivo init.el. Com isso, as alterações são feitas apenas em um local, evitando possíveis erros com o copia-cola de outros ambientes.

4.1. Ajustes iniciais

1: (setq inhibit-startup-message t)
2: (toggle-indicate-empty-lines)
3: (scroll-bar-mode -1)
4: (save-place-mode 1)
5: (global-hl-line-mode 1)
6: (delete-selection-mode t)
7: (cua-mode t)

No trecho acima:

(setq inhibit-startup-message t) Não mostra o frame de boas vindas.
(toggle-indicate-empty-lines) Mostra indicadores de final de arquivo na fringe.
(scroll-bar-mode -1) Não mostra a barra de rolamento (na modelina aparece Top (início do arquivo), Bot (final do arquivo) ou um percentual indicando onde você está no arquivo).
(save-place-mode 1) Salva a posição do cursor ao sair do arquivo. Quando for aberto, o cursor é posicionado no mesmo local.
(global-hl-line-mode 1) Salienta a linha atual (onde está o cursor).
(delete-selection-mode t) Quando um texto estiver selecionado, se você digitar algo a seleção será apagada e substituida pelo que você digitou.
(cua-mode t) O pessoal mais raiz vai querer me matar mas é importante para o novato pois mapeia algums atalhos para copiar, colar e outros que ele deverá estar acostumado.

4.1.1. Atalhos

Apenas para exemplificar como definir alguns atlhos personalizados.

8: (global-set-key (kbd "C-=") 'text-scale-increase) 
9: (global-set-key (kbd "C--") 'text-scale-decrease)

Pressionando C-= aumenta o tamanho da fonte e C-- irá diminuir o tamanho da fonte.

4.1.2. Caminho

10: (push (expand-file-name "lisp" user-emacs-directory)
11:       load-path)

Adiciona um caminho para o Emacs procurar arquivos com load ou require (geralmente são arquivos de configuração). Será utilizado futuramente.

4.1.3. Configurações do usuário

12: (setq custom-file (locate-user-emacs-file "custom.el"))
13: (load custom-file 'noerror 'nomessage)

Informamos que todas as customizações salvas menu Options/Save Options pelo usuário serão salvas no arquivo indicado. Caso não seja especificado, serão salvas no init.el.

4.1.4. Gerenciamento de pacotes

14: (require 'package)
15: (setq package-archives '(("melpa" . "https://melpa.org/packages/")
16:                          ("elpa" . "https://elpa.gnu.org/packages/")))
17: (package-initialize)
18: (unless package-archive-contents
19:   (package-refresh-contents))
20: (unless (package-installed-p 'use-package)
21:   (package-install 'use-package))
22: (require 'use-package)
23: (setq use-package-always-ensure t)

O trecho acima não vem muito ao caso. Apenas informa alguns repositórios para baixar os pacotes que não são incluídos no Emacs. O (require ...) inclui algum pacote/biblioteca. Em outras linguagens seria o mesmo que include, import, use, etc..

4.2. Aparência

4.2.1. Tema

O Emacs já vem com um pequeno pacote de temas. Alguns starter kits possuem uma grande quantidade de temas como o Doom Emacs. O Spacemacs também tem seus temas. Existe uma galeria de temas para o emacs e mais alguns perdidos na internet. Este tipo de configuração é algo bem pessoal. Optei por não instalar nenhum de fora e usar um que vem com o Emacs mesmo. Aqui tem uma pegadinha. Nem todos os temas definem todas as possibilidade. Existe a possibilidade de você testar um tema e, quando mudar, algo pode ficar estranho (cor do fundo e cor do texto muito próximos, por exemplo).

Fontes também é uma opção pessoal. Apenas aumentei um pouco o tamanho da fonte (12pt). Para programação e fontes monoespaçadas, você pode escolher entre 145 fontes gratuitas

24: (load-theme 'dichromacy t)
25: (set-face-attribute 'default nil :height 120)

4.3. Facilidade de uso

Vamos colocar alguns pacotes para facilitar a vida do usuário. Evitar que ele tenha que ter uma memória de elefante para lembrar de tudo, procurar em um site de buscas, ler documentação, usar IA ou qualquer outra coisa que tire o foco do que ele está fazendo. Será incluído o link do pacote para a busca de mais informações sobre o mesmo.

4.3.1. Vertico

Quando você vai digitar um comando como M-x package, o Emacs mostra no minibuffer algo como:

vertico-0.png

Até existem algumas facilidades como TAB para ver os complementos. Instalando o vertico já facilita bastante. Quando se digita M-x, os últimos comandos utilizados aparecem no topo da lista. Ao iniciar a digitação os comandos são filtrados, aparecendo a quantidades de comandos disponíveis. Também é possível utilizar as setas para selecionar o comando. A tecla TAB irá preencher o campo do comando e/ou a tecla RET irá executar o comando selecionado. Se for escolhido load-theme para selecionar um novo tema para o Emacs, o mesmo procedimento será adotado, isto é, a relação de temas disponíveis será mostrada e você terá as mesmas faclidades para selecionar. Fica algo como:

vertico-1.png

Inclui as mesmas funcionalidades para a abertura de arquivos (C-x C-f) e gravação (C-x C-w).

vertico-2.png

26: (use-package vertico
27:   :bind (:map vertico-map
28:               ("C-j" . vertico-next)
29:               ("C-k" . vertico-previous)
30:               ("C-f" . vertico-exit)
31:               :map minibuffer-local-map
32:               ("M-h" . backward-kill-word))
33:   :custom
34:   (vertico-cycle t)
35:   :init
36:   (vertico-mode))

4.3.2. Marginalia

O vertico já facilitou um pouco a vida do usuário. Mas só o nome do comando não quer dizer muito para quem não conhece. Aí que entra o Marginalia. O que ele faz é adicionar uma coluna com informações sobre o comando. Após a instalação do pacote, o minibuffer fica com a seguinte apresentação:

marginalia.png

Também inclui informação para a abertura e gravação de arquivos.

marginalia-1.png

37: (use-package marginalia
38:   :after vertico
39:   :custom
40:   (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-ligh nil))
41:   :init
42:   (marginalia-mode))

4.3.3. Orderless

Para refinar ainda mais a pesquisa, entra o Orderless. Se você digitar pack, todos os comando que possuem pack serão mostrados, independente da posição do trecho. Informando ^pack (circunflexo no início) apenas os comando que iniciam com o trecho serão mostrado. Ou poderá colocar um cifrão no final (tall$) e, apenas os comando que terminarem com o trecho serão mostrados. Colocando duas palavras (pode ser mais porém não há necessidade) separadas por espaço, todos os comando que possuírem as duas palavras em quelquer ordem serão mostrados.

43: (use-package orderless
44:   :config
45:   (setq completion-styles '(orderless basic)))

Exemplo (mostrando as palavras salientadas):

orderless.png

4.3.4. which-key

Quando você digita,por exemplo, C-x, o Emacs fica assim:

which-key.png

É ele olhando para você com aquela cara de te peguei e você olhando para ele com cara de interrogação. Procurar na internet, etc. ouinstlar uma extensão para facilitar? Uma extensão é claro. E o nome dela é which-key.

46: (use-package which-key
47:   :defer 0
48:   :diminish
49:   :config
50:   (which-key-mode 1)
51:   (setq which-key-add-column-padding 1
52:         which-key-separator " → " ))

Agora, digitando C-x aparecerá no minibuffer as possibilidades existentes

which-key-1.png

No exemplo acima, temos 6 páginas de informação. Para ir para a próxima página C-h n ou C-h p para ir para a página anterior (existem outras possibilidade). Caso seja pressionado C-h u, a o prefixo anterior (C-x) será cancelado e mostrará a ação de todos os atalhos sem prefixo.

which-key-2.png

Agora já são 18 telas com informações. Já é possível descrobrir que pressionando C-F10 abre o menu de buffer (basicamente você poderá trocar entre os diversos buffers abertos). Considere explorar as opções digitando C-h n para ver as outras páginas. Não é necessário decorar mas, ter uma ideia das opções faz você ganhar tempo. Eu sei que o Emacs faz e sei como procurar naquele mar de opções. Ponto para você.

4.4. org-mode

53: (with-eval-after-load 'org
54:   (setq org-html-head-include-scripts t) ;; salientar
55:   (require 'org-tempo)
56:   (define-key org-mode-map (kbd "<S-left>") nil)
57:   (define-key org-mode-map (kbd "<S-right>") nil)
58:   (dolist (mode
59:            '(("sh" . "src shell")
60:              ("os" . "src org :exports src")
61:              ("el" . "src emacs-lisp")))
62:     (add-to-list 'org-structure-template-alist mode)))
63: 
64: (use-package htmlize)

5. Teclado

Você verá que a maioria das teclas funcionam como você está acostumado a utilizar no seu editor preferido.

5.1. Movimentação

tecla função
HOME Move o cursor para o início da linha
C-HOME Move o cursor para o início do buffer
END Move o cursor para o final da linha
C-END Move o cursor para o final do buffer
Setas Movem o cursor na direção da seta
PgDn Move o cursor uma página para baixo
PgUp Move o cursor uma página para cima

Se a tecla Shift estiver pressionada, o texto da posição atual até a final será selecionado. Dependendo do modo do buffer, alguma coisa pode funcionar de forma diferente. No org-mode, por exemplo, trocam os valores das células entre duas colunas em uma tabela.

Para selecionar todo o arquivo usa-se C-x h. Você também poderá ir para o início com C-home pressionar Shift e C-End. Finalmente, poderia incluir no arquivo de configuração uma linha como (global-set-key (kbd "C-a" 'mark-hole-buffer).

5.2. Macros

É um recurso interessante para quando você precisa executar uma sequência repetitiva no teclado.

  • F3 : Inicia a gravação da macro. Tudo o que você teclar será armazenado para repetição futura.
  • F4 : Se você estiver gravando uma macro, a gravação será finalizada.

6. Referências

Algumas referências para posterior consulta:

  • Emacs Docs : links para manuais do GNU Emacs, GNU Elisp, Org, AUCTeX e Magit.
  • Emacs Themes : uma relação de diversos themas para o Emacs.
  • awesome-emacs : relação organizada com uma breve descrição de diveresos pacotes disponíveis.

Autor: Guaracy Monteiro

Criado em: 2024-08-18 dom 01:30

Validate