我刚在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)
我观察到,当我的电脑在睡觉后醒来时,就会出现问题。
答案 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) )))