2011-08-03 12 views
7

Estoy tratando de hacer que mi archivo de configuración de Emacs escrito para OS X funcione en Ubuntu. Tengo esta línea:Encontrar el directorio site-lisp de Emacs

(add-to-list 'load-path "/usr/local/Cellar/emacs/23.3/share/emacs/site-lisp/w3m") 

Se utiliza para cargar emacs-w3m. En OS X instalé Emacs usando Homebrew, por lo tanto está en /usr/local/Cellar/. El directorio site-lisp en Ubuntu está en un lugar diferente. ¿Cómo puedo escribir esta línea de manera que funcione en ambos sistemas operativos? ¿Hay una función Emacs Lisp para recuperar el directorio site-lisp?

Respuesta

7

No, no hay manera. El directorio site-lisp es una convención y solo se acordó su existencia y no su ruta.

O se establece un enlace simbólico en su Mac/Ubuntu o se utiliza un interruptor del sistema:

(defconst my-lisp-dir (cond 
    ((equal system-type 'gnu/linux) "/usr/share/emacs/site-lisp/") 
    ((equal system-type 'darwin) (concat "/usr/local/Cellar/emacs/" (number-to-string emacs-major-version) "." (number-to-string emacs-minor-version) "/share/emacs/site-lisp/")) 
    (t (concat "/usr/local/emacs/site-lisp/"))) 

y luego

(add-to-list 'load-path (concat my-lisp-dir "w3m")) 
+0

Esto parece lo mejor que Emacs Lisp puede hacer para este problema. – hekevintran

+0

O para una solución más general, podría recorrer su 'ruta de carga' actual y buscar subdirectorios llamados' w3m' y luego agregarlos a la ruta de carga. Sin embargo, no creo que esto realmente deba ser necesario. ¿'W3m' no instala sus propias autocarga? ¡Debería! – tripleee

-1

Si está usando Emacs 23 se puede utilizar lo siguiente:

(concat user-emacs-directory 
     (convert-standard-filename "site-lisp/")) 

Sin embargo, esto sólo encontrará la ubicación "por defecto" para los archivos Lisp instalados por el usuario.

+0

Ese es el directorio _user_ no uno del sistema. –

+0

Sí, estás en lo correcto. – zev

1

He intentado esto en mi Windows Emacs (23.4.1) y Mac OS Emacs (23.4.1) para mi otro complemento y funcionó.

(concat (car load-path) "/w3m") 

Por lo general, load-path tiene el site-lisp como primer elemento de la lista.

+1

No lo consideraría confiable. – phils

1

Cree un archivo subdirs.el en su directorio site-lisp que hace (add-to-list 'load-path (expand-file-name "w3m" (file-name-directory load-file-name))). Dicho esto, también puede colocar su directorio w3m en cualquier lugar que desee, para que no tenga que preocuparse por dónde está site-lisp, pero solo donde está w3m.

1

site-lisp está destinado a hacer que las bibliotecas estén disponibles para todos los usuarios en un sistema dado, y así se administrarían por sistema.

Si solo intenta administrar su propia configuración de forma coherente en todos los servidores, no coloque las cosas en site-lisp; ponerlos bajo un subdirectorio del directorio de usuario, como ~/.emacs.d/lisp/ y luego usar:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/w3m")) 

Si desea consultar su load-path para un directorio "site-lisp" (o aquellos que se parecen a uno) , usted puede hacer esto:

(remove-if-not 
(lambda (path) (string-match-p "/site-lisp\\'" path)) 
load-path) 

(pero la respuesta de Stefan es mejor si usted realmente quiere mantener las cosas en site-lisp)

1

Por alguna razón (véase más adelante) que quería establecer package-user-dir (ELPA) a la sitio-lisp-directory .

Debería ser posible deducir el directorio site-lisp de la exec-directory variable estándar:

(setq site-lisp-directory (concat exec-directory "../site-lisp") 

Al menos con los precompilados Emacs-versiones de GNU esto funciona (el directorio ya existe).Finalmente crear el directorio:

(unless (file-accessible-directory-p site-lisp-directory) 
    (make-directory site-lisp-directory)) 

Mi motivación fue que package-user-dir por defecto es %USERPROFILE%/.emacs.d/elpa/, que parece ser un lugar bastante extraño. Los paquetes se instalarán en todo el sistema para todos los usuarios. También ~/.emacs.d contiene configuraciones de servidor, listas de guardado automático y copias de seguridad. ¿Qué tienen que hacer los paquetes cuando Emacs tiene un sitio-lisp-directory dedicado que uno puede pedir?

Sin embargo, el verdadero "problema" fue el precompiled Emacs 24.3 para Windows. No requiere instalación y, por lo tanto, se puede ejecutar de forma portátil, como desde un dispositivo. En mi humilde opinión, ELPA debería usar su directorio site-lisp para que los paquetes también se puedan instalar de manera portátil.

Cuestiones relacionadas