`คำเตือน (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 ไม่ควรรวบรวมรหัสใด ๆ เลยดังนั้นอาจแก้ไขปัญหาได้ในระดับที่สูงขึ้น
Stefan

@wvxvw - ฉันไม่สามารถdebug-on-messageทำอะไรได้เลย ในที่สุดการinteractive-pเปิดออกจะเกิดจาก screen-lines.el และwith-current-bufferอันหนึ่งเกิดจากโหมด tuareg-version โบราณ ฉันตัดสินใจที่จะลบทั้งสอง ฉันไม่ได้ใช้โหมด tuareg และในขณะที่ฉันชอบ screen-lines.el มันทำให้ฉันมีปัญหากับมาโครแป้นพิมพ์เป็นเวลานาน
Tom Seddon

คำตอบ:


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 ที่นี่ ( ดำเนินการต่อที่นี่ )


2

ฉันจะเดาว่าคำเตือนนั้นมาจากการรวบรวมแพ็คเกจ ELPA แบบออนไลน์ทันที ลองเรียกใช้รหัสต่อไปนี้:

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

หลังจาก Mx my-package-recompile สลับบัฟเฟอร์Compile-Logและดูว่ามีการจำลองคำเตือนเหล่านี้หรือไม่


ฉันมีปัญหาเดียวกัน แต่ข้อผิดพลาดแรกและ 2 ครั้ง วิธีนี้ไม่ได้ผล นอกจากนี้ยังกล่าวDone (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories)อีกว่า
trss

ขออภัยคิดว่ามันเกี่ยวกับการแก้ไขปัญหาไม่ได้รับข้อมูลเพิ่มเติม ฉันพยายามค้นหาข้อผิดพลาดในตอนนี้ แต่ไม่ปรากฏในรายการ
trss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.