2012-11-25 12 views
9

org-mode, Capture-Refile-Archive mekanizmasına sahiptir. Notları ve günlükleri almak için sık sık kullanırım. Ayrıca kendi kelime bilgimi oluşturmak için kullanmak istiyorum. Örneğin, bazı ingilizce metinleri okurken bazı yeni kelimelerle karşılaştığımda, sözcükleri kelime dosyama Word-List-EN.org içine kaydetmek için sadece C-c c v e yazmak istiyorum. Ayrıca bu kelimelerin Harflere göre kategorize edilmesini istiyorum, örneğin , /C/CA numaralı girişe kaydedilecektir. Esperanto sözcüklerimi vortaro.org gibi bir dosyaya kaydetmek için C-c c v E'u yazmak istiyorum. Bunu uygulamak için org-capture-templates nasıl yapılandırılır? Organizasyon bilgilerini okudum ve hala bir ipucu yok. Kılavuz, (function function-finding-location) gibi bir şey kullanabileceğimi söylüyor. Ama kendi function-finding-location'u tanımlamalıyım. Umut elisp ustaları bana yardım edebilir!Kendi kelime dağarcığı oluşturmak için org modu "yakalama rafine" mekanizması nasıl kullanılır?

+0

Ağacın başlığı//// olmalıdır, yoksa bir alt seviyeyi göstermek için eğik çizgi mi? – pmr

+1

Gördüğüm en büyük sorun şudur: "org-capture", bunu çağırdığınızda bulunduğunuz yere karar verir. Bu, o noktadaki yeri seçemeyeceğiniz anlamına gelir, çünkü bu kelimeyi henüz eklemediniz (mantıklı, hayır mı?). Yani, muhtemelen yakalama yerine özel bir rafa sahip olmalısınız. Sadece yakaladığınız kelimeyi doğru dosyaya ('english.org') gönderin ve ardından özel rafini kullanın. – pmr

+0

Evet,/C/CA, 2-nd sublevel, 'C'' C' altında bir giriş anlamına gelir. – Vivodo

cevap

1

Benzer bir şey için org-capture yakalama konusunda çok büyük problemlerim vardı, ama org-remember iyi çalıştı. İşte benim alakalı .emacs bit var:

(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

Ben pmr şablon parçası olarak bir dosya konumu seçmek için fonksiyonları çok erken ihtiyaçlarınız için gerçekleşmesi gerçeğine konusunda haklı olduğunu düşünüyorum.

Yakalama rafine iş akışına entegre olmanın bir yolu, standart sözcük yakalama şablonu sistemini kullanarak yeni kelimenizi kelime haznesi arabelleğine kopyalamak, ardından özel bir elisp işlevini kanca olarak kullanmak, muhtemelen daha önce yakalama Yeni tanımı doğru konuma yerleştirmek için sonlandırmak

Bir sözcük ve tanım isteyen ve onu doğru yerde bir org arabelleğine ekleyen bir örnek olarak aşağıdaki işlevi yazdım. İhtiyaçlarınıza uyuyorsa, bunu seçtiğiniz bir anahtara bağlayabilir veya kanca yaklaşımı için bir başlangıç ​​noktası olarak kullanabilirsiniz.

;; 
;; 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

Görünüşe göre 'vocab.org' ilk etapta boş olmamalı. – Dror