Tengo una configuración muy similar a la suya (Emacs 22.1, 22.2, 23.1 en varias versiones de Linux con y sin X y Windows con y sin Cygwin). Mi configuración incluye ELPA, auctex, emacsw32, CEDET, JDEE, nxml y varios otros paquetes de elisp. No uso lo que viene con el sistema, pero guardo copias de esos paquetes en subversión.
La mayoría de la configuración solo funciona en todos los entornos. En cuanto a las rutas, creo que la mayoría de las cosas que uno quiere llamar, como aspell, también se pueden llamar fuera de Emacs desde la línea de comandos, por lo que vale la pena ponerlas en $ PATH, evitando así tener que especificar rutas completas en Emacs.
Para otras cosas, hago En .emacs:
; Load system-specific library and setup system-specific things that
; must be setup before main setup
(cond ((eq system-type 'windows-nt) (load-library "ntemacs-cygwin"))
((eq system-type 'gnu/linux) (load-library "linux"))
(t (load-library "default")))
(system-specific-setup)
; Set up things as usually, no more system-type queries.
Donde en linux.el:
(defun system-specific-setup()
; Default font
(add-to-list
'default-frame-alist
'(font . "-Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO8859-1"))
(setq my-frame-width 95)
(setq my-frame-height 56)
; Not much else
)
Y en ntemacs-cygwin.el:
(defun system-specific-setup()
;; EmacsW32
(setq emacsw32-root (concat private-elisp-lib "EmacsW32"))
(add-to-load-path emacsw32-root)
;; Work around XSymbol initialization bug
;; ("C:\\ImageMagick\\convert" instead of system $PATH? Seriously?)
(setq x-symbol-image-convert-program "convert")
;; etcetera...
)
Básicamente se trata de configurar las cosas en un sistema, probarlas en otro y factorizar lo que sea necesario diferir diferente a la configuración específica del sistema.
Y el artículo de Steve Yegge en la respuesta de Noufal es muy bueno.
+1 de código real. Debo aprender a ser menos perezoso la próxima vez. :) –