83 votes

Emacs - Erreur lors de l'appel (serveur de démarrage)

Je suis actuellement en utilisant GNU Emacs 23.0.93.1 dans Windows Vista SP1. Dans mon .emacs fichier je fais un appel à l' (server-start) et qui est à l'origine d'une erreur avec le message Le répertoire ~/.emacs.d/serveur est dangereux. Quelqu'un a vu cela et savoir un correctif ou une solution de contournement? ... autre que de laisser le serveur hors tension ;)

Voici la trace de la pile:

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)

151voto

RealityMonster Points 1022

J'ai trouvé cette solution sur EmacsWiki:

"Le problème est la propriété du répertoire ~/.emacs.d/serveur lorsque vous avez également des "Administrateurs" les droits sur votre compte. Créer le répertoire ~/.emacs.d/serveur et définissez le propriétaire de ce répertoire à votre nom de connexion et le problème a disparu. Comme j'ai un "hollandais" de la version de Windows 7 je ne sais pas les termes anglais exactement, mais voici la procédure:

Cliquez sur la R de la souris sur ~/.emacs.d/serveur et sélectionnez "Propriétés" (dernier item dans le menu). À partir des Propriétés, sélectionnez l'Onglet "Sécurité" puis cliquez sur le bouton "Avancé". Puis sélectionnez l'Onglet "Propriétaire" et de changer le propriétaire de "les Administrateurs (\Administrateurs)" en " (\". Maintenant que le serveur de code d'accepter ce répertoire sécurisé car vous êtes le propriétaire.

Espérons que cette aide pour vous tous les gars, il a résolu le problème pour moi en tout cas.

W. K. R. Reutefleut"

Cela fonctionne bien sur Vista, avec Emacs 23.2.1.

31voto

gavenkoa Points 6974

J'aime à anwer de larsreed, mais complite code prêt à l'emploi:

(besoin d'un serveur)
(si (et (>= emacs-major-version 23)
 (l'égalité de fenêtre-système " w32))
 (defun serveur-assurer-coffre-fort-dir (dir), "Noop" t)) ; Supprimer erreur "répertoire
 ; ~/.emacs.d/serveur est dangereux pour la santé"
 ; sur windows.
(server-start)

Je discass cette question dans mon article de blog http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

Notez également que dans 2009-09-19 fixe le bogue n ° 4197 sur serveur-assurer-coffre-fort-dir donc, en entrant Emacs 23.2 cette solution de contournement n'est pas nécessaire.

En vertu de l'récemment publié Emacs 23.2 j'ai cet avertissement:

Avertissement (serveur): à l'Aide d' ~/.emacs.d/server pour stocker Emacs-l'authentification du serveur de fichiers. Répertoires des systèmes de fichiers FAT32 ne sont PAS protégés contre la falsification. Voir la variable server-auth-dir pour plus de détails.

Pour résoudre ce que disent d'avertissement vous pouvez serveur de point-auth-dir sur une partition NTFS (%APPDATA% généralement situé Windows %SYSTEMDRIVE% d'utilisateur et généralement, système de format du disque en NTFS partition):

(besoin d'un serveur)
(si (et (eq fenêtre-système " w32) (fichier-existe-p (getenv "APPDATA")))
 (setq serveur auth-dir (concat (getenv "APPDATA") "/.emacs.d/serveur"))
 (faire-serveur d'annuaire-auth-dir) )
(server-start)

14voto

brlcad Points 657

C'est un Emacs bug sur Windows. Une solution de contournement consiste à commenter cette ligne serveur-assurer-coffre-fort-dir dans le serveur.el la vous aurez envie de byte recompiler après le changement:

;; FIXME: Busted on Windows. 
;; (eql (nth 2 attrs) (user-uid))

11voto

lre Points 71

Pour éviter le piratage dans le lisp répertoire, vous pouvez simplement ajouter la ligne suivante à votre .emacs:

(require 'server) (and (>= emacs-major-version 23) (defun server-ensure-safe-dir (dir) "Noop" t))

7voto

Andreas Spindler Points 1612

En outre, vous ne voulez pas que le serveur doit être démarré en mode batch. Dans mon .emacs j'ai donc utiliser

(defconst --batch-mode 
  (or noninteractive (member "--batch-mode" command-line-args))
  "True when running in batch-mode (--batch-mode command-line switch set).")

et puis

(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))

Encore la fonctionnalité de serveur est capricieux: server-start déclenche lorsque l' %HOME%/.emacs.d/serveur de répertoire n'existe pas. Dans la succession Emacs de ne pas démarrer de nouveau! La solution évidente est de créer le répertoire manquant et essayez à nouveau; j'ai trouvé la solution quelque part sur le net, mais on ne peut vraiment pas se rappeler où. Le code suivant s'exécute avec succès depuis des années sur plusieurs de mes machines 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))))
    )
  )

Ce code fonctionne aussi lors de l'exécution d'Emacs à partir d'un bâton.

Espérons que cette aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X