警告(bytecomp)有点含糊-我还能获得更多信息吗?


11

当我启动emacs时,在弹出的窗口中收到几个字节编译警告:

Warning (bytecomp): `interactive-p' is an obsolete function (as of 23.2); use `called-interactively-p' instead. [7 times]
Warning (bytecomp): Use `with-current-buffer' rather than save-excursion+set-buffer

我可以让emacs给我位置吗?


3
此信息将对所有人有用。使用Mx report-emacs-bug请求此功能。
abo-abo

如果尝试设置debug-on-messageWarning (bytecomp),它不会触发调试器吗?
wvxvw 2015年

2
当Imacs知道文件时,IIRC确实会获得文件名。因此,以上可能来自某些Elisp代码,这些代码是“即时生成”的,而不是保存到文件中,然后传递给字节编译器。在99%的情况下,启动Emacs实际上根本不编译任何代码,因此也许可以在更高水平上解决此问题。
Stefan

@wvxvw-我没有debug-on-message做任何事情。最终,interactive-p结果是由screen-lines.el引起的,而这with-current-buffer是由于图阿雷格模式的古老版本所致。我决定同时删除两者。我不使用tuareg模式,尽管我非常喜欢screen-lines.el,但长期以来,它一直导致我键盘宏出现各种问题。
汤姆·塞登

Answers:


4

发生这种情况是由于将display-warning警告延迟到初始化时间之后。届时,文件名和位置将不再为人所知。

(defun display-warning (type message &optional level buffer-name)
  [...]
  (if (not (or after-init-time noninteractive (daemonp)))
      ;; Ensure warnings that happen early in the startup sequence
      ;; are visible when startup completes (bug#20792).
      (delay-warning type message level buffer-name)
    (unless level
    [... ]

您应该可以通过以下建议禁用此功能:

(defun dont-delay-compile-warnings (fun type &rest args)
  (if (eq type 'bytecomp)
      (let ((after-init-time t))
        (apply fun type args))
    (apply fun type args)))
(advice-add 'display-warning :around #'dont-delay-compile-warnings)

尽管这可能会阻止*Warnings*缓冲区弹出(如Bug#20792中所述),所以您必须在*Compile-Log*缓冲区中手动检查它。

以前的情况,在emacs-devel上报告此处继续)。


2

我猜这些警告来自ELPA软件包的即时编译。尝试运行以下代码:

(defun my-package-recompile()
  "Recompile all packages"
  (interactive)
  (byte-recompile-directory "~/.emacs.d/elpa" 0 t))

在Mx my-package-recompile切换后,编译日志缓冲区并查看是否在其中复制了这些警告?


我有同样的问题,但只有第一个错误和2次。该解决方案无效。另外,它说Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories)
trss

抱歉,以为这是解决问题,而不是获得更多信息。我现在尝试查找错误,但未出现在列表中。
trss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.