Obecnie używam GNU Emacs 23.0.93.1 w systemie Windows Vista SP1. W moim pliku .emacs dzwonię (server-start)
i powoduje to błąd z komunikatem Katalog ~ / .emacs.d / server jest niebezpieczny . Czy ktoś to widział i zna poprawkę lub obejście? ... inne niż pozostawienie wyłączonego serwera;)
Oto ślad stosu:
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
pobraniu klient ustawił ~ / .emacs.d / server na 0755 na moją umaskę. Zamiast pakować sięsvn
w skrypt powłoki, który jest sprzeczny z celem posiadania wszystkiego, czego potrzebuję, aby dostosować Emacsa na żywo w Subversion, po prostu mam Emacs wymuszający prawidłowe uprawnienia podczas uruchamiania, dodając następujące elementy do~/.emacs.d/init.el
:(set-file-modes (expand-file-name "~/.emacs.d/server") #o700)
Odpowiedzi:
Znalazłem to rozwiązanie na EmacsWiki:
„Problemem jest własność katalogu ~ / .emacs.d / server, gdy masz również uprawnienia„ Administratorów ”na swoim koncie. Utwórz katalog ~ / .emacs.d / server i ustaw właściciela tego katalogu na swój login name i problem zniknął. Ponieważ mam „holenderską” wersję systemu Windows 7, nie znam dokładnie angielskich terminów, ale oto procedura:
Kliknij prawym przyciskiem myszy na ~ / .emacs.d / server i wybierz „Właściwości” (ostatnia pozycja w menu). Z Właściwości wybierz zakładkę „Bezpieczeństwo”, a następnie wybierz przycisk „Zaawansowane”. Następnie wybierz zakładkę „Właściciel” i zmień właściciela z
Administrators (<your-pc-name>\Administrators)
na<your-login-name> (<your-pc-name>\<your-login-name>
. Teraz kod serwera zaakceptuje ten katalog jako bezpieczny, ponieważ jesteś właścicielem.Mam nadzieję, że to pomoże wam wszystkim, ale i tak rozwiązało problem.
WKR Reutefleut ”
To zdecydowanie działa na Vista, z Emacs 23.2.1.
źródło
Lubię odpowiadać na larsreed, ale kompletny kod gotowy do użycia:
Ten problem omawiam w moim artykule na blogu http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html
Zauważ również, że w 2009-09-19 naprawiono błąd # 4197 dotyczący server-secure-safe-dir, więc w nadchodzącym Emacs 23.2 to obejście nie jest potrzebne.
Pod niedawno wydanym Emacsem 23.2 mam takie ostrzeżenie:
Ostrzeżenie (serwer): używanie
~/.emacs.d/server
do przechowywania plików uwierzytelniania serwera Emacs. Katalogi na systemach plików FAT32 NIE są zabezpieczone przed manipulacją. Zobacz zmiennąserver-auth-dir
po szczegóły.Aby to naprawić, jak powiedzmy ostrzeżenie, możesz wskazać server-auth-dir na partycję NTFS (
%APPDATA%
zwykle znajduje się system Windows%SYSTEMDRIVE%
i użytkownik zwykle formatuje dysk systemowy jako partycję NTFS):źródło
(>= emacs-major-version 23)
. Dzięki +1Jest to znany błąd Emacsa w systemie Windows. Aby obejść ten problem, należy zakomentować tę linię w server-sure-safe-dir w server.el, aby po zmianie ponownie kompilować bajty:
;; FIXME: Busted on Windows. ;; (eql (nth 2 attrs) (user-uid))
źródło
Aby uniknąć włamań do katalogu lisp, możesz po prostu dodać do swojego .emacs:
(require 'server) (and (>= emacs-major-version 23) (defun server-ensure-safe-dir (dir) "Noop" t))
źródło
(require 'server)
nad kodemPonadto nie chcesz, aby serwer był uruchamiany w trybie wsadowym. Dlatego w moich .emacs używam
(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)) "True when running in batch-mode (--batch-mode command-line switch set).")
i wtedy
(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))
Wciąż funkcja serwera jest kapryśna:
server-start
wyrzuca, gdy katalog % HOME% /. Emacs.d / server nie istnieje. Po kolei Emacs nie uruchomi się ponownie! Oczywistym rozwiązaniem jest utworzenie brakującego katalogu i ponowna próba; Znalazłem rozwiązanie gdzieś w sieci, ale naprawdę nie pamiętam gdzie. Poniższy kod działa pomyślnie od lat na kilku moich komputerach z systemem 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)))) ) )
Ten kod działa również podczas uruchamiania Emacsa z pendrive'a.
Mam nadzieję że to pomoże.
źródło
(if (not noninteractive) (progn (require 'server) (server-start)))
--batch-mode
jako(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)))
. Naprawię to powyżej.Nie działa dla mnie w Windows 7.
Zamiast tego przeczytałem komentarze w server-sure-safe-dir i przystąpiłem do przejęcia własności do% APPDATA% forlder i podfolderów. Należały do lokalnych administratorów, a nie do mnie.
To pomogło!
źródło
Bardzo pomocna odpowiedź od Gavenkoa. Mam ten problem na Emacs 24.1, Windows 2003.
Niestety, zastąpienie server-secure-safe-dir jako noop, jak zasugerowano w twoim pierwszym fragmencie, nie działało dla mnie we wszystkich sytuacjach. W szczególności nie zadziałało, gdy zostało zastosowane wcześniej (uruchomienie serwera) zostało wykonane co najmniej raz, ponieważ początkowe wykonanie również utworzyłoby katalog , jeśli nie istnieje. W wersji noop katalog nie zostałby w ogóle utworzony.
Obejściem, które zadziałało w moim przypadku w tym sensie, że wyeliminowało komunikat o błędzie, podczas gdy nadal poprawnie tworzyłem katalog, był następujący kod, umieszczony przed (start serwera) w moim pliku inicjującym Emacsa. Zawiera porady dotyczące server-sure-safe-dir, aby zignorować wszelkie błędy wywołane stamtąd. Nie rozwiązuje pierwotnej przyczyny problemu, ale dla mnie wystarczająco dobre.
(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))
źródło
Poniższy krok działa dla mnie: 1. Wykonaj poniższy kod jako plik .reg. Wersja Win Emacsa potraktuje wszystkie wartości w rejestrze jako 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)
Według powyższych kroków tryb serwera działa u mnie poprawnie i idealnie.
źródło
W przypadku, gdy to czasami dotyka ludzi, moja stacja robocza przeszła właśnie przez „migrację domeny”, która dodała kolejne uprawnienia do każdego pliku w skrzynce, po czym zacząłem otrzymywać ten błąd. Po dodaniu wyrażenia do dummy out "server-zapewnić-bezpieczny-katalog" to przestało działać.
(Jeśli się zastanawiasz, migracja będzie przebiegać w 2-3 krokach. Pierwszy dodaje uprawnienia dla mnie w domenie docelowej, potem zostaję przeniesiony do domeny docelowej, potem mogą (nie jestem tego pewien ) usunąć uprawnienia dla starej domeny. To duża firma i wielu użytkowników, więc robią to w osobnych krokach).
źródło
Ostatnim razem, gdy próbowałem, rozszerzenie powłoki „Przejmij własność” wykonało zadanie
źródło
Jeśli jest to problem z własnością folderu serwera, który zidentyfikował RealityMonster, możesz uruchomić to w wierszu polecenia systemu Windows, aby go naprawić:
źródło