2009-06-27 15 views
7

Digo "archivo de proyecto" en el sentido más amplio. Tengo algunos proyectos de python con los que trabajo con ropemacs usando emacs W32 para Windows. Lo ideal sería si pudiera tener un ícono en el que pudiera hacer clic en mi escritorio para abrir emacs, abrir el proyecto de cuerda y establecer la barra de velocidad en el directorio de alto nivel de ese proyecto. Entonces también podría tener una forma de abrir el próximo proyecto en sus propios emacs configurados de la misma manera (pero para ese proyecto). Por supuesto, también es aceptable si hubiera un comando de emacs o un comando de shell que pudiera usar para lograr el mismo efecto en lugar de un ícono en mi escritorio.¿Hay alguna manera de crear un "archivo de proyecto" en Emacs?

¿Hay alguna manera de hacer esto? No tengo absolutamente elisp-fu. :-(

Respuesta

1

Puede ejecutar su propio archivo en bash/cmd.exe. La distribución de Windows emacs viene con un archivo .bat llamado runemacs.bat que acepta archivos para abrir como argumentos. Escriba un pequeño script y debería ser capaz de para abrir todo desde un ícono

2

Utilizo la siguiente "solución" para mí: Una raíz de proyecto está definida por un directorio que contiene un Makefile. He vinculado F12 a la función elisp específica de modo que "compila" el proyecto al hacer el primer objetivo del Makefile correspondiente. Esto se encuentra al avanzar recursivamente hacia arriba desde el directorio del archivo actual.

Es un poco de configuración, pero no lo hará Debe reconstruir su directorio .metadata, como solía ser el caso con Eclipse anteriormente. Y una vez configurado, solo tienes que colocar los Makefiles adecuados y tienes tus proyectos.

(defun get-makefile-recursively-higher() 
    (loop for i below 100 for cwd = (expand-file-name default-directory) 
     then next for next = (expand-file-name (concat cwd "/..")) for file = 
     (concat cwd "/" "Makefile") do (cond ((and (file-exists-p file)) 
              (return file))) until (equal cwd next)) 
) 

Esto se utiliza, por ejemplo. por el látex y el modo de Python de la siguiente manera:

(defun py-execute-prog (&optional target) 
    "Invoke python on the file being edited in the current buffer using 
    arguments obtained from the minibuffer. It will save all of the modified 
    buffers before trying to execute the file." 
    (interactive) 
    (let* (makefile file cmd) 
    (setq makefile (get-makefile-recursively-higher)) 
    (setq file (buffer-file-name (current-buffer))) 
    (setq cmd (concat "make -f " makefile)) 
    (setq default-directory (file-name-directory makefile)) 

    (save-some-buffers (not py-ask-about-save) nil) 
    (setq py-pdbtrack-do-tracking-p t) 
    (if (get-buffer py-output-buffer) 
     (kill-buffer py-output-buffer)) ; Get rid of buffer if it exists. 
    (global-unset-key "\C-x\C-l") 
    (global-unset-key "\C-x\C-p") 
    (global-unset-key "\C-x\C-e") 
    (global-unset-key "\C-x\C-n") 
    (global-set-key "\C-x\C-l" 'py-last-exception) 
    (global-set-key "\C-x\C-p" 'py-previous-exception) 
    (global-set-key "\C-x\C-e" 'py-current-line-exception) 
    (global-set-key "\C-x\C-n" 'py-next-exception) 
    (define-key comint-mode-map [mouse-3] 'py-current-line-exception) 
    (make-comint "Python Output" "make" nil "-f" makefile) 
    (if (not (get-buffer py-output-buffer)) 
     (message "No output.") 
     (setq py-exception-buffer (current-buffer)) 
     (pop-to-buffer py-output-buffer) 
    ))) 


(defun make-tex (&optional target) 
    (interactive) 
    (let (makefile cmd) 
    (setq makefile (get-makefile-recursively-higher)) 
    (save-buffer) 
    (TeX-save-document (TeX-master-file)) 

    (setq cmd (concat "make -j4 -f " makefile " LATEXPARAM=\"-halt-on-error -file-line-error\"" 
         " TEXMASTER=" (expand-file-name (TeX-master-file)) ".tex" 
         " TEXMASTERDIR=" (file-name-directory makefile) "/")) 

    (when (stringp target) 
     (setq cmd (concat cmd " " target)) 
    ) 
    (ad-activate-regexp "auto-compile-yes-or-no-p-always-yes") 
    (compile cmd) 
    (ad-deactivate-regexp "auto-compile-yes-or-no-p-always-yes") 
    ) 
) 
2

Hay eproject, pero parece estar muy poco documentada.

4

Estoy trabajando en una solución a este problema. Siempre tuve un grupo de archivos que quería abrir/cerrar al mismo tiempo, además de hacer cosas como abrir una ventana de estado de mago, un búfer directo, etc. Empecé en mi propio modo de proyecto llamado metaproyecto. Está en las primeras etapas, pero es lo suficientemente funcional como para usarlo ahora para grupos de proyectos.

Échale un vistazo aquí: http://nafai77.github.com/metaproject/

¿Qué hay en Git es bastante estable, aunque escasamente documentados. Voy a empezar a trabajar en él nuevamente aquí pronto. Actualmente tengo los conceptos básicos de una pequeña arquitectura de plug-in, por lo que puede registrar acciones personalizadas que se pueden realizar en proyectos abiertos.

+0

Bueno, ¡la gente está trabajando en eso! Estoy acostumbrado a un editor de código comercial y muy nuevo en emacs, me gustaría tener una búsqueda limitada a archivos de proyecto, autocompletado, vista previa de prototipos de función dependiendo de lo que está debajo del cursor ... Estos ya existen Supongo, pero al limitarlos al contenido de un proyecto, no lo creo. – Gauthier

0

Puede usar marcadores de escritorio, marcadores Dired o marcadores de marcadores de favoritos para hacer lo que desee; consulte Bookmark+. Incluso puede encapsular código y múltiples marcadores en un solo marcador para obtener solo el estado y la configuración que desee.

Ver también: Iciclessupport for projects para más opciones.

Cuestiones relacionadas