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")
)
)
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