当前位置:  开发笔记 > 开发工具 > 正文

Emacs - 调用时出错(服务器启动)

如何解决《Emacs-调用时出错(服务器启动)》经验,为你挑选了6个好方法。

我目前在Windows Vista SP1中使用GNU Emacs 23.0.93.1.在我的.emacs文件中,我调用了(server-start)一个错误消息,目录〜/ .emacs.d/server是不安全的.有没有人见过这个并知道修复或解决方法?...除了关闭服务器;)

这是堆栈跟踪:

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)

RealityMonst.. 147

我在EmacsWiki上找到了这个解决方案:

"当您对帐户拥有"管理员"权限时,问题是目录〜/ .emacs.d/server的所有权.创建目录〜/ .emacs.d/server并将此目录的所有者设置为您的登录名名称和问题都消失了.由于我有一个Windows 7的"荷兰语"版本,我不完全知道英文术语,但这里是程序:

在〜/ .emacs.d/server上单击R-mouse,然后选择"属性"(菜单中的最后一项).从"属性"中选择"安全"选项卡,然后选择"高级"按钮.然后选择"所有者"选项卡并将所有者从中更改Administrators (\Administrators) (\.现在,服务器代码将接受此目录作为安全,因为您是所有者.

希望这对你们所有人都有帮助,无论如何它解决了我的问题.

WKR Reutefleut"

它绝对适用于Vista,使用Emacs 23.2.1.



1> RealityMonst..:

我在EmacsWiki上找到了这个解决方案:

"当您对帐户拥有"管理员"权限时,问题是目录〜/ .emacs.d/server的所有权.创建目录〜/ .emacs.d/server并将此目录的所有者设置为您的登录名名称和问题都消失了.由于我有一个Windows 7的"荷兰语"版本,我不完全知道英文术语,但这里是程序:

在〜/ .emacs.d/server上单击R-mouse,然后选择"属性"(菜单中的最后一项).从"属性"中选择"安全"选项卡,然后选择"高级"按钮.然后选择"所有者"选项卡并将所有者从中更改Administrators (\Administrators) (\.现在,服务器代码将接受此目录作为安全,因为您是所有者.

希望这对你们所有人都有帮助,无论如何它解决了我的问题.

WKR Reutefleut"

它绝对适用于Vista,使用Emacs 23.2.1.


固定它!我希望这个评论有更高的谷歌排名,它也应该是这个问题的答案.

2> gavenkoa..:

我喜欢larsreed,但complite代码准备使用:

(require 'server)
(when (and (>= emacs-major-version 23)
           (equal window-system 'w32))
  (defun server-ensure-safe-dir (dir) "Noop" t)) ; Suppress error "directory
                                                 ; ~/.emacs.d/server is unsafe"
                                                 ; on windows.
(server-start)

我在博客文章http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html中解释了这个问题.

另请注意,在2009-09-19修复了关于server-ensure-safe-dir的错误#4197,因此在传入的Emacs 23.2中不需要这种解决方法.

根据最近发布的Emacs 23.2,我有这样的警告:

警告(服务器):~/.emacs.d/server用于存储Emacs服务器身份验证文件.FAT32文件系统上的目录不能防止篡改.请参阅变量server-auth-dir了解详细信

要解决这个问题,你可以将server-auth-dir指向NTFS分区(%APPDATA%通常位于Windows %SYSTEMDRIVE%,用户通常将系统驱动器格式化为NTFS分区):

(require 'server)
(when (and (eq window-system 'w32) (file-exists-p (getenv "APPDATA")))
  (setq server-auth-dir (concat (getenv "APPDATA") "/.emacs.d/server"))
  (make-directory server-auth-dir)  )
(server-start)



3> brlcad..:

这是Windows上已知的Emacs错误.解决方法是在server.el中的server-ensure-safe-dir中注释掉这一行,你需要在更改后重新编译字节:

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


您的解决方案解决了我的问题.我将在稍后进一步调查,并在此处添加我的发现.谢谢!

4> lre..:

为避免黑客入侵lisp目录,您只需将以下内容添加到.emacs:

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



5> Andreas Spin..:

此外,您不希望服务器以批处理模式启动.因此,在我的.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时,此代码也有效.

希望这可以帮助.



6> 小智..:

在Windows 7中没有为我工作.

我改为阅读server-ensure-safe-dir中的注释,继续获取%APPDATA%forlder和子文件夹的所有权.它们归本地管理员所有,而不是我.

这有帮助!

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有