`Warning (bytecomp)` jest nieco niejasne - czy mogę uzyskać więcej informacji?

11

Kiedy uruchamiam emacsa, pojawia się kilka ostrzeżeń kompilacji bajtów w wyskakującym oknie:

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

Czy mogę dostać emacsa, który da mi lokalizację?

Tom Seddon
źródło
3
Te informacje byłyby przydatne dla wszystkich. Użyj Mx, report-emacs-bugaby poprosić o tę funkcję.
abo-abo
Jeśli spróbujesz ustawić debug-on-messagesię Warning (bytecomp), nie będzie to powodować debugera?
wvxvw
2
IIRC dostajesz nazwy plików, gdy Emacs zna plik. Przypuszczalnie powyższe pochodzi z jakiegoś kodu Elisp, który został „wygenerowany w locie”, a nie zapisany w pliku, a następnie przekazany do kompilatora bajtów. W 99% przypadków uruchomienie Emacsa nie powinno w ogóle kompilować żadnego kodu, więc być może problem można rozwiązać na jeszcze wyższym poziomie.
Stefan
@wvxvw - Nie udało debug-on-messagemi się nic zrobić. Ostatecznie interactive-pokazało się, że przyczyną jest screen-lines.el, a ta with-current-bufferbyła spowodowana starożytną wersją trybu tuareg. Postanowiłem usunąć oba. Nie używam trybu tuareg i chociaż lubię screen-lines.el, to od dawna powodowało mi różnego rodzaju problemy z makrami klawiatury.
Tom Seddon,

Odpowiedzi:

4

Dzieje się tak z powodu display-warningopóźnienia ostrzeżeń do czasu inicjacji. Do tego czasu nazwa i lokalizacja pliku nie są już znane.

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

Powinieneś być w stanie wyłączyć to z kilkoma poradami:

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

Chociaż może to zapobiec *Warnings*wyskakiwaniu bufora (zgodnie z opisem w błędzie nr 20792), musisz więc sprawdzić go ręcznie w *Compile-Log*buforze.

Poprzedni przypadek ten, poinformował na emacs-devel tutaj ( trwa tutaj ).

npostavs
źródło
2

Domyślam się, że ostrzeżenia pochodzą z kompilacji w locie pakietów ELPA. Spróbuj uruchomić następujący kod:

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

Po przełączeniu Mx my-package-recompile przełączyć bufor Compile-Log i sprawdzić, czy te ostrzeżenia są tam replikowane?

stsquad
źródło
Mam ten sam problem, ale tylko pierwszy błąd i 2 razy. To rozwiązanie nie działa. Powiedział także Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss
Niestety, myślałem, że chodziło o naprawienie problemu, a nie o uzyskanie dodatkowych informacji. Próbowałem teraz wyszukać błąd, ale nie pojawił się na liście.
trss