`Warning (bytecomp)` é um pouco vago - posso obter mais informações?

11

Quando inicio o emacs, recebo alguns avisos de compilação de bytes em uma janela que é exibida:

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

Posso obter emacs para me dar locais?

Tom Seddon
fonte
3
Esta informação seria útil para todos. Use Mx report-emacs-bugpara solicitar este recurso.
abo-abo
Se você tentar definir debug-on-messagea Warning (bytecomp), não vai acionar o depurador?
wvxvw
2
IIRC você recebe nomes de arquivos quando o Emacs conhece o arquivo. Portanto, presumivelmente, o texto acima vem de algum código Elisp que foi "gerado em tempo real" em vez de salvo em um arquivo e depois passado para o compilador de bytes. Em 99% dos casos, iniciar o Emacs não deve compilar nenhum código, portanto, talvez o problema possa ser corrigido em um nível ainda mais alto.
27515 Stefan
@wvxvw - não consegui debug-on-messagefazer nada. No final, o interactive-presultado foi causado por screen-lines.el, e o resultado with-current-bufferfoi devido a uma versão antiga do modo tuareg. Eu decidi remover os dois. Não uso o modo tuareg e, embora goste do screen-lines.el, isso me causou muitos problemas com as macros do teclado.
quer

Respostas:

4

Isso acontece devido ao display-warningatraso dos avisos até o horário de inicialização. Até então, o nome e o local do arquivo não são mais conhecidos.

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

Você deve poder desabilitar isso com alguns conselhos:

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

Embora isso possa impedir que o *Warnings*buffer apareça (como descrito no Bug # 20792), você deverá verificá-lo manualmente no *Compile-Log*buffer.

Caso anterior disso, relatado no emacs-devel aqui ( continua aqui ).

npostavs
fonte
2

Eu acho que os avisos são provenientes da compilação on-the-fly de pacotes ELPA. Tente executar o seguinte código:

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

Após Mx my-package-recompile alterne o buffer Compile-Log e veja se esses avisos são replicados lá?

stsquad
fonte
Eu tenho o mesmo problema, mas apenas o primeiro erro e 2 vezes. Esta solução não funcionou. Além disso, dizia Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss 28/09
Lamentamos, mas pensava que era sobre corrigir o problema, não obter mais informações. Tentei procurar o erro agora, mas ele não apareceu na lista.
TRSs