Emacs

O Emacs é um editor altamente customizável, capaz de reconhecer diversos formatos e fornecer ferramentas para lidar com diversas sintaxes. Possui inúmeros pacotes que o permitem funcionar como leitor de e-mails, navegador de internet, cliente de mensagem instantânea, gerenciador de arquivos, gerenciador de bibliografia, planilha eletrônica, calculadora científica, visualizador de imagens e psicoterapeuta (isso mesmo!).

O site oficial é http://www.gnu.org/software/emacs/, e as ferramentas podem ser vistas em: http://www.emacswiki.org/. Um guia rápido para as teclas pode ser visto em http://ccrma.stanford.edu/guides/package/emacs/emacs.html.

Instalação

Linux

Há 3 formas de instalar o Emacs no Linux:

  1. Usando um pacote disponível na distribuição
  2. Rodando um binário disponível pelo projeto
  3. Compilando a versão de desenvolvimento do repositório do projeto

Na instalação através de um pacote usa-se, no Debian:

sudo apt-get update
sudo apt-get install emacs

Para instalar por um binário é preciso baixá-lo em http://ftp.gnu.org/pub/gnu/emacs/, descompactá-lo e instalá-lo.

Para compilar a versão de desenvolvimento é preciso usar o cvs. Maiores instruções em: http://savannah.gnu.org/cvs/?group=emacs

Instalação local

Uma instalação local garante que o Emacs funcionará mesmo sem acesso root. Para instalar siga estes passos:

  • Baixar repositório cvs:

bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk

  • Configurar sistema para instalação local (rodar dentro do diretório trunk):
./configure --prefix=~/usr/emacs/
  • Compilar Emacs:
make
  • Instalar Emacs
make install

Windows

O Emacs é instalado no Windows através de um binário como emacs-22.2-bin-i386.zip disponível em:http://ftp.gnu.org/pub/gnu/emacs/windows/

Configuração do Emacs

O Emacs carrega o arquivo de configuração .emacs. Este arquivo deve ser colocado na pasta pessoal do usuário. No Linux ele fica em/home/usuario/.emacs. Para saber qual a pasta correta abra o Emacs, digite o comando (insert (getenv "HOME")) e compute com C-x C-e.

 

Ponto emacs básico

