[devel] Re: [mdk-re] /etc/emacs/site-start.d

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_mivlgu=2Emurom=2Eru?=
Сб Май 5 17:16:47 MSD 2001


On Sat, 5 May 2001 14:43:59 +0400
Sergey Vlasov <vsu на mivlgu.murom.ru> wrote:

> On Sat, 5 May 2001 14:07:38 +0400 (MSD)
> Ivan Zakharyaschev <vanyaz на mccme.ru> wrote:
> 
> > On Sat, 5 May 2001, Sergey Vlasov wrote:
> > 
> > > On Sat, 5 May 2001 00:39:29 +0400 (MSD)
> > > Ivan Zakharyaschev <vanyaz на mccme.ru> wrote:
> > >
> > > > Я отчасти поддерживаю идею об использовании
> /etc/emacs/site-start.d
> > > --
> > > > по
> > > > аналогии с, например, /etc/profile.d; сравнение с старт-стоп
> > > скриптами
> > > > не
> > > > очень подхолит, так как они настраивают сервер, а profile задает
> > > > конфигурацию для отдельного пользователя.
> > > >
> > > > Удобство такой директории понятно: не нужно лезть в один файл,
> чтобы
> > > > что-то добавить, достаточно просто положить в директорию.
> > > >
> > > > Но есть, по-моему, и большие неудобства. Они связаны как раз с
> > > разницей
> > > > между initscripts и profile: раз это конфигурация для
> пользователя,
> > > то
> > > > неплохо бы каждому отдельному пользователю иметь контроль над тем,
> > > что у
> > > > него будет грузиться, а что нет. А тут получается, как
> администратор
> > > > скажет, так всем и жить.
> > 
> > > > Можно попробовать решить эту проблему, создав структуру
> директорий,
> > > > похожую на ту, что есть в initscripts: есть
> > /etc/emacs/site-start.d/,
> > > > где
> > > > лежат скрипты, но не выполняются, и у каждого есть
> > > > ~/.emacs/site-start.d/,
> > > > куда кладутся ссылки на реальные скрипты из
> /etc/emacs/site-start.d/
> > > > (можно будет их включать/выключать у разных пользователей, как и
> > > сервисы
> > > > в разных runlevels). Не слишком ли это громоздко?
> > >
> > > Не получится, ~/.emacs уже занят. :-)
> > >
> > > Ладно, имя придумать можно, но опять же после установки пакета в
> этот
> > > каталог автоматически ничего не попадет, и опять у начинающих
> > > пользователей возникнут вопросы - "а вот я тут поставил XXX, а его
> не
> > > видно". А вариант с помещением команд загрузки в /etc/skel*/.emacs,
> > > чтобы
> > > они попадали в ~/.emacs каждому новому пользователю, не лучше? Кому
> не
> > > нравится автозагрузка - может удалить их и загружать частями только
> > то,
> > > что ему нужно.
> > 
> > skel-то этим и неудобен: он одноразового использования и изменения
> > отразяться только на вновь создаваемых пользователях.
> > 
> > Чтобы у всех сразу заработало то, что ставится новое, можно сделать
> так,
> > чтобы изначально у только что созданного пользователя этот
> > ~/.emacs-user-start.d был просто ссылкой на /etc/emacs/site-start.d/
> > (или
> > какое-нибудь другое место, в котором лежат все возможные скрипты
> > автозагрузки для Emacs -- название site-start.d тут не очень
> подходит).
> > И
> > тогда такой пользователь будет получать все новое, совершая минимум
> > усилий
> > головой и пальцами: у него будет грузиться все.
> > 
> > Если же он задумается об этом и захочет сам определить набор того, что
> > будет авто-загружаться у него, то он сможет убрать ссылку
> > /.emacs-user-start.d, и завести на ее месте свою директорию, внутри
> > которой будут свои скрипты и ссылки на отдельные скрипты из общей
> > /etc/emacs/site-start.d/. Перед таким пользователем проблемы в том,
> что
> > что-то у него не запускается, хотя это и установлено, стоять не
> должно:
> > он
> > сам на себя взял ответственность за слежение за этим. Для облегчения
> его
> > работы можно сделать специальный скрипт наподобие chkconfig.
> > 
> > Может, это и слишком громоздко, но большинство пользователей будет
> > избавлено от соприкосновения с этим ссылкой на общую
> > /etc/emacs/site-start.d/. Ее-то и надо положить в /etc/skel*.
> > 
> > Кажется, что никаких преимуществ такой конструкции по сравнению с
> > использованием просто ~/.emacs нет. Но они все-таки есть: все
> > существующие
> > пользователи при раскладе по умолчанию будут получать автозагружаемыми
> > новые, установленные после появления этих пользователей компоненты
> > Emacs.
> 
> Я предлагал добавить в /etc/skel*/.emacs следующее:
> 
> (mapcar 'load-file (directory-files "/etc/emacs/site-start.d" t
> "\\.el$"))
> 
> При этом будет тот же эффект: пользователи будут получать компоненты,
> установленные после появления этих пользователей - в соответствии с
> содержимым /etc/emacs/site-start.d. Правда, судя по названию каталога,
> прописывать такую команду предполагалось все-таки в общесистемный
> /usr/share/emacs/site-lisp/site-start.el, но в этом случае у
> пользователя
> нет простого способа отменить загрузку этих файлов.

Вот еще один вариант реализации. В /usr/share/emacs/site-lisp кладем файл
package-autoload.el:

;;; package-autoload.el --- run package autoload files

;; Copyright (C) 2001 by Free Software Foundation, Inc.

;; Author: Sergey Vlasov <vsu на altlinux.ru>
;; Keywords: extensions

;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;; This file loads .el files from /etc/emacs/site-start.d.  Files in
;; this directory are supposed to be autoload files for Emacs add-on
;; packages.

;;; Code:

(mapcar 'load-file 
	(directory-files "/etc/emacs/site-start.d" t "\\.el$"))

(provide 'package-autoload)

;;; package-autoload.el ends here

В этом же каталоге в файле default.el пишем:

(require 'package-autoload)

В /etc/skel*/.emacs в начало добавляем:

(require 'package-autoload nil t)

В результате получаем следующее:

1. У новых пользователей с ~/.emacs из нового etcskel в начале обработки
~/.emacs загрузятся все файлы автозагрузки из /etc/emacs/site-start.d. При
этом require в default.el молча проигнорируется.

2. У пользователей со старым ~/.emacs файлы автозагрузки будут грузиться
из default.el, т.е. после обработки ~/.emacs. Из-за этого в ~/.emacs
нельзя будет настраивать эти пакеты, если не добавить предварительно
строку (require 'package-autoload). Если дополнительно не настраивать, все
будет работать и так.

3. Пользователи, которым по каким-то причинам не нравится автозагрузка
файлов из /etc/emacs/site-start.d, могут выбросить из ~/.emacs
соответствующую команду и отменить загрузку default.el, установив
inhibit-default-init.

4. Наконец, если в системе установлен новый пакет etcskel, но старый
emacs, в котором нет файла package-autoload.el, проблем при запуске Emacs
тоже не возникнет (за исключением незагрузки файлов из
/etc/emacs/site-start.d), поскольку (require 'package-autoload nil t)
игнорирует отсутствие запрошенного файла.

Ваши замечания?
_______________________________________________
Devel mailing list
Devel на linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel



Подробная информация о списке рассылки Devel