it-swarm.com.de

Emacs - Fehler beim Aufruf (Server-Start)

Derzeit verwende ich GNU Emacs 23.0.93.1 in Windows Vista SP1. In meiner .emacs-Datei rufe ich (server-start) an und dies verursacht einen Fehler in der Nachricht Das Verzeichnis ~/.emacs.d/server ist unsicher . Hat jemand das gesehen und weiß ein Fix oder Workaround? ... außer Server ausgeschaltet zu lassen;) 

Hier ist der Stack-Trace:

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

Ich habe diese Lösung auf EmacsWiki gefunden:

"Das Problem ist der Besitz des Verzeichnisses ~/.emacs.d/server, wenn Sie auch über Administratorrechte für Ihr Konto verfügen. Erstellen Sie das Verzeichnis ~/.emacs.d/server und setzen Sie den Eigentümer dieses Verzeichnisses auf Ihr Login Name und das Problem ist weg. Da ich eine niederländische Version von Windows 7 habe, kenne ich die englischen Begriffe nicht genau, aber hier ist die Vorgehensweise:

Klicken Sie mit der rechten Maustaste auf ~/.emacs.d/server und wählen Sie "Eigenschaften" (letzter Menüpunkt). Wählen Sie in den Eigenschaften den Tab "Sicherheit" und dann die Schaltfläche "Erweitert". Wählen Sie dann den Tab "Owner" und ändern Sie den Besitzer von Administrators (<your-pc-name>\Administrators) in <your-login-name> (<your-pc-name>\<your-login-name>. Jetzt akzeptiert der Servercode dieses Verzeichnis als sicher, da Sie der Besitzer sind.

Ich hoffe, das hilft allen, euch hat es trotzdem gelöst.

W.K.R. Reutefleut "

Es funktioniert definitiv unter Vista mit Emacs 23.2.1.

144
RealityMonster

Ich genieße es, eine Antwort auf Larsreed zu geben, aber den gebrauchsfertigen Code zu vervollständigen:

 (erfordert 'Server) 
 (wann (und (> = emacs-major-version 23) 
 (gleiches Fenstersystem' w32)) 
 (Definieren Sie server-sure-safe-dir ( dir) "Noop" t)); Unterdrücken Sie Fehler "Verzeichnis 
; ~/.Emacs.d/Server ist unsicher" 
 ; unter Windows .
 (Server-Start) 

Ich kassiere dieses Problem in meinem Blogartikel http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

Beachten Sie auch, dass in 2009-09-19 der Fehler # 4197 über server-sure-safe-dir behoben wurde. In eingehenden Emacs 23.2 ist diese Problemumgehung nicht erforderlich.

Unter dem kürzlich veröffentlichten Emacs 23.2 habe ich folgende Warnung:

Warnung (Server): Verwenden von ~/.emacs.d/server zum Speichern von Emacs-Server-Authentifizierungsdateien . Verzeichnisse in FAT32-Dateisystemen sind NICHT gegen Manipulationen gesichert . Weitere Informationen finden Sie in der Variablen server-auth-dir.

Um dies als Warnung zu beheben, können Sie das Server-Auth-Verzeichnis auf die NTFS-Partition verweisen (%APPDATA% befindet sich normalerweise unter Windows %SYSTEMDRIVE% und der Benutzer formatiert das Systemlaufwerk normalerweise als NTFS-Partition):

 (erfordern 'Server) 
 (wann (und (eq window-system' w32) (file-exists-p (getenv "APPDATA"))).). (setq server-auth-dir (concat ( getenv "APPDATA") "/.emacs.d/server"))
 (Make-Verzeichnis Server-Auth-Verzeichnis)) 
 (Server-Start) 
28
gavenkoa

Dies ist ein bekannter Emacs-Fehler unter Windows. Um dieses Problem zu umgehen, können Sie diese Zeile in Server-sure-safe-dir in server.el auskommentieren.

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

Um das Hacken im LISP-Verzeichnis zu vermeiden, können Sie Ihrem .emacs Folgendes hinzufügen

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

10
lre

Außerdem soll der Server nicht im Batch-Modus gestartet werden. __ In meinen .emacs benutze ich deshalb

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

und dann

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

Das Serverfeature ist immer noch unberechenbar: server-start wird ausgelöst, wenn das Verzeichnis% HOME% /. Emacs.d/server nicht existiert. Nacheinander startet Emacs nicht mehr! Die naheliegende Lösung besteht darin, das fehlende Verzeichnis zu erstellen und es erneut zu versuchen. Ich habe die Lösung irgendwo im Netz gefunden, kann mich aber wirklich nicht erinnern, wo. Der folgende Code wird seit Jahren auf mehreren meiner Windows-Maschinen erfolgreich ausgeführt:

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

Dieser Code funktioniert auch, wenn Emacs von einem Stick ausgeführt wird.

Hoffe das hilft.

7

Funktionierte bei mir nicht in Windows 7.

Ich habe stattdessen die Kommentare in server-sure-safe-dir gelesen und bin mit dem Besitz von% APPDATA% für Ordner und Unterordner gegangen. Sie gehörten lokalen Administratoren, nicht mir.

Das hat geholfen

6
KTa

Sehr hilfreiche Antwort von Gavenkoa. Ich habe dieses Problem unter Emacs 24.1, Windows 2003.

Leider hat das Überschreiben von server-sure-safe-dir zum Noop, wie in Ihrem ersten Snippet vorgeschlagen, für mich in allen Situationen nicht funktioniert. Konkret funktionierte es nicht, wenn es zuvor angewendet wurde (Server-Start) wurde mindestens einmal ausgeführt, da die anfängliche Ausführung auch das Verzeichnis erstellen würde , falls es nicht existiert. Bei der noop-Version würde das Verzeichnis überhaupt nicht erstellt.

Die Problemumgehung, die für mich in dem Sinne funktionierte, dass die Fehlermeldung beseitigt wurde, während das Verzeichnis immer noch ordnungsgemäß erstellt wurde, war der folgende Code (Server-Start) in meiner Emacs-Initialisierungsdatei. Es gibt einen Hinweis in Bezug auf server-sure-safe-dir, um die von dort aufgetretenen Fehler zu ignorieren. Behebt nicht die Ursache des Problems, aber gut genug für mich.

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

Der folgende Schritt funktioniert für mich: 1. Führen Sie den folgenden Code als .reg-Datei aus. Die Emacs-Win-Version behandelt alle Werte in der Registrierung als 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"
  1. Fügen Sie den folgenden Code zu Ihrem .emacs/init.el hinzu. Der Schlüssel hier sollte "server-auth-dir" sein.
(require 'server)
(setq server-auth-dir "~/server")  ;;Server file location
(setq server-name "main_server")   ;;Server mutex file name
(server-start)

Durch Schritte oberhalb des Server-Modus funktioniert das für mich korrekt und perfekt.

1
Jesse Peng

Falls dies gelegentlich zu Problemen führt, hat meine Workstation gerade eine "Domänenmigration" durchlaufen, bei der jeder Datei auf der Box eine weitere Berechtigung hinzugefügt wurde. Dann wurde dieser Fehler angezeigt. Nachdem ich den Ausdruck zum Dummy-Out "server-sure-safe-dir" hinzugefügt hatte, wurde der Fehler abgebrochen.

(Wenn Sie sich fragen, wird die Migration in 2-3 Schritten durchgeführt. Der erste Schritt fügt die Berechtigung für mich in der Zieldomäne hinzu, dann werde ich in die Zieldomäne verschoben. Dann werden sie (ich bin mir nicht sicher, ob dies möglich ist) ) Entfernen Sie die Berechtigung für die alte Domäne. Dies ist eine große Firma und viele Benutzer, so dass sie dies in separaten Schritten tun.)

1
David M. Karr

letztes Mal habe ich es versucht, die Shell-Erweiterung "Take owner" hat die Aufgabe erfüllt

1
insomniaSalt

Wenn es sich um das Serverordnerproblem handelt, das RealityMonster erkannt hat, können Sie es an der Windows-Befehlszeile ausführen, um das Problem zu beheben:

takeown /f %USERPROFILE%\.emacs.d\server /r /d y
0
Sam Hasler