Cómo compilar e instalar Emacs 24.3 en Ubuntu 13.04

Emacs se ha convertido en mi editor de código favorito, aquí presento los pasos necesarios para compilarlo e instalarlo en Ubuntu a partir del código fuente (ya sabes, la versión más reciente aún no se encuentra en los repositorios oficiales). 😉

El procedimiento para hacernos con la versión más reciente de Emacs es descargar el código fuente, descomprimir el archivo, instalar las dependencias necesarias para compilarlo, compilar el código fuente e instalar.

Al momento de editar este artículo, la última versión disponible era la 24.3
Revisa cuál es la más reciente aquí.

Instalación

Abre una terminal, ingresa al directorio en donde se va a descargar el código fuente de Emacs (por ejemplo ~/tmp), luego teclea lo siguiente:

  1. wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.3.tar.gz
  2. tar -xzvf emacs-24.3.tar.gz
  3. sudo apt-get install xorg-dev libjpeg-dev libpng-dev libgif-dev libtiff-dev autoconf automake libgconf2-dev libgpm-dev libtool libdbus-1-dev libgtk2.0-dev libm17n-dev libncurses-dev libotf-dev librsvg2-dev libXpm-dev texinfo
  4. cd emacs-24.3
  5. ./configure
  6. make

Prueba si se compiló bien:

src/emacs -q

Si no hubo problemas para ejecutarlo, instálalo con:

sudo make install

Listo, para probar tu instalación teclea esto:

emacs &

Cierra la aplicación, cerrando la ventana o con la combinación Control+x+c, que usualmente se denota así:

C-x-c

Un ambiente más amigable: emacs-starter-kit

Primero debemos agregar el repositorio donde se encuentra el starter-kit:

gedit ~/.emacs.d/init.el

