В настоящее время я использую GNU Emacs 23.0.93.1 в Windows Vista SP1. В моем файле .emacs я вызываю, (server-start)
и это вызывает ошибку с сообщением . Каталог ~ / .emacs.d / server is unsafe . Кто-нибудь видел это и знает исправление или обходной путь? ... кроме как оставить сервер выключенным;)
Вот трассировка стека:
Debugger entered--Lisp error: (error "The directory ~/.emacs.d/server is unsafe")
signal(error ("The directory ~/.emacs.d/server is unsafe"))
error("The directory %s is unsafe" "~/.emacs.d/server")
server-ensure-safe-dir("~\\.emacs.d\\server\\")
server-start(nil)
call-interactively(server-start t nil)
execute-extended-command(nil)
call-interactively(execute-extended-command nil nil)
svn
клиент установил ~ / .emacs.d / server на 0755 в соответствии с моей маской umask. Вместо того, чтобы заключатьsvn
в оболочку сценарий, который лишает меня смысла иметь все, что мне нужно для настройки Emacs в Subversion, я просто заставляю Emacs принудительно выдавать правильные разрешения при запуске, добавляя следующее~/.emacs.d/init.el
:(set-file-modes (expand-file-name "~/.emacs.d/server") #o700)
Ответы:
Я нашел это решение в EmacsWiki:
"Проблема заключается в том, что вы владеете каталогом ~ / .emacs.d / server, когда у вас также есть права администратора в вашей учетной записи. Создайте каталог ~ / .emacs.d / server и установите владельцем этого каталога ваш логин. имя, и проблема исчезла. Поскольку у меня «голландская» версия Windows 7, я не знаю точно английских терминов, но вот процедура:
Щелкните правой кнопкой мыши на ~ / .emacs.d / server и выберите «Свойства» (последний пункт в меню). В разделе «Свойства» выберите вкладку «Безопасность», а затем нажмите кнопку «Дополнительно». Затем выберите вкладку «Владелец» и измените владельца с
Administrators (<your-pc-name>\Administrators)
на<your-login-name> (<your-pc-name>\<your-login-name>
. Теперь код сервера примет этот каталог как безопасный, потому что вы являетесь его владельцем.Надеюсь, это поможет всем вам, ребята, это все равно решило проблему для меня.
WKR Reutefleut "
Он определенно работает в Vista с Emacs 23.2.1.
источник
Мне нравится отвечать на larsreed, но код готов к использованию:
Я сообщаю об этой проблеме в своей статье в блоге http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html
Также обратите внимание, что в 2009-09-19 исправлена ошибка # 4197, связанная с server-sure-safe-dir, поэтому во входящем Emacs 23.2 это обходное решение не требуется.
В недавно выпущенном Emacs 23.2 у меня есть такое предупреждение:
Предупреждение (сервер): Используется
~/.emacs.d/server
для хранения файлов аутентификации Emacs-сервера. Каталоги в файловых системах FAT32 НЕ защищены от взлома. Подробнее см. Переменнуюserver-auth-dir
.Чтобы исправить это, как, например, предупреждение, вы можете указать server-auth-dir на раздел NTFS (
%APPDATA%
обычно находится в Windows,%SYSTEMDRIVE%
и пользователь обычно форматирует системный диск как раздел NTFS):источник
(>= emacs-major-version 23)
. Спасибо +1Это известная ошибка Emacs в Windows. Обходной путь - закомментировать эту строку в server-sure-safe-dir в server.el, чтобы вы захотели перекомпилировать байты после изменения:
;; FIXME: Busted on Windows. ;; (eql (nth 2 attrs) (user-uid))
источник
Чтобы избежать взлома каталога lisp, вы можете просто добавить следующее в свой .emacs:
(require 'server) (and (>= emacs-major-version 23) (defun server-ensure-safe-dir (dir) "Noop" t))
источник
(require 'server)
над кодомКроме того, вы не хотите, чтобы сервер запускался в пакетном режиме. Поэтому в моем .emacs я использую
(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)) "True when running in batch-mode (--batch-mode command-line switch set).")
а потом
(unless --batch-mode (require 'server) (when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32)) ;; Suppress error "directory ~/.emacs.d/server is unsafe" on Windows. (defun server-ensure-safe-dir (dir) "Noop" t)) (server-start))
Тем не менее, функция сервера капризна:
server-start
выдает, когда каталог % HOME% /. Emacs.d / server не существует. Последовательно Emacs больше не запускается! Очевидное решение - создать отсутствующий каталог и повторить попытку; Я нашел решение где-то в сети, но действительно не могу вспомнить, где. Следующий код уже много лет успешно работает на нескольких моих машинах с Windows:(unless --batch-mode (require 'server) (when (and (= emacs-major-version 23) (= emacs-minor-version 1) (equal window-system 'w32)) ;; Suppress error "directory ~/.emacs.d/server is unsafe" on Windows. (defun server-ensure-safe-dir (dir) "Noop" t)) (condition-case nil (server-start) (error (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))) (when (and server-use-tcp (not (file-accessible-directory-p server-dir))) (display-warning 'server (format "Creating %S" server-dir) :warning) (make-directory server-dir t) (server-start)))) ) )
Этот код также работает при запуске Emacs с флешки.
Надеюсь это поможет.
источник
(if (not noninteractive) (progn (require 'server) (server-start)))
--batch-mode
как(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)))
. Исправил выше.У меня не работало в Windows 7.
Вместо этого я прочитал комментарии в server-sure-safe-dir и взял на себя право собственности на% APPDATA% forlder и подпапки. Они принадлежали местным администраторам, а не мне.
Это помогло!
источник
Очень полезный ответ от гавенкоа. У меня проблема с Emacs 24.1, Windows 2003.
К сожалению, замена server-sure-safe-dir на noop, как было предложено в вашем первом фрагменте, не работала для меня во всех ситуациях. В частности, он не работал, если его применяли до того, как (запуск сервера) был выполнен хотя бы один раз, потому что первоначальное выполнение также создало бы каталог , если он не существует. В версии noop каталог вообще не создавался.
Обходной путь, который сработал для меня в том смысле, что он устранил сообщение об ошибке, все еще создавая каталог правильно, был следующий код, помещенный перед (server-start) в моем файле инициализации Emacs. Он дает совет относительно server-sure-safe-dir игнорировать любые ошибки, возникшие оттуда. Не решает первопричину проблемы, но для меня достаточно.
(defadvice server-ensure-safe-dir (around my-around-server-ensure-safe-dir activate) "Ignores any errors raised from server-ensure-safe-dir" (ignore-errors ad-do-it))
источник
Для меня работает следующий шаг: 1. Выполните приведенный ниже код как файл .reg. Win-версия Emacs будет обрабатывать любые значения в реестре как Env Var.
[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs] "HOME"="C:/<your_emacs_home>" "EMACS_SERVER_FILE"="C:/<your_emacs_home>/server/main_server" "ALTERNATE_EDITOR"="C:/<your_emacs_loc>/bin/runemacs.exe"
(require 'server) (setq server-auth-dir "~/server") ;;Server file location (setq server-name "main_server") ;;Server mutex file name (server-start)
По шагам выше серверный режим у меня работает правильно и идеально.
источник
В случае, если это иногда случается с людьми, моя рабочая станция только что прошла «миграцию домена», которая добавила еще одно разрешение для каждого файла на коробке, а затем я начал получать эту ошибку. После того, как я добавил выражение для фиктивного вывода "server-sure-safe-dir", это перестало работать.
(Если вам интересно, миграция будет происходить в 2-3 шага. Первый добавляет мне разрешение в целевом домене, затем я перемещаюсь в целевой домен, затем они могут (я не уверен в этом ) удалите разрешение для старого домена. Это большая компания и много пользователей, поэтому они делают это отдельными шагами.)
источник
В прошлый раз, когда я попробовал, расширение оболочки "Взять на себя ответственность" сделало свою работу
источник
Если RealityMonster обнаружил проблему владения папкой сервера, вы можете запустить ее в командной строке Windows, чтобы исправить это:
источник