2012-01-25 12 views
5

使用如下所示的捕獲模板,我可以將條目添加到文件中的不同標題。如何在捕獲過程中手動輸入標題,而不是將每個標題設置爲.emacs文件中的鍵,就像我現在正在做的那樣?以交互方式輸入標題,在該標題下使用捕獲來放置條目

(setq org-capture-templates 
     '(
     ("l" "Log" entry 
    (file+headline "c:/Org/log.org" "Log") 
    "\n\n** %?\n<%<%Y-%m-%d %a %T>>" 
    :empty-lines 1)) 

回答

3

我不相信你可以把它提示上捕獲的標題。但是,您可以從捕獲窗口內進行重新導入,這會導致所需的行爲。

我會定義一個全面的目標標題/文件,以便如果您忘記了您將始終將它們收集在相同的位置,然後只需創建一次即可重新創建它們。如果您還在此標題上設置了類別/標籤,您將能夠輕鬆看到誤配的捕獲​​條目並根據需要進行重新配置。 (下面的例子)

然後,而不是完成與C-c C-c選擇重寫C-c C-w,你會被要求選擇標題你想發送新的條目。


我使用這個包羅萬象的捕獲模板如下(改編自Bernt Hansen's capture settings

 ("i" 
     "Incidents" 
     entry 
     (file+headline "~/Work/work.org" "Refile") 
     "* TODO %^{Ticket} - %^{User}\nSCHEDULED: %^t DEADLINE: %^t\n:PROPERTIES: 
     \n:DATE: %^U\n:END:\n%^{MANAGER}p%^{HOSTNAME}p%^{LOCATION}p%^{TEL}p\n%c" 
     :empty-lines 1 :clock-in t :clock-resume t) 

(換行符添加讀這裏的時候,避免滾動)

標題爲配置如下

* Refile                :refile: 
:PROPERTIES: 
:CATEGORY: Unsorted 
:END: 

有了這個我結束了你p所有非再次提交任務顯示爲

Unsorted:  Deadline: TODO <Headline>       :refile:: 

我目前傾向於使用標籤作爲參考,如果我在等待同事/管理者來處理票,或提醒我要對他們說一下吧當我看到它們時,最後的標籤顯然非常突出,如果我試圖記住問題是什麼(因爲我只是顯示案例號和用戶名,條目中的詳細信息),就像Unsorted一樣。

+0

能否請您提供一個實現你的第二段說什麼的代碼的例子。這會讓你的答案更加完美! –

2

同時捕獲一個筆記,完成寫作後按C-u C-c C-w在所需的新標題下重新寫入。

你還需要設置這個變量

(setq org-refile-allow-creating-parent-nodes (quote confirm)) 

,你可以將其設置爲t,而不是確認。但我喜歡它是確認,因爲我不經常重新對新目標

+0

你不應該用'C-u'作爲前綴來重寫文件中的標題。我將他的問題理解爲已經存在的標題,而不是讓多個模板(每個標題一個)只使用一個模板並將其重新標記爲捕獲的適當標題。 –

+0

我傾向於同意。 IIRC C-u允許您重寫任何議程文件。 – kindahero

+0

C-u C-c C-w是一個Goto,而不是一個Refile –

4

它看起來像,在新版本的組織至少,捕獲模板中可以使用自定義函數來做到這一點。

相反的:

entry 
(file+headline "~/Work/work.org" "Refile") 

您可以使用:

entry 
(file+function "~/Work/work.org" function-finding-location) 

在哪裏「功能查找定位」是你自己寫的自定義功能,可以很容易地提示您輸入標題。

或者,你可以走得更遠,並定義自定義功能,將提示輸入兩個文件名和標題名稱(或者其他任何你能想到):

entry 
(function function-finding-location) 

我真的不知道足夠的elisp自己編寫這些函數,但這看起來像是開始的地方。如果其他人可以提供一些代碼,那會很好。相關文件是在這裏:

http://orgmode.org/manual/Template-elements.html

2

我寫信給使用文件+功能,將提示上捕獲的位置使用的功能。

它使用org-refile的內部提示功能,因此我們可以在提示中獲得標題的完成(maxlevels被重寫爲9)。當用戶輸入一個未知標題時,它會在文件末尾創建它。

(defun org-ask-location() 
    (let* ((org-refile-targets '((nil :maxlevel . 9))) 
     (hd (condition-case nil 
       (car (org-refile-get-location nil nil t t)) 
       (error (car org-refile-history))))) 
    (goto-char (point-min)) 
    (outline-next-heading) 
    (if (re-search-forward 
     (format org-complex-heading-regexp-format (regexp-quote hd)) 
     nil t) 
     (goto-char (point-at-bol)) 
     (goto-char (point-max)) 
     (or (bolp) (insert "\n")) 
     (insert "* " hd "\n"))) 
    (end-of-line)) 

在你的情況,你可以使用這樣的:

(setq org-capture-templates 
'(("l" "Log" entry 
    (file+function "c:/Org/log.org" org-ask-location) 
    "\n\n** %?\n<%<%Y-%m-%d %a %T>>" 
    :empty-lines 1)) 
相關問題