Y agrega estas líneas:

  1. ;; Agrega el repositorio de paquetes Marmalade para poder instalar el starter-kit
  2. (require 'package)
  3. (add-to-list 'package-archives
  4.              '("marmalade" . "http://marmalade-repo.org/packages/") t)
  5. (package-initialize)
  6.  
  7. ;; Instala automáticamente paquetes que hagan falta
  8. (when (not package-archive-contents)
  9.   (package-refresh-contents))
  10.  
  11. ;; Agrega los paquetes que desees a esta lista, en mi caso los que ocupo son estos:
  12. (defvar my-packages '(starter-kit ruby-mode ruby-end haml-mode sass-mode scss-mode coffee-mode)
  13.   "A list of packages to ensure are installed at launch.")
  14.  
  15. (dolist (p my-packages)
  16.   (when (not (package-installed-p p))
  17.     (package-install p)))

Inicia Emacs y… ¡Listo, a programar!

Configuración

Para personalizar Emacs, abre una terminal y teclea:

gedit ~/.emacs.d/$USER.el

A continuación presento el contenido del mío:

  1. ; tab width to two spaces
  2. (setq-default indent-tabs-mode nil)
  3. (setq-default tab-width 2)
  4.  
  5. ; move across buffers
  6. ; http://stackoverflow.com/questions/91071/emacs-switch-active-window
  7. (global-set-key (kbd "S-<up>") 'windmove-up)
  8. (global-set-key (kbd "S-<down>") 'windmove-down)
  9. (global-set-key (kbd "S-<right>") 'windmove-right)
  10. (global-set-key (kbd "S-<left>") 'windmove-left)
  11.  
  12. ; resize buffers
  13. ; http://www.emacswiki.org/emacs/WindowResize
  14. (global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
  15. (global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
  16. (global-set-key (kbd "S-C-<down>") 'shrink-window)
  17. (global-set-key (kbd "S-C-<up>") 'enlarge-window)
  18.  
  19. ; default theme
  20. (load-theme 'wombat)
  21.  
  22. ; default global mode
  23. ; http://stackoverflow.com/questions/6378831/emacs-globally-enable-whitespace-mode
  24. (global-whitespace-mode 1)
  25. (column-number-mode 1)
  26.  
  27. ; font settings
  28. ;(set-face-attribute 'default nil :height 110)
  29. (if (eq window-system 'x)
  30.   (set-default-font "DejaVu Sans Mono-13"))
  31.  
  32. ; incrementar/decrementar el tamaño de la fuente
  33. (defun sacha/increase-font-size ()
  34.   (interactive)
  35.   (set-face-attribute 'default
  36.                       nil
  37.                       :height
  38.                       (ceiling (* 1.10
  39.                                   (face-attribute 'default :height)))))
  40. (defun sacha/decrease-font-size ()
  41.   (interactive)
  42.   (set-face-attribute 'default
  43.                       nil
  44.                       :height
  45.                       (floor (* 0.9
  46.                                   (face-attribute 'default :height)))))
  47. (global-set-key (kbd "C-+") 'sacha/increase-font-size)
  48. (global-set-key (kbd "C--") 'sacha/decrease-font-size)
  49.  
  50.  
  51. ; Agregar modo CSS para abrir así los archivos .scss
  52. (add-to-list 'auto-mode-alist '("\\.scss$" . scss-mode))
  53.  
  54. ; Agregar modo coffeescript para abrir así los archivos .coffee.erb
  55. (add-to-list 'auto-mode-alist '("\\.coffee.erb$" . coffee-mode))
  56.  
  57. ;; https://github.com/bbatsov/emacs-dev-kit/blob/master/ruby-config.el
  58. ;; Rake files are ruby, too, as are gemspecs, rackup files, and gemfiles.
  59. (add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode))
  60. (add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
  61. (add-to-list 'auto-mode-alist '("\\.gemspec$" . ruby-mode))
  62. (add-to-list 'auto-mode-alist '("\\.ru$" . ruby-mode))
  63. (add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))
  64. (add-to-list 'auto-mode-alist '("Guardfile$" . ruby-mode))
  65. (add-to-list 'auto-mode-alist '("\\.rabl$" . ruby-mode))
  66.  
  67. ;; We never want to edit Rubinius bytecode
  68. (add-to-list 'completion-ignored-extensions ".rbc")
  69.  
  70. ;; Load ruby-end minor mode when ruby-mode is loaded
  71. ;; http://stackoverflow.com/questions/4767557/how-do-i-get-hs-minor-mode-to-load-automatically-on-php-mode-in-emacs
  72. (add-hook 'ruby-mode-hook (lambda () (ruby-end-mode 1)))
  73. ;(add-to-list 'load-path "/home/victor/.emacs.d")
  74. ;(require 'ruby-end)
  75.  
  76. ;transparent emacs!
  77. (defun djcb-opacity-modify (&optional dec)
  78.   "modify the transparency of the emacs frame; if DEC is t,
  79.     decrease the transparency, otherwise increase it in 5%-steps"
  80.   (let* ((alpha-or-nil (frame-parameter nil 'alpha)) ; nil before setting
  81.          (oldalpha (if alpha-or-nil alpha-or-nil 100))
  82.          (newalpha (if dec (- oldalpha 5) (+ oldalpha 5))))
  83.     (when (and (>= newalpha frame-alpha-lower-limit) (<= newalpha 100))
  84.       (modify-frame-parameters nil (list (cons 'alpha newalpha))))))
  85.  
  86. ;; C-8 will increase opacity (== decrease transparency)
  87. ;; C-9 will decrease opacity (== increase transparency
  88. ;; C-0 will returns the state to normal
  89. (global-set-key (kbd "C-8") '(lambda()(interactive)(djcb-opacity-modify)))
  90. (global-set-key (kbd "C-9") '(lambda()(interactive)(djcb-opacity-modify t)))
  91. (global-set-key (kbd "C-0") '(lambda()(interactive)
  92.                                (modify-frame-parameters nil `((alpha . 100)))))

Referencias

Installing Emacs from Source on Ubuntu
Emacs Starter Kit

Error al tratar de instalar Emacs 23.1

[singlepic=630,60,,,left]

Después de descargar y compilar el Emacs, al momento de tratar de instalarlo con sudo make install obtenía este error:

makeinfo is missing – cannot build manuals

Lo que hay que hacer es editar el archivo Makefile y cambiar la línea que dice:

  1. MAKEINFO=no

Por esta otra:

  1. MAKEINFO=off

Fuente

Subject: bug#3982: Emacs 23.1 configure/Makefile: MAKEINFO=no inconsistent with test for $(MAKEINFO)=off – msg#00001

Cómo ajustar el tamaño de las ventanas en Emacs

[singlepic=630,60,,,left]

Cuando ejecutamos Emacs, lo que se abre y que conocemos comúnmente como ventana, es llamado frame.

Un frame a su vez puede contener varias ventanas, al divirse de manera horizontal o vertical.

Ahora que tengo Nav, andaba buscando una manera fácil de ajustar el tamaño de mis ventanas y me encontré con el siguiente código que agregué a mi archivo de configuración personalizado:

  1. (global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
  2. (global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
  3. (global-set-key (kbd "S-C-<down>") 'shrink-window)
  4. (global-set-key (kbd "S-C-<up>") 'enlarge-window)

Ahora puedo mover los bordes de las ventanas usando una combinación de teclas como Control + Shift + Up o cualquera de las otras tres flechas. 🙂

Depredado en

WindowResize

En búsqueda de un explorador de archivos para Emacs

[singlepic=630,60,,,left]

Cada vez me gusta más Emacs, aunque no sé mucho, poco a poco le he ido agarrando la onda.

Pero mis necesidades han crecido, y ahora que ando jugando con un proyecto que involucra varios archivos en varios subdirectorios, me es cada vez más complicado el cambiar entre ellos.

Sentí que me hacía falta un explorador de archivos para poder navegar fácilmente en los directorios de mi aplicación.

Encontre dos opciones:

  • Nav, un modo de Emacs para facilitar la navegación de directorios.
  • ECB (Emacs Code Browser) que al parecer trata de convertir a Emacs en una IDE al estilo NetBeans y Eclipse.

 
Nav es ligero y sumamente fácil de instalar y utilizar, además funciona en la terminal, ya que no te abre otro frame, sólo una barrita de navegación a la izquierda. Luce así:
[singlepic=667,220,,,center]

ECB es un paquete mucho más completo, pero por el momento creo que me quedaré con Nav.

Cuando tenga necesidad de algo más avanzado y esté más desenvuelto en Emacs, seguramente probaré ECB.

90 esquemas de color para Emacs

[singlepic=630,60,,,left]

Qué tal, ¿recuerdan que comenté que aprendería a usar Emacs?

Pues ya he dado mis primeros pasos —yay jeje— y quiero compartirles algo que me ha hecho la vida mucho más fácil a la hora de trabajar por largo rato en el editor. Se trata de diversos esquemas (temas) de color que puedes emplear en tu Emacs.

90 esquemas de color para Emacs

La persona a cargo del Color Theme Test, tiene una página donde puedes ver un avance de como se verían tus programas con cada esquema.

Los lenguajes en cuestión son:

La instalación es fácil, solo debes poner el archivo color-theme.el y la carpeta themes en algún directorio en tu disco duro y agregar la ruta a tu loadpath, en mi caso puse el archivo color-theme.el y la carpeta themes dentro de ~/.emacs.d/vendor/color-theme y después agregué el siguiente código a uno de mis archivos de inicialización de Emacs, llamado: ~/.emacs.d/lobo.el.

  1. (add-to-list 'load-path (concat dotfiles-dir "/vendor/color-theme"))
  2. (require 'color-theme)
  3. (color-theme-initialize)
  4. (color-theme-charcoal-black)
Si existe un archivo con tu nombre de usuario de Linux y extensión .el dentro de .emacs.d, éste será cargado automáticamente cuando inicies Emacs.
Por ejemplo mi nombre de usuario en Ubuntu es lobo. Por eso Emacs carga automáticamente el archivo llamado ~/.emacs.d/lobo.el.

Eso nos dará un hermoso esquema de colores para trabajar por largo tiempo. 😀
¿Se nota que mis preferidos son los temas con fondo oscuro?

Descárgalos aquí.

Chuletas (Cheat Sheets)

Por cierto, creo que esto te puede ser de utilidad al iniciarte en Emacs:

Hacer que Emacs reconozca otras extensiones de archivo

Emacs está configurado para reconocer las extensiones de los archivos y abrir el modo correspondiente.

Pero ¿cómo hacemos para indicarle que abra cierto tipo de archivo en cierto modo?

Este artículo nos indica como:
Emacs and PHP tutorial: php-mode
(A pesar de que está hecho para PHP, es fácil adaptarlo para cualquier otro lenguaje).