.emacs, automake и cmake

Давным-давно, когда я писал свою установку .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 и режим ruby.


person HandyGandy    schedule 05.09.2010    source источник
comment
Почему вы не можете просто изменить настройки PATH, чтобы найти общие программы, такие как diff ?   -  person Dirk Eddelbuettel    schedule 06.09.2010
comment
Почему вам нужно установить некоторые переменные среды, чтобы найти такие инструменты, как diff или grep, которые обычно уже должны быть в вашем PATH?   -  person Jérôme Radix    schedule 06.09.2010
comment
Почему вы полностью изменили этот вопрос. Пожалуйста, начните новый вопрос и верните этот. Спасибо.   -  person ocodo    schedule 07.09.2010
comment
Когда emacs запускается через графический интерфейс, например, из меню «Пуск» или из Windows «Открыть с помощью...» или аналогично в другом графическом интерфейсе, $PATH обычно не устанавливается должным образом. Одно можно сказать наверняка, он не читает мои установочные файлы zsh.   -  person HandyGandy    schedule 07.09.2010


Ответы (3)


which diff?

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

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

person jkerian    schedule 05.09.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 затем настраивает поддержку языка или чего-то еще, затем provides 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 куда угодно, и они сразу же заработают.

person Jack Kelly    schedule 06.09.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
person Jérôme Radix    schedule 06.09.2010