Переход на GNU Emacs 23.1 в Windows.
Переход с версий 22.x на недавно вышедший релиз GNU Emacs 23.1 прошел гладко за исколючением двух моментов.
Первое с чем пришлось столкнутся это сообщение об ошибке при выполнении функции (server-start)
:
error: The directory e:/home/.emacs.d/server is unsafe
Проблема расположена в функции server-ensure-safe-dir
:
(unless (and (eq t (car attrs)) (eql (nth 2 attrs) (user-uid))
(or (eq system-type 'windows-nt)
(zerop (logand ?\077 (file-modes dir)))))
(error "The directory %s is unsafe" dir))))
На stackoverflow.com описано решение проблемы. Cледует удалить выделенный участок кода и обновить байткод (Emacs сначала ищет .elc файла и только затем .el, редактируем файл emacs-23.1/lisp/server.el
, C-x byte-compile-file <Down> <Ret>).
Вторая проблема состояла в том что функция codepage-setup
устарела и ее определение исключили из дистрибутива. Теперь нет необходимости предварительно перед использованием кодовой страницы IBM cpXXX ее создавать! Для совместимости со
старыми версиями Emacs воспользуйтесь следующим кодом:
(when (<= emacs-major-version 22)
(codepage-setup 866)
(codepage-setup 1251)
)
Новость о релизе GNU Emacs 23.1: groups.google.com
Update: 2010-03-17.
2009-09-19 был исправлен баг #4197 касающийся server-ensure-safe-dir
. Из ChangeLog:
This fixes bug#4197 (merged to bug#865, though not identical).
* server.el (server-auth-dir): Add docstring note about FAT32.
(server-ensure-safe-dir): Accept FAT32 directories as "safe",
but warn against using them.
Также я нашел другой способ обойти эту проблему:
(require 'server)
(when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32))
(defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error directory ~/.emacs.d/server is unsafe on windows.
(server-start)