2015-07-27 16 views
6

Tôi sử dụng chức năng chụp của chế độ org để làm tất cả các việc cần làm của tôi. Nó là sạch sẽ và thiết thực và cho phép tôi thêm một nội dung nhất quán cho tất cả các todo của tôi, bao gồm một dấu nhắc cho tiêu đề, một dấu nhắc cho các thẻ và một chèn tự động của ngày tạo ra. Đây là mã của tôi:Làm cách nào để thêm thẻ hoàn thành vào chế độ chụp org?

(setq org-capture-templates '((
    "t"    ; key 
    "Todo"    ; description 
    entry    ; type 
    (file+headline "C:/.../org/notes.org" "tasks")  ; target 
    "* TODO [#B] %^{Todo} :%^{Tags}: \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?" ; template 
    :prepend t  ; properties 
    :empty-lines 1 ; properties 
    :created t  ; properties 
    ))) 

Tuy nhiên, lời nhắc thẻ bắt buộc tôi nhập thẻ từ bộ nhớ. Làm thế nào tôi có thể thêm các thẻ từ danh sách thẻ theo quy định của đoạn mã sau:

(setq org-tag-alist `(
       ("OFFICE" . ?o) 
       ("HOME"  . ?h) 
       ("ERRAND" . ?e))) 

Khi quan điểm của tôi là trong tiêu đề của một nhiệm vụ đã tạo ra, danh sách này bật lên khi tôi nhấn Cc Cc và cho tôi chọn các thẻ bằng các chữ cái ngắn gọn "o", "h" hoặc "e".

Vì vậy, câu hỏi của tôi là: có thể bao gồm danh sách các thẻ bật lên này bên trong mã để tôi chụp không?

Trả lời

7

Giải pháp tích hợp là sử dụng %^g. Từ trợ giúp cho org-capture-templates:

%^g Nhắc thẻ, hoàn thành trên thẻ trong tệp đích.

%^G Nhắc thẻ, hoàn tất trên tất cả các thẻ trong tất cả các tệp chương trình làm việc.

Bạn cũng có thể thực hiện việc này "bằng tay" bằng cách gọi một số chức năng thêm thẻ. Việc thêm thẻ thường được thực hiện với org-set-tags (đây là những gì C-c C-c đang hoạt động). Vì vậy, tất cả chúng ta phải làm là gọi đó là trong mẫu của chúng tôi với %(func) cú pháp:

(setq org-capture-templates '((
    "t"    ; key 
    "Todo"    ; description 
    entry    ; type 
    (file+headline "C:/.../org/notes.org" "tasks")  ; target 
    "* TODO [#B] %^{Todo} %(org-set-tags) \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?" ; template 
    :prepend t  ; properties 
    :empty-lines 1 ; properties 
    :created t  ; properties 
    ))) 

Nếu bạn có một danh sách cụ thể của thẻ bạn muốn chọn từ (nói org-tag-alist), bạn có thể sử dụng completing-read để chọn từ nó :

(completing-read "Tag: " (mapcar #'first org-tag-persistent-alist) nil t) 
+1

Ahh ... Đẹp! Chế độ org công cụ mạnh là gì! Và cảm ơn rất nhiều cho câu trả lời kỹ lưỡng của bạn:)% (org-set-tags) cho phép tôi truy cập trực tiếp vào 'org-tag-alist' mà không sử dụng' complete-read'. Tuy nhiên, mã của bạn sẽ nhắc cho các thẻ trước khi nhắc nhở việc cần làm, đó là một sự không rõ ràng. Lệnh có thể được đảo ngược không? – myotis

+1

Tôi không nghĩ rằng thứ tự có thể được thay đổi; biểu hiện elisp dường như là những thứ đầu tiên được đánh giá. Có thể bạn có thể thêm 'org-set-tags' vào' org-capture-before-finalize-hook', nó sẽ yêu cầu các thẻ ngay sau khi bạn hoàn thành capture (nghĩa là, ngay sau khi sử dụng 'C-c C-c') – erikstokes

Các vấn đề liên quan