(put 'upcase-region 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'overwrite-mode 'disabled t)

(setq display-time-day-and-date t
      display-time-24hr-format t
      confirm-kill-emacs 'yes-or-no-p
      inhibit-startup-message t
      font-lock-maximum-decoration t
      sentence-end-double-space nil ; usa espaços simples para sentenças
      default-abbrev-mode t
      vc-follow-symlinks t
      x-select-enable-clipboard t
      text-mode-hook '(turn-on-auto-fill footnote-mode text-mode-hook-identify)
      ediff-window-setup-function 'ediff-setup-windows-plain
      ediff-split-window-function 'split-window-horizontally)

(setq-default indent-tabs-mode nil)
(tool-bar-mode -1)
(show-paren-mode t)
(display-time-mode t)
(column-number-mode t)
(ido-mode t)
(transient-mark-mode -1)

(fset 'yes-or-no-p 'y-or-n-p) 
(set-default-coding-systems 'utf-8)

;; descomente isso para salvar todos os backups em um unico lugar
;;(setq backup-by-copying t
;;      backup-directory-alist '(("." . "~/tmp/emacs-backups"))
;;      delete-old-versions t
;;      kept-new-versions 6
;;      kept-old-versions 2
;;      version-control t)

;;; replace string
(global-set-key (kbd "C-c r") 'replace-string)

;;; footnote mode
(autoload 'footnote-mode "footnote" nil t)
(add-hook 'message-mode-hook 'footnote-mode)
(add-hook 'text-mode-hook 'footnote-mode)

;;; git (vc-mode)
(when (featurep 'vc-git)
  (add-to-list 'vc-handled-backends 'git))

;;; erc
(eval-after-load "erc"
  '(progn
     ;(easy-menu-add-item  nil '("tools") ["IRC" erc-select t])
     (setq erc-timestamp-format "[%H:%M] ")
     (erc-autojoin-mode 1)
     (setq erc-autojoin-channels-alist
     '(("freenode.net" "#lisp" )))))

;;; ispell
(eval-after-load "ispell"
  (progn
    (setq ispell-silently-savep t
    ispell-program-name "aspell"
    ispell-dictionary "american")))

;;; nxml
(add-to-list 'auto-mode-alist
       (cons (concat "\\." (regexp-opt '("xml" "xsd" "sch" "rng" "xslt" "svg" "rss") t) "\\'")
       'nxml-mode))
(unify-8859-on-decoding-mode)
(setq magic-mode-alist
      (cons '("<\\?xml " . nxml-mode)
      magic-mode-alist))
(fset 'xml-mode 'nxml-mode)

Emacs Starter Kit

O Emacs pode ser configurado com a ferramenta Emacs Starter Kit, que instala automaticamente as bibliotecas necessárias para o uso. Originalmente esta biblioteca foi desenvolvida por Phil Hagelberg, mas Pedro Kröger fez um acrescentou configuração para usar o Python em seu fork do repositório.

Para usar basta colocar o repositório em um lugar como ~/lib, criar um .emacs com um código como o que segue abaixo e rodar o Emacs.

 

;; -*- emacs-lisp -*-

;;; load emacs starter kit
(load "~/lib/emacs-starter-kit/init.el")

Definir teclas

Para definir uma tecla de atalho no seu .emacs, use algo como

(global-set-key [(foo bar) baz]  'funcao-a-ser-executada)

Para definir teclas em um modo específico,

(define-key slime-mode-map [(alt control u)] 'rameau-cria-teste-defun)
(define-key slime-mode-map [(control return)] 'rameau-new-test)

Macros

Macros de teclado são simples de usar. C-x ( começa a gravar uma macro e C-x ) termina. Para executar, C-x e. Macros aceitam um comando de prefixo, com C-x u «numero» antes do C-x e. Para perguntar se o usuário quer continuar, use C-x q durante a gravação da macro. Para dar nome à macro, M-x name-last-kbd-macroM-x insert-kbd-macro insere a definição de uma macro no buffer atual, útil pra guardar no .emacs. Para editar uma macro, C-x k RET, e C-c C-c para terminar a edição.

Snippet

snippet.el (disponível em http://www.kazmier.com/computer/snippet.el é uma biblioteca genial para inserir templates de texto. Um exemplo de uso é

(defun insert-texttt ()
  (interactive)
  (snippet-insert "\\\\texttt{$$}"))
(define-key LaTeX-mode-map [(meta control c)] 'insert-texttt)

que cria a função insert-texttt no modo latex presa às teclas C-M-c. Eu recomendo algo como

(define-key snippet-map [(control tab)] 'snippet-next-field)
(define-key snippet-map [(control shift tab)] 'snippet-prev-field)

no .emacs para usar teclas para snippet.

Dired

Dired é o navegador de arquivos do Emacs. Ele é equivalente ao Nautilus do gnome, Konqueror no KDE ou o Windows Explorer. As vantagens principais do dired são integração com o Emacs, automatização de operações em arquivos e velocidade de edição.

Para iniciar o dired, basta abrir um diretório com C-x C-f ou então apertar C-x d ou digitar M-x dired.

A coisa mais simples de se fazer com o dired é deletar arquivos. Para fazer isso, coloque o cursor em cima do arquivo a ser deletado e aperte dpara marcar o arquivo para remoção. Você pode marcar quantos arquivos quiser. Depois, aperte x para executar a deleção. g atualiza a tela do dired. Para desmarcar um arquivo, use u.

O dired também tem comandos para marcar automaticamente alguns tipos de arquivos para deleção. # marca os arquivos de autosave, e ~marca os arquivos temporários. & sugere arquivos temporários para remoção. % d permite que você digite uma expressão regular e marca todos os arquivos que satisfaçam essa expressão.

Para abrir um arquivo no dired, RET ou f dão conta do recado. Para copiar, use C (C maiúsculo, não control). Para renomear, R, para mudar as permissões M e Z para gzipar o arquivo. L carrega o arquivo no emacs (equivalente a M-x load-file). A faz uma busca no arquivo e Q faz um replace. Dentro desses comandos, M-, continua a operação. ! roda um comando do shell no arquivo. % u e % l renomeiam arquivos para maiúsculas e minúsculas, respectivamente. w copia o nome do arquivo selecionado para o clipboard.

Todas essas operações de arquivo operam ou em um arquivo ou em todos os arquivos marcados. Para marcar um arquivo use m ou *, e para marcar vários use % m.

Para fazer um diff, selecione um arquivo com C-SPC, mova o cursor até o outro arquivo e aperte =C-u i insere os conteúdos do subdiretório selecionado no buffer atual. + cria um diretório.

Para entrar no modo editor, use M-x wdired-change-to-wdired-mode. Para salvar e sair, use C-c C-c e para sair sem salvar use C-ESC. Com uma linha tipo (setq wdired-allow-to-change-permissions t) no .emacs é possível editar as permissões dos arquivos.

M-x image-dired é uma versão do dired que mostra miniaturas das imagens em um diretório.

imenu

imenu é um modo útil do emacs para navegar dentro de um arquivo de texto grande. Executar imenu-add-menubar-index calcula um índice do arquivo separando as seções mais importantes, e M-x imenu pede o nome de uma seção e pula para ela. imenu funciona em praticamente qualquer modo do emacs.

No seu .emacs você pode colocar as linhas

No seu .emacs você pode colocar as linhas

(add-hook 'LaTeX-mode-hook 'imenu-add-menubar-index)
(define-key LaTeX-mode-map [(control meta g)] 'imenu)

para habilitar o uso do imenu dentro do auctex, ativando-o com C-M-g.

Emacs-git

O Emacs-Git é um módulo para manipulação do controle de versão git através do Emacs.

É possível baixar pelo repositório git:

git clone git://github.com/tsgates/git-emacs.git

Para instalá-lo é necessário colocar estes arquivos no path do Emacs:

git-emacs.el
git-modeline.el
git-blame.el

No .emacs é necessário colocar o caminho para estes arquivos e requisitar o git-emacs:

(add-to-list 'load-path "/home/tsgates/Skills/git/git-emacs-1.0")
(require 'git-emacs)

É possível usá-lo com M-x ou com teclas de atalho. Os comandos para o M-x começam com git (eg. M-x git-status), e os atalhos começam com C-x v (eg. C-x v = para git-status).

 

Version Control (vc)

vc provê uma interface uniforme de controle de versão para o Emacs. Funciona com os principais controles de versão, tais como: git, svn e cvs. Para o git é necessário instalar o vc-git.

Comando geral do vc, qualquer comando do vc inicia com essas teclas.

C-x v

Marca o arquivo para controle de versão

C-x v i

Faz commit em um arquivo marcado para controle de versão

C-x v v

Mostra o log das revisões

C-x v l

Reverte um arquivo para a última revisão

C-x v u