2009-06-27 10 views
7

Dico "file di progetto" nel senso più sciolto. Ho alcuni progetti Python su cui lavoro con ropemacs usando emacs W32 per Windows. Quale sarebbe l'ideale se potessi avere un'icona che potrei cliccare sul mio desktop per aprire emacs, aprire il progetto di corda e impostare la speed bar nella directory di livello superiore di quel progetto. Quindi potrei anche avere un modo per aprire il prossimo progetto nei suoi emacs impostati nello stesso modo (ma per quel progetto). Ovviamente, è accettabile anche se ci fosse un comando emacs o un comando shell che potrei usare per ottenere lo stesso effetto invece di un'icona sul mio desktop.Esiste un modo per creare un "file di progetto" in Emacs?

C'è un modo per farlo? Non ho assolutamente elisp-fu. :-(

risposta

1

Puoi eseguire il rollover in bash/cmd.exe La distribuzione di windows emacs viene fornita con un file .bat chiamato runemacs.bat che accetta i file da aprire come argomenti Scrive un piccolo script e dovrebbe essere in grado per aprire tutto da un'icona

2

Io uso la seguente "soluzione" per me stesso: una radice di progetto è definita da una directory che contiene un Makefile. Ho associato F12 alla funzione di elisp specifica della modalità che "compila" il progetto creando il primo target del corrispondente Makefile, che si trova ricorsivamente andando verso l'alto dalla directory del file corrente.

È un po 'di configurazione, ma si nevica Devo ricostruire la tua directory come succedeva spesso con Eclipse. E una volta impostato, devi solo posizionare i Makefile appropriati e avere i tuoi progetti.

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

Viene quindi utilizzato per es. dal LaTeX e modalità di Python come segue:

(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

C'è eproject, ma sembra molto scarsamente documentato.

4

Attualmente sto lavorando a una soluzione a questo problema. Ho sempre avuto un gruppo di file che volevo aprire/chiudere allo stesso tempo, oltre a fare cose come aprire una finestra di stato magit, un buffer diretto, ecc. Ho iniziato sulla mia modalità di progetto chiamata metaproject. È nelle primissime fasi, ma è abbastanza funzionale che lo sto usando ora per i gruppi di progetto.

verificarlo qui: http://nafai77.github.com/metaproject/

Cosa c'è nella Git è abbastanza stabile, anche se scarsamente documentata. Ho intenzione di iniziare a lavorarci di nuovo qui presto. Attualmente ho le basi per una piccola architettura plug-in, quindi puoi registrare azioni personalizzate che possono essere eseguite su progetto aperto.

+0

Bene che le persone ci stanno lavorando! Sono abituato a un editor di codice commerciale e molto nuovo a emacs, mi piacerebbe avere una ricerca limitata a file di progetto, completamento automatico, anteprima di prototipi di funzioni a seconda di cosa è sotto il cursore ... Esistono già io Immagino, ma averli limitati al contenuto di un progetto non la penso così. – Gauthier

0

È possibile utilizzare segnalibri Desktop, segnalibri Dirati o segnalibri di segnalibri per fare ciò che si desidera: vedere Bookmark+. Puoi anche incapsulare il codice e più segnalibri in un singolo segnalibro per ottenere solo lo stato e l'impostazione che desideri.

Vedere anche: Iciclessupport for projects per ulteriori opzioni.

Problemi correlati