O Emacs é um IDE (Integrated Development Environment), na verdade ele foi o primeiro a existir. Datando de 1976 como um simples editor de macros (Editor MACroS) criado por Richard Stallman, foi convertido em um poderoso editor em 1984 que vinha a ser o primeiro ambiente de desenvolvimento integrado, o qual auxiliava o programador a fazer tarefas relacionadas ao desenvolvimento, como compilar, depurar, testar e outras coisas inerentes ao processo de desenvolvimento.
Emacs pode ser extendido usando a linguagem LISP ou seu próprio dialeto E-Lisp (Emacs Lisp). Hoje existem diversas extensões para o Emacs, sendo possível fazer quase tudo dentro dele. Ler email, conversar no IRC, ver páginas Web e até um servidor HTTP são módulos implementados para este IDE. Pessoas como alguns professores do IC e mesmo o Richard Stallman são conhecidas por usar seu computador totalmente via o Emacs.
A interface padrão do Emacs conta com 3 componentes principais:
Mais componentes podem ser adicionados, seja por meio de divisão de janelas ou por módulos extras os quais podem adicionar funcionalidade. Também podem existir barras de rolagem e menu, os quais podem ser desabilitados posteriormente.
Neste texto usaremos a notação do Emacs para teclas de atalho,
na qual C-c diz que devemos manter pressionada a
tecla Control enquanto pressionamos a tecla
c. Já M-c diz que devemos manter
pressionada a tecla Meta (a qual é traduzida para
Alt nos PCs) enquanto pressionamos a tecla c.
Note que o Emacs é famoso por usar teclas de atalho encadeadas,
isto é descrito como C-c M-x significa que devemos
pressionar Control enquanto pressionamos c,
soltamos todas as teclas e então pressionamos Meta
enquanto pressionamos x.
Além de ser acessível via teclas de atalho e menus, o Emacs
ainda entende comandos os quais devem ser digitados no
mini-buffer que ficará ativo após a combinação
M-x.
Para cada atalho descrito, segue o comando que este executa.
O Emacs possui algumas teclas de atalho globais, as mais úteis são:
C-@ é um atalho alternativo.
C-SPACE). O
conteúdo apagado vai para o buffer temporário, podendo ser
colado depois.
O Emacs suporta dois tipos de abreviação: dinâmica e estática. Na abreviação dinâmica ele tenta inferir o que você quer digitar a partir do texto que você digitou. Na estática você define sequências de caracteres que serão automaticamente substituidas pelo dado texto.
Vide o manual do emacs para saber como salvar suas abreviações.
C-u numero_de_palavras C-x a g.
O Emacs pode ser personalizado configurando os valores das variáveis que ele usa internamente, valores tais devem ser salvos em um arquivo ~/.emacs.
Como saber todos os nomes e opções é difícil, o emacs provê uma interface a qual pode ser acessada com os comandos:
O Emacs provê vários modos de edição, algum deles são modos principais, voltados à programação de C ou Python, outros são genéricos, também conhecidos como minor modes e pode ser utilizados junto com os principais, como o caso do Auto-Fill, que quebra linhas de texto.
Ao ler um arquivo Python (arquivos terminados em .py) ou qualquer outro nome a definir com a variável lisp auto-mode-alist o modo de edição especialmente preparado para Python. Neste modo, além do destaque de sintaxe, ele provê funcionalidades extras, tais como:
C-M-\ indent-region funciona de modo
equivalente, sendo uma tecla de atalho constante em todas as
linguagens.
ECB http://ecb.sourceforge.net é um projeto que implementa melhores funcionalidades para navegação no código fonte pelo Emacs. Ele adiciona três componentes à janela, sendo eles um navegador de arquivos, um navegador de classes e funções e um histórico de arquivos abertos. Isso facilita o acesso a várias partes do projeto.
O modo ECB define varias teclas de atalho, dentre elas:
Se você decorou todas os atalhos que foram mencionados aqui, você usará o Emacs de maneira muito mais rápida ou ao menos poderá impressionar sua mãe...Meu filho mexe no computador que eu nem consigo ver! ou senão pode virar pianista, pois como dizem O Emacs não tem teclas de atalho, tem acordes e entenda isto como uma partitura ;)
;; Custom Variables
(custom-set-variables
'(add-log-current-defun-function nil)
'(add-log-mailing-address "my@emai.com" t)
'(auto-compression-mode t nil (jka-compr))
'(browse-url-generic-program "w3m")
'(calculator-remove-zeros (quote leave-decimal))
'(case-fold-search t)
'(column-number-mode t)
'(ecb-layout-window-sizes (quote (("left8" (0.2753623188405797
. 0.16666666666666666)
(0.2753623188405797
. 0.16666666666666666)
(0.2753623188405797 . 0.5)
(0.2753623188405797
. 0.14814814814814814)))))
'(ecb-options-version "2.21")
'(ecb-source-path (quote ("/home/gustavo/Development/svn/pytvgrab"
"/home/gustavo/Development/cvs/freevo"
"/home/gustavo/Development/cvs/kde"
"/home/gustavo/Development/cvs/libvisual"
"/home/gustavo/Development/cvs/libvisual-plugins" "/home/gustavo")))
'(ecb-tag-display-function (quote ((default
. ecb-format-tag-uml-prototype))))
'(global-font-lock-mode t nil (font-lock))
'(ispell-dictionary-alist
(quote
(
(nil "[A-Za-z]" "[^A-Za-z]" "[']"
nil ("-B") nil iso-8859-1)
("american" "[A-Za-z]" "[^A-Za-z]"
"[']" nil ("-B") nil iso-8859-1)
("brasileiro"
"[A-ZÁÉÍÓÚÀÈÌÒÙÃÕÇÜÂÊÔa-záéíóúàèìòùãõçüâêô]"
"[^A-ZÁÉÍÓÚÀÈÌÒÙÃÕÇÜÂÊÔa-záéíóúàèìòùãõçüâêô]"
"[']"
nil
("-d" "pt_BR")
nil iso-8859-1)
("british"
"[A-Za-z]"
"[^A-Za-z]"
"[']"
nil
("-B" "-d" "british")
nil iso-8859-1)
("english"
"[A-Za-z]"
"[^A-Za-z]"
"[']"
nil
("-B") nil iso-8859-1)
("portugues"
"[a-zA-ZÁÂÉÓàáâéêíóãú]"
"[^a-zA-ZÁÂÉÓàáâéêíóãú]"
"[']"
t
("-C" "-d" "portugues")
"~latin1" iso-8859-1)
)
)
)
'(ispell-program-name "aspell")
'(menu-bar-mode nil)
'(mouse-wheel-mode t nil (mwheel))
'(save-abbrevs (quote silently))
'(save-place t nil (saveplace))
'(scroll-bar-mode nil)
'(show-paren-mode t nil (paren))
'(show-trailing-whitespace t)
'(spell-command "aspell")
'(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify)))
'(tool-bar-mode nil nil (tool-bar))
'(tooltip-gud-tips-p t)
'(transient-mark-mode t)
'(uniquify-buffer-name-style (quote forward) nil (uniquify))
'(which-func-modes (quote (emacs-lisp-mode c-mode c++-mode perl-mode
cperl-mode makefile-mode
sh-mode fortran-mode
python-mode)))
'(which-function-mode nil nil (which-func))
'(x-select-enable-clipboard t))
;; Colors and Fonts:
(custom-set-faces
'(default ((t (:stipple nil :background "#000000" :foreground
"#d9d9d9" :inverse-video nil :box nil
:strike-through nil :overline nil :underline
nil :slant normal :weight normal :height 94
:width normal :family "adobe-courier"))))
'(cursor ((t (:background "#ff00ff" :foreground "black"))))
'(ecb-bucket-node-face ((((class color) (background dark)) (:inherit
ecb-default-general-face :weight bold))))
'(ecb-default-highlight-face ((((class color) (background dark))
(:background "#226622"))))
'(ecb-directories-general-face ((((class color) (background dark))
(:inherit ecb-default-general-face
:foreground "#3333ff"
:height 1.0))))
'(ecb-directory-face ((((class color) (background dark)) (:inherit
ecb-default-highlight-face :background "#222222" :foreground "#4444ff"))))
'(ecb-tag-header-face ((((class color) (background dark))
(:background "#003300"))))
'(ecb-tree-guide-line-face ((((class color) (background dark))
(:inherit ecb-default-general-face
:foreground "gray35" :height
1.0))))
'(mode-line ((((type x w32 mac) (class color)) (:background "gray15"
:foreground "wheat" :box (:line-width -1 :style released-button)))))
'(scroll-bar ((t (:background "gray75" :foreground "#000000"))))
'(tool-bar ((((type x w32 mac) (class color)) (:background "gray75"
:foreground "black" :box (:line-width 1 :style released-button))))))
;; Abbreviations file
(quietly-read-abbrev-file "~/.abbrev_defs")
;; Meta-g is now goto-line
(global-set-key "\M-g" 'goto-line)
;; Shift+F3 search for manual page
(global-set-key [S-f3] 'man)
;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [f11] 'w3m-browse-url)
(global-set-key [S-f11] 'w3m-search)
(unless (fboundp 'w3m)
(add-site-lisp-load-path "w3m/")
(autoload 'w3m "w3m" "Interface for w3m on Emacs." t)
(autoload 'w3m-find-file "w3m" "w3m interface function for local file." t)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)
;(autoload 'w3m-search "w3m-search" "Search QUERY using SEARCH-ENGINE." t)
(autoload 'w3m-antenna "w3m-antenna" "Report change of WEB sites." t)
(autoload 'w3m-bookmark-view "w3m-bookmark" "List w3m bookmarks" t))
(setq w3m-key-binding 'info)
(setq w3m-search-default-engine "google")
(setq w3m-fill-column 100)
(add-hook 'w3m-mode-hook
'(lambda()
(define-key w3m-mode-map [(meta ?c)] 'w3m-print-current-url)))
;;;;;;;;;;;;;;;;;;;;;;;;; Web Jump ;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'webjump)
;; Keys
(global-set-key [f12] 'webjump)
;(global-set-key [(super meta j)] 'webjump-w3)
(global-set-key [S-f12] 'webjump-w3)
;; Sites
(setq webjump-sites
'(
("google" . [simple-query "www.google.com"
"www.google.com/search?q=" ""])
("Google Groups" . [simple-query "groups.google.com"
"groups.google.com/groups?q="
""])
("Debian GNU/Linux" . [simple-query "www.debian.org"
"search.debian.org/?q="
""])
("Python Documentation" . [simple-query "starship.python.net"
"http://starship.python.net/crew/theller/pyhelp.cgi?keyword=" "&version=current"])
("Dictionary.com" . [simple-query "www.dictionary.com"
"www.dictionary.com/cgi-bin/dict.pl?term=" "&db=*"])
("latex online help"
. "http://www.giss.nasa.gov/latex/ltx-2.html")
("latex online index"
. "http://www.weinelt.de/latex/index.html")
))
;; Browser
(if (eq window-system 'x)
;;; Browser for X mode:
;; Netscape
;(setq browse-url-browser-function 'browse-url-netscape
;browse-url-new-window-p t)
;; KDE
(setq browse-url-browser-function 'browse-url-kde)
(setq browse-url-browser-function 'w3m-browse-url)
)
;; New XML
(add-to-list 'auto-mode-alist
(cons (concat "\\." (regexp-opt '("xml" "xsd" "sch" "rng"
"xslt" "svg" "rss") t)
"\\'")
'nxml-mode))
;;(add-hook 'hack-local-variables-hook
;; (lambda ()
;; (save-excursion
;; (when (search-forward-regexp "^<\\?xml" 6 0)
;; (nxml-mode)
;; ))))
;; Default mode is latex, not tex:
(setq tex-default-mode 'latex-mode)
Gustavo Sverzut Barbieri barbieri gmail.com