2009-08-20

Переход на 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)