Mi archivo ~/.emacs

Con el tiempo he descubriendo cada vez más cosas del Emacs (leyendo grupos de noticias, páginas web, manuales, etc) y he decidido compartir las cosas que he aprendido, que no es que sean muchas, pero a lo mejor a alguien le ahorran algunas horas de darse cabezazos con la pared o le impulsan a probar el Emacs.

Mi archivo .emacs tiene mas de 600 lineas y lo uso en tres ordenadores distintos (Linux, WinNT y Win2K) por lo que no resulta útil compartirlo completamente. Estos son los fragmentos más interesantes:

;; Lenguaje
(set-language-environment "Spanish")

;; Colorines         
(custom-set-faces
 '(font-lock-comment-face ((t (:foreground "forest green"))))
 '(highlight ((t (:foreground "blue" :background "indian red"))))
 '(isearch ((t (:inherit region))))
 '(modeline ((t (:foreground "black" :background "steelblue"))))
 '(region ((t (:foreground "white" :background "midnight blue"))))
 '(show-paren-match-face ((t (:foreground "black"
                                          :background "steel blue")))))

;; Teclas
;; Si usas o has usado windows estas teclas te ayudarán a no
;; volverte loco.
(global-set-key [end]    'end-of-line)
(global-set-key [home]   'beginning-of-line)
(global-set-key [delete] 'delete-char)
(global-set-key [C-home] 'beginning-of-buffer)
(global-set-key [C-end]  'end-of-buffer)
(global-set-key [?\C-z]  'undo)
(global-set-key [M-f4]   'delete-frame)

;; Backups
;; Normalmente el Emacs crea backups de los ficheros que es editan,
;; lo cual es una ventaja. Pero esto tiene el inconveniente de dejar
;; ficheros de backup (que terminan con ~) por todas partes. Con la
;; siguiente función se centralizan todos los ficheros de backup y
;; además se van guardando todas las versiones.
(setq make-backup-files t)
(setq auto-save-default nil)
(setq delete-old-versions t)

(defun make-backup-file-name (file)
  "Create the non-numeric backup file name for FILE."
  (require 'dired)
  (let (path)
    (cond ((eq system-type 'windows-nt)
           (setq file (dired-replace-in-string ":" "" file))
           (setq path "D:/Eduardo/Programacion/Backup/"))
          (t
           (setq path "~/.backups/")))
    (concat path
            (dired-replace-in-string "/" "~" file)
            (format-time-string "~%Y%m%d%H%M%S~")
            ;; Repeat the name at the end so we'll have font-lock if
            ;; we open the bakup file.
            (car (last (split-string file "/"))))))

;; Desktop
;; Esta es una funcionalidad del Emacs que es de lo más útil que se
;; puede encontrar. Llevas horas programando, compilando, depurando y
;; tienes los ojos rojos de tanto mirar la pantalla. Decides que ya
;; está bien, que mañana seguirás. Llega el día siguiente y ... donde
;; estabas?. Con el siguiente fragmento de código instalado en tu
;; fichero .emacs no hace falta que te acuerdes, Emacs lo hace por
;; ti. También recordará los últimos 100 ficheros visitados, los
;; últimos 50 comandos usados en la shell o las últimas 20
;; expresiones regulares usadas.
(when (fboundp 'desktop-load-default)
  (desktop-load-default)
  (mapcar
   (lambda (sym) (add-to-list 'desktop-globals-to-save sym))
   '((buffer-name-history      . 20)
     (dired-regexp-history     . 20)
     (extended-command-history . 30)
     (file-name-history        . 100)
     (grep-history             . 30)
     (minibuffer-history       . 50)
     (query-replace-history    . 60)
     (read-expression-history  . 60)
     (regexp-history           . 60)
     (regexp-search-ring       . 20)
     (search-ring              . 20)
     (shell-command-history    . 50)))
  (desktop-read))