`Попередження (байткомп)` трохи розпливчасте - чи можу я отримати більше інформації?


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для запиту цієї функції.
або-або

Якщо ви намагаєтеся встановити , debug-on-messageщоб Warning (bytecomp), чи не буде це викликати відладчик?
wvxvw

2
IIRC ви отримуєте імена файлів, коли Emacs знає файл. Тож, мабуть, вищесказане походить від якогось коду Elisp, який "генерувався на льоту", а не зберігався у файлі і потім передавався в байт-компілятор. У 99% випадків запуск Emacs насправді взагалі не повинен компілювати жоден код, тому, можливо, проблему можна вирішити ще на більш високому рівні.
Стефан

@wvxvw - Мені нічого не вдалося змусити debug-on-messageзробити. Зрештою, interactive-pвиявилося, що це викликано screen -lines.el, а той with-current-bufferбув зумовлений стародавньою версією tuareg-mode. Я вирішив зняти обидва. Я не використовую режим tuareg, і хоча мені дуже подобається екран-lines.el, це давно викликало у мене всілякі проблеми з клавіатурними макросами.
Том Седдон

Відповіді:


4

Це трапляється через display-warningзатримку попереджень до моменту init. На той час ім'я та місце розташування файлів уже не відомі.

(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*спливаючому буферу (як описано в поминці № 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-rekompile перемикає буфер Compile-Log і бачить, чи там ці попередження повторюються?


У мене така ж проблема, але тільки перша помилка і 2 рази. Це рішення не спрацювало. Також сказано Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss

Вибачте, думав, що це стосується вирішення проблеми, а не отримання додаткової інформації. Я намагався шукати помилку зараз, але вона не з’явилася в списку.
trss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.