org-mode
में Capture-Refile-Archive
तंत्र है। मैं अक्सर नोट्स और लॉग लेने के लिए इसका उपयोग करता हूं। मैं अपनी खुद की शब्दावली बनाने के लिए इसका उपयोग भी करना चाहता हूं। उदाहरण के लिए, जब मुझे कुछ अंग्रेजी पाठ पढ़ने के दौरान कुछ नए शब्दों का सामना करना पड़ता है, तो मैं अपनी शब्दावली फ़ाइल Word-List-EN.org
में शब्द रिकॉर्ड करने के लिए बस C-c c v e
टाइप करना चाहता हूं। मैं यह भी चाहता हूं कि शब्दों को अक्षरों में वर्गीकृत किया गया हो, उदाहरण के लिए, cashew
प्रविष्टि /C/CA
में दर्ज किया जाएगा। मैं जैसी कुछ फ़ाइल में अपना एस्पेरांतो शब्द रिकॉर्ड करने के लिए C-c c v E
टाइप करना चाहता हूं। इसे लागू करने के लिए org-capture-templates
को कॉन्फ़िगर कैसे करें? मैंने संगठन की जानकारी पढ़ी है और अभी भी कोई सुराग नहीं है। मैनुअल का कहना है कि मैं (function function-finding-location)
जैसे कुछ का उपयोग कर सकता हूं। लेकिन मुझे अपना खुद का function-finding-location
परिभाषित करना है। आशा है कि elisp स्वामी मेरी मदद कर सकते हैं!अपनी खुद की शब्दावली बनाने के लिए ऑर्ग-मोड "कैप्चर-रिफाइल" तंत्र का उपयोग कैसे करें?
उत्तर
मुझे कुछ इसी तरह के लिए ऑर्ग कैप्चर करने में बड़ी समस्याएं थीं, लेकिन ऑर्ग-याद अच्छी तरह से काम करती थी। यहाँ मेरी प्रासंगिक .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")
)
)
मुझे लगता है कि PMR तथ्य यह है कि बहुत अपनी आवश्यकताओं के लिए प्रारंभिक चरण में एक टेम्पलेट के हिस्से के रूप में एक फ़ाइल स्थान को चुनने के लिए कार्यों के बारे में सही है।
ऑर्ग कैप्चर रिफाइल वर्कफ़्लो के साथ एकीकृत करने का एक तरीका मानक ऑर्ग कैप्चर टेम्पलेट सिस्टम का उपयोग करना होगा ताकि आपका नया शब्द vocab बफर में फ़ाइल कर सके, फिर एक कस्टम elisp फ़ंक्शन को हुक के रूप में उपयोग करें, शायद ऑर्ग-कैप्चर-पहले- सही स्थान पर नई परिभाषा दर्ज करने के लिए अंतिम रूप-हुक।
मैंने निम्नलिखित फ़ंक्शन को एक नमूना के रूप में लिखा जो एक शब्द और परिभाषा के लिए संकेत देता है और इसे सही जगह पर एक ऑर्ग बफर में डाल देता है। यदि यह आपकी आवश्यकताओं के अनुरूप है तो आप इसे अपनी पसंद की कुंजी से बांध सकते हैं, या इसे हुक दृष्टिकोण के लिए शुरुआती बिंदु के रूप में उपयोग कर सकते हैं।
;;
;; 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)))))
ऐसा लगता है कि 'vocab.org' पहले स्थान पर खाली नहीं होना चाहिए। – Dror
क्या/सी/सीए पेड़ का शीर्षक होना चाहिए या क्या आपका मतलब एक सबलेवल को इंगित करने के लिए एक स्लैश होना चाहिए? – pmr
मुख्य समस्या जो मैं देखता हूं वह यह है: जब आप इसे आमंत्रित करते हैं तो 'org-capture' स्थान पर निर्णय लेता है। इसका मतलब है कि आप उस बिंदु पर उस स्थान का चयन नहीं कर सकते क्योंकि आपने अभी तक शब्द डाला नहीं है (समझ में आता है, नहीं?)। तो, आपको शायद कैप्चर करने के बजाय कस्टम रिफाइल होना चाहिए। बस अपने कब्जे वाले शब्द को सही फ़ाइल ('english.org') पर भेजें और फिर अपने कस्टम रिफाइल का उपयोग करें। – pmr
हां,/सी/सीए का अर्थ है 2-nd सबलेवल, 'सी' के तहत एक प्रविष्टि 'सीए'। – Vivodo