.emacs, automake и cmake - PullRequest
       9

.emacs, automake и cmake

0 голосов
/ 06 сентября 2010

Давным-давно, когда я писал свои настройки .emacs [1], я использовал сценарий оболочки для компиляции и соединения всего этого. Эта вещь сейчас очень старая и «хрустящая», поэтому я сейчас переписываю ее, чтобы заменить такие вещи, как:

(defmacro make-new-comment( mode face strcom color1 color2)
   (list 'progn
         `(make-face ',face)     
         `(if (not (assoc ,strcom ,(intern (concat (symbol-name mode) "-comments-alist"))))
              (setf ,(intern (concat (symbol-name mode) "-comments-alist"))
              (append ,(intern (concat (symbol-name mode) "-comments-alist")) '((,strcom . ,face)))
              )
          )
        `(modify-face ',face ,color1 ,color2 nil t nil nil nil nil)
   )
)

и что-то произошло со мной. При компиляции я обращаюсь к нескольким переменным среды, дающим информацию о системе, например, [2], полное имя большинства программ, вызываемых каким-либо режимом, использующим comint [3]. Вместо того, чтобы читать переменные окружения, я мог бы использовать некоторый инструмент, подобный autoconf, чтобы настроить файлы .emacs и затем скомпилировать их.

Проблема в том, что autoconf просто ужасен. Я рассмотрел cmake, но документация очень плохая, особенно при создании вашей собственной системы сборки. Я не знаком с альтернативными системами.

Предложения

[1]: Для ясности под настройкой .emacs я имею в виду примерно 30 файлов и два подкаталога кода, которые у меня есть. Не говоря уже о нескольких пакетах, которые (на момент включения) не являются частью стандартного дистрибутива emacs.

[2] Я заменил, например, на «», так как, очевидно, многие люди не знают, что, например, означает, например. Либо так, либо они не знают, что такое пример.

[3] Такие как diff-mode и ruby-mode.

Ответы [ 3 ]

1 голос
/ 06 сентября 2010

Я согласен с jkerian: почему вы собираете .emacs из частей? Вот что я делаю: разбиваю по языкам или функциям и использую require и provide. Мой .emacs выглядит так:

; -*- emacs-lisp -*-
(add-to-list 'load-path "~/elisp/personal")

(require 'jdk-generic)
(require 'jdk-haskell)
(require 'jdk-keywiz)
(require 'jdk-lua)
(require 'jdk-ocaml)
(require 'jdk-org)
(require 'jdk-php)
(require 'jdk-tex)
(require 'jdk-text)
(require 'jdk-whitespace)

Каждый отдельный файл в ~/elisp/personal затем устанавливает поддержку языка или чего-либо еще, затем provide s jdk-whatever. Вот jdk-lua.el:

(add-to-list 'load-path "~/elisp/packages/lua-mode-20071122")
(add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)
(provide 'jdk-lua)

Обратите внимание, что я храню все пакеты elisp в ~ / elisp / packages. Это означает, что я могу скопировать каталог .emacs и ~ / elisp практически в любое место, и он сразу заработает.

1 голос
/ 06 сентября 2010

Насколько я понимаю, вы хотите, чтобы скрипт автоматически определял, где находятся ваши инструменты (например, diff, grep ...), вместо того, чтобы вручную указывать вашим .emacs, где они находятся, через переменные окружения.

Если вы работаете на Unix-подобной платформе, все ваши инструменты, такие как diff, grep, уже должны быть в вашем PATH, и у emacs не должно возникнуть проблем с их поиском. Таким образом, в вашем .emacs вы не должны использовать какую-либо переменную окружения и указывать непосредственно имя инструмента в вашей конфигурации.

Если ваша цель - создать переносимый файл .emacs, который мог бы быть выполнен, например, в Windows, то вам следует также поместить все инструменты gnuwin32 в вашу переменную PATH, чтобы Emacs мог найти их без проблем. Но для Windows вам придется сделать много других крошечных компоновок, чтобы команды emacs работали должным образом, как в системе Unix.

Использование такого инструмента, как autoconf, требует очень много времени для чего-то, что может быть легко обработано путем настройки одного файла .emacs. Если у вас есть конкретные действия для конкретной системы, вы можете написать код elisp, например:

(if (eq window-system 'w32)
    (progn ... ))

Кроме того, если вы хотите автоматизировать байтовую компиляцию всех ваших файлов .el, вы можете использовать такую ​​команду в своей оболочке:

emacs --batch -f batch-byte-compile *.el
1 голос
/ 06 сентября 2010

which diff * * 1002

Более подробная информация будет полезна здесь. Эти переменные окружения вы сами задали? или вещи предоставленные вашим дистрибутивом?

По иронии судьбы, это звучит подозрительно, как будто вы ищете невероятно мощный встроенный скрипт emacs.

...