`Advertencia (bytecomp)` es un poco vago, ¿puedo obtener más información?

11

Cuando inicio emacs, recibo un par de advertencias de compilación de bytes en una ventana que aparece:

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

¿Puedo obtener emacs para darme ubicaciones?

Tom Seddon
fuente
3
Esta información sería útil para todos. Use Mx report-emacs-bugpara solicitar esta función.
abo-abo
Si se intenta establecer debug-on-messageque Warning (bytecomp), no se activará el depurador?
wvxvw
2
IIRC obtienes nombres de archivo cuando Emacs conoce el archivo. Entonces, presumiblemente, lo anterior proviene de algún código de Elisp que se "generó sobre la marcha" en lugar de guardarse en un archivo y luego pasar al compilador de bytes. En el 99% de los casos, iniciar Emacs en realidad no debería compilar ningún código, por lo que tal vez el problema se pueda solucionar a un nivel aún mayor.
Stefan
@wvxvw: no pude debug-on-messagehacer nada. Al final, interactive-presultó ser causado por screen-lines.el, y el with-current-bufferse debió a una versión antigua del modo tuareg. Decidí eliminar ambos. No uso el modo tuareg, y aunque me gustan bastante las lineas de pantalla.el, hace tiempo que me causó todo tipo de problemas con las macros del teclado.
Tom Seddon el

Respuestas:

4

Esto sucede debido a display-warningretrasos en las advertencias hasta después del tiempo de inicio. Para entonces, el nombre y la ubicación del archivo ya no se conocen.

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

Debería poder desactivar esto con algunos consejos:

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

Aunque esto podría evitar que el *Warnings*búfer aparezca (como se describe en el Bug # 20792), entonces deberá verificarlo manualmente en el *Compile-Log*búfer.

Caso anterior de esto, reportado en emacs-devel aquí ( continúa aquí ).

npostavs
fuente
2

Supongo que las advertencias provienen de la compilación sobre la marcha de paquetes ELPA. Intenta ejecutar el siguiente código:

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

Después de Mx my-package-recompile, cambie el búfer Compile-Log y vea si estas advertencias se replican allí.

stsquad
fuente
Tengo el mismo problema pero solo el primer error y 2 veces. Esta solución no funcionó. Además, dijo Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss
Lo sentimos, pensé que se trataba de solucionar el problema, no de obtener más información. Intenté buscar el error ahora pero no apareció en la lista.
trss