`Peringatan (bytecomp)` agak kabur - dapatkah saya mendapatkan informasi lebih lanjut?

11

Ketika saya memulai emacs, saya mendapatkan beberapa peringatan kompilasi byte di jendela yang muncul:

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

Bisakah saya mendapatkan emacs untuk memberi saya lokasi?

Tom Seddon
sumber
3
Info ini akan bermanfaat bagi semua orang. Gunakan Mx report-emacs-buguntuk meminta fitur ini.
abo-abo
Jika Anda mencoba mengatur debug-on-messageke Warning (bytecomp), tidak akan memicu debugger?
wvxvw
2
IIRC Anda mendapatkan nama file ketika Emacs tahu file tersebut. Jadi mungkin di atas berasal dari beberapa kode Elisp yang "dihasilkan dengan cepat" daripada disimpan ke file dan kemudian diteruskan ke byte-compiler. Dalam 99% kasus, memulai Emacs seharusnya tidak mengkompilasi kode apa pun, jadi mungkin masalahnya dapat diperbaiki pada tingkat yang lebih tinggi.
Stefan
@ wvxvw - Saya tidak berhasil debug-on-messagemelakukan apa pun. Pada akhirnya, interactive-pternyata disebabkan oleh screen-lines.el, dan yang with-current-buffersatu disebabkan oleh versi kuno mode tuareg. Saya memutuskan untuk menghapus keduanya. Saya tidak menggunakan tuareg-mode, dan sementara saya cukup suka screen-lines.el, itu sudah lama menyebabkan saya segala macam masalah dengan macro keyboard.
Tom Seddon

Jawaban:

4

Ini terjadi karena display-warningmenunda peringatan sampai setelah waktu init. Pada saat itu, nama file dan lokasi tidak lagi dikenal.

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

Anda harus dapat menonaktifkan ini dengan beberapa saran:

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

Meskipun ini mungkin mencegah *Warnings*buffer muncul (seperti dijelaskan dalam Bug # 20792), jadi Anda harus memeriksanya secara manual di *Compile-Log*buffer.

Kasus sebelumnya ini, dilaporkan pada emacs-devel di sini ( berlanjut di sini ).

npostavs
sumber
2

Saya akan menebak peringatan datang dari kompilasi on-the-fly paket ELPA. Coba jalankan kode berikut:

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

Setelah Mx my-package-recompile, aktifkan buffer Compile-Log dan lihat apakah peringatan ini direplikasi di sana?

stsquad
sumber
Saya memiliki masalah yang sama tetapi hanya kesalahan pertama dan 2 kali. Solusi ini tidak berhasil. Juga, katanya Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss
Maaf, pikir ini tentang memperbaiki masalah, tidak mendapatkan informasi lebih lanjut. Saya mencoba mencari kesalahan sekarang tetapi tidak muncul dalam daftar.
trss