`Cảnh báo (bytecomp)` hơi mơ hồ - tôi có thể lấy thêm thông tin không?


10

Khi tôi bắt đầu emacs, tôi nhận được một vài cảnh báo biên dịch byte trong một cửa sổ bật lên:

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

Tôi có thể lấy emacs để cho tôi địa điểm không?


3
Thông tin này sẽ hữu ích cho mọi người. Sử dụng Mx report-emacs-bugđể yêu cầu tính năng này.
abo-abo

Nếu bạn cố gắng đặt debug-on-messagethành Warning (bytecomp), nó sẽ không kích hoạt trình gỡ lỗi chứ?
wvxvw

2
IIRC bạn có được tên tệp khi Emacs biết tệp. Vì vậy, có lẽ phần trên xuất phát từ một số mã Elisp được "tạo ra nhanh chóng" thay vì được lưu vào một tệp và sau đó được chuyển đến trình biên dịch byte. Trong 99% các trường hợp, bắt đầu Emacs thực sự không nên biên dịch bất kỳ mã nào, vì vậy có thể vấn đề có thể được khắc phục ở cấp độ cao hơn.
Stefan

@wvxvw - Tôi không quản lý để debug-on-messagelàm bất cứ điều gì. Cuối cùng, interactive-phóa ra là do screen-lines.el gây ra, và nguyên nhân with-current-bufferlà do một phiên bản cổ của chế độ tuareg. Tôi quyết định loại bỏ cả hai. Tôi không sử dụng chế độ tuareg và trong khi tôi khá thích màn hình dòng.el, thì nó đã gây ra cho tôi đủ loại vấn đề với macro bàn phím.
Tom Seddon

Câu trả lời:


4

Điều này xảy ra do display-warningcảnh báo trì hoãn cho đến sau thời gian init. Đến lúc đó, tên tệp và vị trí không còn được biết đến.

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

Bạn có thể vô hiệu hóa điều này với một số lời khuyên:

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

Mặc dù điều này có thể ngăn *Warnings*bộ đệm bật lên (như được mô tả trong Lỗi # 20792), vì vậy bạn sẽ phải kiểm tra thủ công trong *Compile-Log*bộ đệm.

Trường hợp trước đây, báo cáo về emacs-devel ở đây ( tiếp tục ở đây ).


1

Tôi sẽ đoán các cảnh báo đang đến từ việc tổng hợp các gói ELPA đang hoạt động. Hãy thử chạy đoạn mã sau:

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

Sau khi Mx my-pack-recompile chuyển bộ đệm Compile-Log và xem các cảnh báo này có được sao chép trong đó không?


Tôi có cùng một vấn đề nhưng chỉ có lỗi đầu tiên và 2 lần. Giải pháp này không hiệu quả. Ngoài ra, nó nói Done (Total of 4 files compiled, 1 failed, 2 skipped in 3 directories).
trss

Xin lỗi, nghĩ rằng đây là về việc khắc phục vấn đề, không thu được thêm thông tin. Tôi đã cố gắng tìm kiếm lỗi ngay bây giờ nhưng nó không xuất hiện trong danh sách.
trss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.