Org- কাঠামো-টেম্পলেট-তালিকাতে # + BEGIN_ # + END_ ব্যতীত অন্য টেম্পলেটগুলি যুক্ত করা কি সম্ভব?


9

আমি লক্ষ্য করেছি যে org- কাঠামো-টেম্পলেট-এલિস্ট পরিবর্তন হয়েছে (আমি org- মোড সংস্করণ 9.2 ব্যবহার করছি) স্বয়ংক্রিয়ভাবে প্রসারিত করতে #+BEGIN_<some block tag> #+END_<some block tag>। আমি ভাবছি যে এটি বিভিন্ন ধরণের টেম্পলেট যুক্ত করা সম্ভব কিনা। উদাহরণস্বরূপ একটি :PROPERTIES:<some properties>:END:টেম্পলেট।

এটি কি সম্ভব বা আমার ইয়াসনিপেটের মতো অন্য প্যাকেজের দিকে ফিরে যাওয়া উচিত?

উত্তর:


9

হালনাগাদ:

লক্ষ্য করা যায় নি যে অর্গ মোড 9.2 টেম্পলেট প্রসারণের প্রক্রিয়াটি পরিবর্তন করেছে, যেখানে org-structure-template-alistকেবলমাত্র "#+BEGIN_"এবং দ্বারা সংজ্ঞায়িত ব্লকগুলির জন্য "#+END_"। এবং মত এন্ট্রি ("p" ":PROPERTIES:?:END:")আর গ্রহণ করা হয় না।

উপরের লিঙ্কে উল্লিখিত হিসাবে, অন্যান্য "জটিল" টেম্পলেট ফাংশন দ্বারা সংজ্ঞায়িত করা যেতে পারে tempo-define-template, এবং org-টেম্পো লোড করা আবশ্যক ( (require 'org-tempo))। এর আসলে এন্ট্রি org-structure-template-alist রূপান্তরিত হয় org-tempo-tagsমাধ্যমে tempo-define-templateদ্বারা org-tempo, এবং org-tempo-tagsডিফল্টে:

(("<i" . tempo-template-org-index)
 ("<A" . tempo-template-org-ascii)
 ("<H" . tempo-template-org-html)
 ("<L" . tempo-template-org-latex)
 ("<v" . tempo-template-org-verse)
 ("<s" . tempo-template-org-src)
 ("<q" . tempo-template-org-quote)
 ("<l" . tempo-template-org-export-latex)
 ("<h" . tempo-template-org-export-html)
 ("<E" . tempo-template-org-export)
 ("<e" . tempo-template-org-example)
 ("<C" . tempo-template-org-comment)
 ("<c" . tempo-template-org-center)
 ("<a" . tempo-template-org-export-ascii)
 ("<I" . tempo-template-org-include))

আপনার ক্ষেত্রে, আপনি দ্বারা একটি টেমপ্লেট সংজ্ঞায়িত করতে পারেন:

(tempo-define-template "my-property"
               '(":PROPERTIES:" p ":END:" >)
               "<p"
               "Insert a property tempate")

নীচের উত্তরের 9.2 পূর্বের আগে কেবল org মোড সংস্করণের জন্য কাজ করে

হ্যাঁ, আপনি এটিতে এটিতে এন্ট্রি যুক্ত করতে পারেন:

(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))

এরপরে org ফাইলে আপনি টাইপ করুন <pএবং TAB, এটি সম্পত্তিতে প্রসারিত হবে এবং বিন্দুটির অবস্থানে ছেড়ে যাবে ?

এবং আপনি টাইপ করে ভেরিয়েবলের ডকুমেন্টেশনে আরও বিশদ জানতে পারেন C-h v org-structure-template-alist RET


খুব সহায়ক উত্তর, ধন্যবাদ। বিটিডব্লিউ, >প্রতীকটি কি tempo-define-templateটাইপোর? যদি না .... সংজ্ঞায় এর ভূমিকা কী?
ডক্স

1
আনন্দিত এটি সাহায্য করে :) একটি টাইপো নয়, এর অর্থ লাইনটি ইন্টেন্ট করা হবে, tempo-define-templateবিল্ট-ইন ডিফন হয়েছে, বিশদগুলির জন্য ডকাস্ট্রিং দেখুন।
15

2

Org- মোডের কাস্টমাইজেশনে তারা যে ফ্রিকোয়েন্সিটিতে বেমানান পরিবর্তনগুলি প্রবর্তন করে তা সত্যিই দুঃখজনক।

নিম্নলিখিত কোডটি আপনাকে সংস্করণ 9.2 এর আগের সংস্করণ-মোডের পুরানো কাঠামোর টেম্পলেটগুলি দেয়। ফাংশনটি org-complete-expand-structure-template9.1 সংস্করণ থেকে খাঁটি অনুলিপি এবং 9.1 এর একটিটির org-try-structure-completionসামান্য পরিবর্তিত সংস্করণ। (আমি সেখানে একটি টাইপ-চেক যুক্ত করেছি))

এই কোডটি ইনস্টল করার পরে আপনি
(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))
আবার আপনার পুরানো টেম্পলেটটি ব্যবহার করতে পারেন ।

(defvar org-structure-template-alist)

(defun org+-avoid-old-structure-templates (fun &rest args)
  "Call FUN with ARGS with modified `org-structure-template-alist'.
Use a copy of `org-structure-template-alist' with all
old structure templates removed."
  (let ((org-structure-template-alist
     (cl-remove-if
      (lambda (template)
        (null (stringp (cdr template))))
      org-structure-template-alist)))
    (apply fun args)))

(eval-after-load "org"
  '(when (version<= "9.2" (org-version))
     (defun org-try-structure-completion ()
       "Try to complete a structure template before point.
This looks for strings like \"<e\" on an otherwise empty line and
expands them."
       (let ((l (buffer-substring (point-at-bol) (point)))
         a)
     (when (and (looking-at "[ \t]*$")
            (string-match "^[ \t]*<\\([a-zA-Z]+\\)$" l)
            (setq a (assoc (match-string 1 l) org-structure-template-alist))
            (null (stringp (cdr a))))
       (org-complete-expand-structure-template (+ -1 (point-at-bol)
                              (match-beginning 1)) a)
       t)))

     (defun org-complete-expand-structure-template (start cell)
       "Expand a structure template."
       (let ((rpl (nth 1 cell))
         (ind ""))
     (delete-region start (point))
     (when (string-match "\\`[ \t]*#\\+" rpl)
       (cond
        ((bolp))
        ((not (string-match "\\S-" (buffer-substring (point-at-bol) (point))))
         (setq ind (buffer-substring (point-at-bol) (point))))
        (t (newline))))
     (setq start (point))
     (when (string-match "%file" rpl)
       (setq rpl (replace-match
              (concat
               "\""
               (save-match-data
             (abbreviate-file-name (read-file-name "Include file: ")))
               "\"")
              t t rpl)))
     (setq rpl (mapconcat 'identity (split-string rpl "\n")
                  (concat "\n" ind)))
     (insert rpl)
     (when (re-search-backward "\\?" start t) (delete-char 1))))

     (advice-add 'org-tempo-add-templates :around #'org+-avoid-old-structure-templates)

     (add-hook 'org-tab-after-check-for-cycling-hook #'org-try-structure-completion)

     (require 'org-tempo)
     ))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.