`Warning (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-messageчтобы Warning (bytecomp), не будет ли это вызвать отладчик?
wvxvw
2
IIRC вы получаете имена файлов, когда Emacs знает файл. Предположительно, вышеприведенное исходит из некоторого кода Elisp, который был «сгенерирован на лету», а не сохранен в файл, а затем передан байтовому компилятору. В 99% случаев запуск Emacs на самом деле вообще не должен компилировать какой-либо код, поэтому, возможно, проблема может быть решена на еще более высоком уровне.
Стефан
@wvxvw - мне не удалось debug-on-messageничего сделать. В конце концов, interactive-pоказалось, что это вызвано screen-lines.el, а это with-current-bufferсвязано с древней версией режима туарегов. Я решил удалить оба. Я не использую режим туарегов, и хотя мне очень нравится screen-lines.el, он долго вызывал у меня всевозможные проблемы с клавиатурными макросами.
Том Седдон

Ответы:

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 здесь ( продолжение здесь ).

npostavs
источник
2

Я предполагаю, что предупреждения исходят от оперативной компиляции пакетов ELPA. Попробуйте запустить следующий код:

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

После Mx my-package-Recompile переключите буфер Compile-Log и посмотрите, реплицированы ли там эти предупреждения?

stsquad
источник
У меня та же проблема, но только первая ошибка и 2 раза. Это решение не сработало. Также сказано Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss
Извините, я подумал, что нужно решить проблему, а не получить больше информации. Я попытался найти ошибку сейчас, но она не появилась в списке.
trss