Есть ли способ создать «файл проекта» в Emacs? - PullRequest
7 голосов
/ 27 июня 2009

Я говорю «файл проекта» в самом широком смысле. У меня есть несколько проектов на Python, над которыми я работаю с Romamacs, используя emacs W32 для Windows. Что было бы идеально, если бы у меня была иконка, на которой я мог бы щелкнуть на рабочем столе, чтобы открыть emacs, открыть проект веревки и установить полосу скорости в каталоге верхнего уровня этого проекта. Тогда я мог бы также иметь возможность открыть следующий проект в своем собственном emacs, настроенном таким же образом (но для этого проекта). Конечно, также приемлемо, если бы была команда emacs или команда оболочки, которую я мог бы использовать для достижения того же эффекта вместо значка на рабочем столе.

Есть ли способ сделать это? У меня нет абсолютно никакого elisp-фу. : - (

Ответы [ 7 ]

6 голосов
/ 28 июня 2009

Вы можете настроить все так, как вам нужно для проекта, а затем использовать ответ, который я опубликовал об использовании desktop.el и именованных сессий:

Какие альтернативные менеджеры сеансов доступны для Emacs?

4 голосов
/ 29 июня 2009

Я на самом деле работаю над решением этой самой проблемы. У меня всегда была группа файлов, которые я хотел открывать / закрывать одновременно, а также делать такие вещи, как открытие окна состояния magit, буфер с задержкой и т. Д. Я запустил свой собственный режим проекта, называемый метапроектом. Он находится на очень ранних стадиях, но достаточно функционален, и теперь я использую его для проектных групп.

Проверьте это здесь: http://nafai77.github.com/metaproject/

То, что есть в git, довольно стабильно, хотя и редко документировано. Я собираюсь начать работать над этим снова здесь скоро. В настоящее время у меня есть основы небольшой архитектуры плагинов, так что вы можете регистрировать пользовательские действия, которые можно выполнять в открытом проекте.

2 голосов
/ 28 июня 2009

Существует eproject , но, похоже, это очень редко документировано.

2 голосов
/ 27 июня 2009

Я использую следующее «решение» для себя: Корень проекта определяется каталогом, который содержит Makefile. Я связал F12 с функцией elisp, зависящей от режима, которая «компилирует» проект, делая первую цель соответствующего Makefile. Это обнаруживается при рекурсивном переходе вверх из каталога текущего файла.

Это небольшая настройка, но вам никогда не придется восстанавливать каталог .metadata, как это часто бывало в Eclipse. И после того, как вы настроите компьютер, вам нужно просто разместить нужные файлы Makefile, и у вас есть свои проекты.

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

Затем используется, например, в режиме LaTeX и Python:

(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")
    )
  ) 
1 голос
/ 21 января 2010

См. http://www.emacswiki.org/emacs/CategoryProgrammerUtils#ProjectSupport. Есть несколько пакетов, которые управляют "проектами". Я предпочитаю mk-project, но опять же я это написал. ; -)

1 голос
/ 27 июня 2009

Вы можете свернуть свои собственные в bash / cmd.exe. В дистрибутив Windows Emacs входит файл .bat с именем runemacs.bat, который принимает файлы для открытия в качестве аргументов. Напишите небольшой скрипт, и он сможет открывать все с одной иконки.

0 голосов
/ 05 сентября 2011

Вы можете использовать закладки рабочего стола, закладки Dired или закладки из списка закладок, чтобы делать то, что вы хотите - см. Закладка + . Вы даже можете инкапсулировать код и несколько закладок в одну закладку, чтобы получить только нужное состояние и настройки.

См. Также: Сосульки поддержка проектов для дополнительных параметров.

...