`Warning (bytecomp)` ist etwas vage - kann ich weitere Informationen erhalten?


10

Wenn ich Emacs starte, werden in einem Fenster, das angezeigt wird, einige Warnungen zur Byte-Kompilierung angezeigt:

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

Kann ich Emacs bekommen, um mir Standorte zu geben?


3
Diese Informationen wären für alle nützlich. Verwenden Sie Mx report-emacs-bug, um diese Funktion anzufordern.
Abo-Abo

Wenn Sie versuchen , zu setzen , debug-on-messageum Warning (bytecomp), wird es nicht auslösen den Debugger?
wvxvw

2
IIRC Sie erhalten Dateinamen, wenn Emacs die Datei kennt. Vermutlich stammt das Obige aus einem Elisp-Code, der "on the fly" generiert und nicht in einer Datei gespeichert und dann an den Byte-Compiler übergeben wurde. In 99% der Fälle sollte das Starten von Emacs eigentlich überhaupt keinen Code kompilieren, sodass das Problem möglicherweise auf einer noch höheren Ebene behoben werden kann.
Stefan

@wvxvw - Ich habe es nicht geschafft, debug-on-messageirgendetwas zu tun. Am Ende stellte interactive-psich heraus, dass das durch screen-lines.el verursacht wurde, und das with-current-bufferwar auf eine alte Version des tuareg-Modus zurückzuführen. Ich beschloss, beide zu entfernen. Ich benutze den Tuareg-Modus nicht und obwohl ich Screen-Lines.el sehr mag, hat es mir lange Zeit alle möglichen Probleme mit Tastaturmakros verursacht.
Tom Seddon

Antworten:


4

Dies geschieht aufgrund display-warningverzögerter Warnungen bis nach der Initialisierungszeit. Bis dahin sind der Dateiname und der Speicherort nicht mehr bekannt.

(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
    [... ]

Sie sollten dies mit einigen Ratschlägen deaktivieren können:

(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)

Dies kann zwar verhindern, dass der *Warnings*Puffer auftaucht (wie in Fehler Nr. 20792 beschrieben), Sie müssen ihn jedoch manuell im *Compile-Log*Puffer überprüfen .

Zurück diesem Fall, berichtete über Emacs-devel hier ( weiter hier ).


1

Ich gehe davon aus, dass die Warnungen von der spontanen Kompilierung von ELPA-Paketen stammen. Versuchen Sie, den folgenden Code auszuführen:

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

Nach dem Umschalten von Mx my-package-recompile den Compile-Log- Puffer wechseln und prüfen, ob diese Warnungen dort repliziert werden?


Ich habe das gleiche Problem, aber nur den ersten Fehler und 2 mal. Diese Lösung hat nicht funktioniert. Auch hieß es Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss

Entschuldigung, ich dachte, es geht darum, das Problem zu beheben und keine weiteren Informationen zu erhalten. Ich habe jetzt versucht, nach dem Fehler zu suchen, aber er wurde nicht in der Liste angezeigt.
trss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.