2012-11-25 7 views
9

org-modeは、Capture-Refile-Archive機構を有する。私はしばしばメモやログを取るためにそれを使用します。私は自分の語彙を作るためにそれを使いたいと思っています。たとえば、いくつかの英語のテキストを読んでいるときにいくつかの新しい単語が出現すると、C-c c v eと入力して単語を私の語彙ファイルWord-List-EN.orgに記録します。また、その単語が「Letters」に分類されることを願っています。例えば、cashewは、/C/CAというエントリーに記録されます。 C-c c v Eと入力して、私のエスペラント語をvortaro.orgのようなファイルに記録します。これを実装するにはorg-capture-templatesを設定するには?私はorg-infoを読んだが、まだ手掛かりはない。マニュアルには(function function-finding-location)のようなものを使用できると書かれています。しかし私は自分自身を定義する必要がありますfunction-finding-location。ホープelispのマスターが私を助けることができる!org-mode "capture-refile"メカニズムを使って自分の語彙を構築する方法は?

+0

「/ C/CA」はツリーの見出しであるべきですか、またはサブレベルを示すにはスラッシュを意味しますか? – pmr

+1

私が見ている主な問題はこれです: 'org-capture'はあなたがそれを呼び出すときに場所を決めます。つまり、まだ単語を挿入していないので、その時点でその場所を選択することはできません(意味がありますか?)。ですから、キャプチャではなくカスタムの再フォーマットが必要です。キャプチャした単語を適切なファイル( 'english.org')に送信してから、あなたのカスタムファイルを使用してください。 – pmr

+0

はい、/ C/CAは2番目のサブレベルを意味し、 'C 'の下にはエントリ' CA 'を意味します。 – Vivodo

答えて

1

私は似たようなもののためにorg-captureを取得するのに大きな問題がありましたが、org-rememberはよく働いていました。ここに私の関連の.emacsビットです:

(require 'org-install) 
(setq org-directory "~/.orgfiles/") 
(setq org-default-notes-file (expand-file-name "~/.orgfiles/notes.org")) 
(setq remember-annotation-functions '(org-remember-annotation)) 
(setq remember-handler-functions '(org-remember-handler)) 
(add-hook 'remember-mode-hook 'org-remember-apply-template) 
(setq org-agenda-files '("~/.orgfiles")) 
(global-set-key "\C-cl" 'org-store-link) 
(global-set-key "\C-cc" 'org-remember) 
(global-set-key "\C-ca" 'org-agenda) 
(global-set-key "\C-cb" 'org-iswitchb) 
(setq org-remember-templates 
     '(("Todo" ?t "* TODO %^{Brief Description} %^g\n%? Added: %U" "~/.orgfiles/TODO.org" "Tasks") 
    ("Idea" ?i "* %^{Brief Description} %^g\n%? Added: %U" "~/.orgfiles/Idea.org" "Ideas") 
    ("Study" ?s "* %^{Brief Description} %^g\n%? Added: %U" "~/.orgfiles/Study.org" "Study") 
    ("Receipt" ?r "** %^{Brief Description} %U %^g\n%?" "~/.orgfiles/Receipt.org") 
    ) 
) 
4

私はPMRは、テンプレートの一部としてファイルの場所を選択するための機能があまりにも早くあなたのニーズに起こるという事実について正しいと思います。

orgキャプチャのリフレッシュワークフローと統合する1つの方法は、標準のorgキャプチャテンプレートシステムを使用して新しい単語をvocabバッファに保存し、カスタムelisp関数をフックとして使用することです。おそらく、org-capture-before- finalize-hookを実行して、新しい定義を正しい場所に保存します。

単語と定義の入力を促し、正しい場所のorgバッファーに挿入するサンプルとして、次の関数を書きました。あなたのニーズに合っている場合は、これをあなたの選択したキーにバインドするか、フックアプローチの出発点として使用します。

;; 
;; remove extra spaces between stars and the headline text 
;; 
(defun tidy-headlines() 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (while (re-search-forward "^\\*+\\([[:space:]][[:space:]]+\\)" (point-max) t) 
     (replace-match " " nil nil nil 1)))) 

;; 
;; function for storing things in vocab files like cashew /C/CA/Cashew 
;; 
(defun insert-vocab-word (vocab-word definition) 
    "prompts for a word then opens a vocab file and puts the word in place" 
    (interactive "sWord: \nsDefinition: ") 
    (find-file "~/org/vocab.org") 
    (tidy-headlines) 
    (goto-char (point-min)) 
    (let* ((first-char (upcase (substring vocab-word 0 1))) 
     (first-two-chars (upcase (substring vocab-word 0 2)))) 
    (while (and (re-search-forward "^\\* " (point-max) t) 
       (string< (buffer-substring-no-properties (point) (+ 1 (point))) first-char))) 
    (if (string= (buffer-substring-no-properties (point) (+ 1 (point))) first-char) 
     (let* ((end-of-subtree (save-excursion (org-end-of-subtree) (point)))) 
      (while (and (re-search-forward "^\\*\\* " end-of-subtree t) 
        (string< (buffer-substring-no-properties (point) (+ 2 (point))) first-two-chars))) 
      (if (string= (buffer-substring-no-properties (point) (+ 2 (point))) first-two-chars) 
       (let* ((end-of-subtree2 (save-excursion (org-end-of-subtree) (point)))) 
       (while (and (re-search-forward "^\\*\\*\\* " end-of-subtree2 t) 
          (string< (word-at-point) vocab-word))) 
       (if (string< vocab-word (word-at-point)) 
        (progn 
         (beginning-of-line) 
         (org-insert-heading t)) 
        (org-insert-heading-after-current)) 
       (insert vocab-word) 
       (org-insert-subheading t) 
       (insert definition)) 
      (progn 
       (if (string< first-two-chars (buffer-substring-no-properties (point) (+ 2 (point)))) 
        (progn 
        (beginning-of-line) 
        (org-insert-heading t)) 
       (org-insert-heading-after-current)) 
       (insert first-two-chars) 
       (org-insert-subheading t) 
       (insert vocab-word) 
       (org-insert-subheading t) 
       (insert definition)))) 
     (progn 
     (org-insert-heading-after-current) 
     (insert first-char) 
     (org-insert-subheading t) 
     (insert first-two-chars) 
     (org-insert-subheading t) 
     (insert vocab-word) 
     (org-insert-subheading t) 
     (insert definition))))) 
+0

「vocab.org」は最初は空ではないはずです。 – Dror

関連する問題