Theo dõi khi các biến được cập nhật


7

Tôi có một vấn đề với org-modequan điểm chương trình nghị sự của. Trong khi tôi đã đặt org-agenda-filesthành '("~/org/")bất biến khi cuối cùng tôi quay lên, M-x org-agendatôi thấy rằng nó org-agenda-fileschỉ trỏ đến một tệp org. Rõ ràng có điều gì đó đang quyết định chỉ bao gồm tệp org cuối cùng tôi đã xem nhưng tôi gặp khó khăn khi tìm ra cái gì. Có cách nào để bẫy khi biến này được thay đổi và hiển thị hoặc ghi lại một số loại backtrace không?


Từ chuỗi org-agenda-filesdoc, "Nếu một mục nhập là một thư mục, tất cả các tệp trong thư mục đó được khớp với org-agenda-file-regexpsẽ là một phần của danh sách tệp." Theo mặc định, biểu thức chính đó phù hợp với tất cả các tệp có .orgphần mở rộng trong thư mục đó. Bạn có thể cho biết cách bạn sắp xếp các tệp .org của mình không? Họ có thuộc về ~/org/thư mục trực tiếp không? Hay họ đang ở trong thư mục con dưới đó?
Kaushal Modi

ageneda -> chương trình nghị sự
Faheem Mitha

@kaushalmodi: yeah, my ~ / org / có đầy đủ các tệp org mỗi tệp có một loạt TODO trong đó (tôi có một "chủ đề" với một index.org).
stsquad

Phiên bản orgnào bạn đang sử dụng? Ngoài ra, bạn có thể thực hiện các thao tác sau để kiểm tra: Chạy ngay emacs -qsau đó để cài đặt Org (add-to-list 'load-path "path/to/org")nếu từ ELPA hoặc Git, nếu sử dụng tích hợp, bạn có thể bỏ qua. Sau đó trong đầu (require 'org) (setq org-agenda-files "~/org/") (org-agenda nil "t"). Xem nếu tất cả các TODO của bạn xuất hiện.
Jonathan Leech-Pepin

@ JonathanL336-Pepin: org mới nhất cho kho lưu trữ org ELPA (8.2.7c hiện tại trên hộp này).
stsquad

Câu trả lời:


6

Trong tình huống này, tôi thấy rằng cách tốt nhất để tìm hiểu những gì đang diễn ra là đến thăm tôi ~/.emacs.d/và chạy rgrep.

Tìm kiếm cấu hình của bạn

Đoạn mã sau, được lấy từ đây, đảm bảo rằng rgrep nó không đi vào thư mục con elpa/(vì bạn chắc chắn sẽ tìm thấy hàng tá lượt truy cập vô dụng trong đó).

(eval-after-load 'grep
  '(progn
     (add-to-list 'grep-find-ignored-directories "auto")
     (add-to-list 'grep-find-ignored-directories "elpa")))

Sau đó tôi mới chạy

M-x rgrep RET org-agenda-files RET *.el RET ~/.emacs.d/

mà sẽ tìm thấy bất kỳ tham chiếu đến org-agenda-filestrong cấu hình của tôi. Nếu đó là một vấn đề với cấu hình của tôi, điều này sẽ tìm thấy nó.

Tìm kiếm ở nơi khác

Nếu ở trên không tìm thấy gì, điều đó có nghĩa là có gói Elpa gây rắc rối. Vì vậy tôi làm

M-x rgrep RET org-agenda-files RET *.el RET ~/.emacs.d/elpa/

Điều này thường sẽ mang lại rất nhiều kết quả, nhưng có nhiều cách để vượt qua chúng một cách nhanh chóng. Chẳng hạn, rất khó có khả năng chính chế độ org gây ra vấn đề này. Vì vậy, thật an toàn khi bỏ qua tất cả các lần truy cập đến từ thư mục cài đặt chế độ org.


1
Đáng buồn thay, nơi duy nhất tôi tìm thấy nó được tham chiếu (ngoài thiết lập cấu hình của tôi) là trong phiên bản ELPA của org. Do đó tự hỏi nếu có một cách tốt hơn để bẫy khi org cập nhật nó.
stsquad

Giải đáp bí ẩn! Cuối cùng, tôi đã tìm thấy dòng vi phạm trong ~ / .emacs.d / my-custom.el, đó là những gì tệp tùy chỉnh trỏ vào. Vì phần này được tải vào cuối init.el của tôi, nó đã viết quá mức những gì my-org.el đã thiết lập. Ngoài ra, vì các tập tin elisp của tôi nằm trong một thư mục con tại sao tôi không tìm thấy nó sớm hơn.
stsquad

3

Một tùy chọn khác mà bạn có là để theo dõi giá trị của biến này trong suốt thực hiện org-agenda, mà để cho bạn biết nơi mà vấn đề là.

  1. Đánh giá mã sau đây:

    (global-set-key [f1] (lambda () (interactive) (message "%s" org-agenda-files)))
    
  2. Ghé thăm chức năng với M-x find-function RET org-agenda.

  3. Edebug nó với C-u C-M-x.
  4. Gọi hàm , M-x org-agenda.
  5. Dần dần bước qua nó bằng cách nhấn nvà theo dõi giá trị của biến bằng cách nhấn F1.

Tại một số điểm bên trong org-agendachức năng, bạn sẽ nhấn F1và giá trị của org-agenda-filessẽ thay đổi. Điều đó sẽ cho bạn biết nơi để tìm.


1
Bạn cũng có thể xác định lại chức năng với một loạt các thông báo, nếu bạn không muốn Edebug.
Malabarba

2

Bạn đã bao giờ sử dụng C-c [( org-agenda-file-to-front) hoặc C-c ]( org-remove-file) trong khi ở trong một orgtệp chưa?

Chúng ghi đè lên hiện tại org-agenda-filesvới một danh sách các tệp được mã hóa cứng sẽ không còn sử dụng định nghĩa của bạn ~/org/làm nguồn.

Ngoài ra nếu bạn đang cài đặt nó để ~/org/vui lòng đảm bảo rằng các tệp chương trình nghị sự bạn muốn có trong thư mục đó với .orgphần mở rộng. Nếu không họ sẽ không bị phát hiện.


Tôi muốn thêm rằng nếu bạn không mong đợi danh sách các tệp chương trình nghị sự thay đổi rất thường xuyên, tốt hơn là thêm danh sách các tệp đó vào một cái gì đó giống như ~/org/agenda.filesvà được đặt org-agenda-filesthành ~/org/agenda.files.
Kaushal Modi

Không có ý thức. Thật vậy, chúng không được ánh xạ tới các khóa hữu ích cho tôi.
stsquad
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.