Windows 8上的Emacs:写入错误,错误的文件描述符

时间:2015-06-10 21:40:06

标签: windows emacs ioerror

我刚在Win8上安装了Emacs。但是,有时候,当我将缓冲区保存到文件时,emacs会说:

Write error: bad file descriptor, c:/Users/...

我尝试了不同版本的emacs,没有帮助。如果我重新启动计算机,问题将在短时间内解决。然后再次发生。

有什么想法吗?

更新

我运行命令toggle-debug-on-error,它给了我以下信息:

Debugger entered--Lisp error: (file-error "Write error" "bad file descriptor" "c:/cygwin64/home/t-xins/workspace/codesnippet/html/main.js")
write-region(nil nil "c:/cygwin64/home/t-xins/workspace/codesnippet/html/main.js" nil t "c:/cygwin64/home/t-xins/workspace/codesnippet/html/main.js")
basic-save-buffer-2()
basic-save-buffer-1()
basic-save-buffer()
save-buffer(1)
call-interactively(save-buffer nil nil)
command-execute(save-buffer)

我观察到,当我的电脑在睡觉后醒来时,就会出现问题。

2 个答案:

答案 0 :(得分:0)

您可能会尝试向我们提供更多信息以帮助解决此问题:

运行函数toggle-debug-on-error,以便下次发生时可以获得错误的堆栈跟踪,这可能会提供有关正在发生的事情的线索。

可能,但我不太确定,它可能是编码问题,在这种情况下,以下行可能会修复它:

(setenv "LANG" "en_US.UTF-8")
(set-language-environment 'utf-8)
(set-default-coding-systems 'utf-8)
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

答案 1 :(得分:0)

一种针对此错误的解决方法。 就我而言,保存一次后,缓冲区无法再次保存, 抛出上面提到的错误信息。 保存为其他名称并重命名此文件即可。 不好-但是可以。因此,也许有人觉得这很有用: :

(defun save-force (&optional override-local-key)
    "force saving a file (ignores bad-file-descriptor)"
    (interactive "P")
    (when override-local-key
        (local-set-key (kbd "C-x C-s") 'save-force)
        (print "C-x C-s overridden with 'save-force") )
    (let* ((buf-fname (buffer-file-name))
           (buf-fname1 (format "%s-temp%06d" buf-fname (random 1000000))) )
        (ignore-errors
            (write-region nil nil buf-fname1))
        (when (file-exists-p buf-fname1)
            (when (file-exists-p buf-fname)
                (delete-file buf-fname))
            (rename-file buf-fname1 buf-fname)
            (set-buffer-modified-p nil)
            (revert-buffer nil t) )))