আরও মার্কআপগুলির সাথে org- মোড প্রসারিত করা হচ্ছে


26

আমি এই জাতীয় মার্কআপটির জন্য একটি মার্কআপ এবং ফর্ম্যাটিং যুক্ত করতে চাই, যেমন <kbd>...</kbd>একটি বাক্সের সাথে যেমন মার্কআপকে ঘিরে। আমিও চাই মার্কটি সামঞ্জস্যপূর্ণ হোক (setq org-hide-emphasis-markers t)। এটি হ'ল, যখন ভেরিয়েবলটি সেট করা থাকে t, উপরের নির্দিষ্ট বিন্যাসের সাহায্যে পাঠ্য রেখে এর মধ্যে <kbd>এবং </kbd>ট্যাগগুলি অদৃশ্য হয়ে যায়।

এই প্রশ্নের উত্তরে পোস্ট করা উত্তর: org-মোডে স্থায়ীভাবে পাঠ্যকে কীভাবে হাইলাইট করা যায় তা এই সমস্যার সমাধান করে না , কারণ এটি কেবল বিদ্যমান মার্কআপগুলির জন্য প্রযোজ্য, নতুন মার্কআপগুলির সাথে অর্গকে প্রসারিত না করে।



1
@ কৌশালমোদি আমি কীভাবে একটি চিহ্ন যুক্ত করবেন তা জিজ্ঞাসা করেছি যে যখন ওআরজি এটি দেখবে তখন এটি পাঠ্যের বৈশিষ্ট্যগুলিকে যুক্ত করে এবং এমনভাবে যুক্ত করে যাতে কোনও চিহ্ন কীভাবে কোনও ট্যাগ quicklyোকানো যায় না তা দিয়ে মার্কআপটি আড়াল org-hide-emphasis-markersকরা যায় kbd
তু

1
আমি রাজী. এটি কেবিডি ট্যাগ সম্পর্কিত বলে আমি এটি একটি মন্তব্য হিসাবে রেখেছি।
দক্ষ মোদী

2
org-

1
@ এরিকস্টোকস যে সমাধানটি কেবল বিদ্যমান মার্কআপগুলির জন্য প্রযোজ্য, নতুন নয়।
তু

উত্তর:


25

আমি কিছু কাজ করেছেন অনুরূপ । এটি ফরাসি ভাষায়, তবে কোডটি নিজের পক্ষে বলা উচিত। আমি চিহ্নিতকারীটির জন্য ব্যবহার করি (আমি একটি বেপো লেআউট ব্যবহার করি ), এবং আমি যখন করি, চাপিত বোতামের শৈলী হিসাবে চিহ্নিত পাঠ্য।

আমি লিস্পে সাবলীল নই, সুতরাং উন্নতির জন্য জায়গা থাকতে পারে।

আমি যা করেছি তা হ'ল, চিহ্নিতকারীর জন্য ব্যবহার করার সময় চিহ্নিত পাঠ্যের একটি চাপযুক্ত-বোতামের স্টাইল থাকে এবং যখন রফতানি হয় তখন এটি অনুবাদ করা হয়<kbd>

প্রথমত, আমাকে একটি নতুন মুখ নির্ধারণ করতে হয়েছিল:

(defface my-face-org-keystroke
  '((t (:inherit shadow 
        :box (:line-width -2 ;neg. in order to keep the same size of lines
              :color "grey75"
              :style pressed-button)))) "Face for keystrokes"
        :group 'org-faces)

তারপরে কাস্টমাইজ করুন org-emphasis-alist:

(("*" bold)
 ("/" italic)
 ("_" underline)
 ("=" org-code verbatim)
 ("~" org-verbatim verbatim)
 ("+"
  (:strike-through t))
 ("‰" my-face-org-keystroke verbatim));This line is what you want to add

রফতানির জন্য, আপনার ox.elসাথে লোড করার প্রয়োজন হতে পারে (require 'ox)

তারপরে প্রতিটি সময় boldবা codeকোনও ফাংশনে উপস্থিত (ইন ox-org.el), আমি একটি অনুরূপ ফাংশন তৈরি করেছি (বা বিদ্যমানগুলি সংশোধিত):

;creation
(defun org-html-keystroke (keystroke contents info)
  "Transcode KEYSTROKE from Org to HTML.
CONTENTS is nil.  INFO is a plist holding contextual
information."
  (format (or (cdr (assq 'my-object-keystroke org-html-text-markup-alist)) "%s")
          (org-html-encode-plain-text (org-element-property :value keystroke))))


;creation
(defun org-element-my-object-keystroke-parser ()
  "Parse code object at point.

Return a list whose CAR is `my-object-keystroke' and CDR is a plist with
`:value', `:begin', `:end' and `:post-blank' keywords.

Assume point is at the first tilde marker."
  (interactive)
  (save-excursion
    (unless (bolp) (backward-char 1))
    (looking-at org-emph-re)
    (let ((begin (match-beginning 2))
          (value (org-match-string-no-properties 4))
          (post-blank (progn (goto-char (match-end 2))
                             (skip-chars-forward " \t")))
          (end (point)))
      (list 'my-object-keystroke
            (list :value value
                  :begin begin
                  :end end
                  :post-blank post-blank)))))

;creation
(defun org-element-my-object-keystroke-interpreter (keystroke contents)
  "Interpret KEYSTROKE object as Org syntax.
CONTENTS is nil."
  (format "‰%s‰" (org-element-property :value keystroke)))


;modification
(defconst org-element-object-successor-alist
  '((subscript . sub/superscript) (superscript . sub/superscript)
    (bold . text-markup) (code . text-markup) (italic . text-markup)
    (strike-through . text-markup) (underline . text-markup)
    (verbatim . text-markup) (entity . latex-or-entity)
    (latex-fragment . latex-or-entity) (my-object-keystroke . text-markup))
  "Alist of translations between object type and successor name.
Sharing the same successor comes handy when, for example, the
regexp matching one object can also match the other object.")

;modification
(defconst org-element-all-objects
  '(bold code entity export-snippet footnote-reference inline-babel-call
         inline-src-block italic line-break latex-fragment link macro
         radio-target statistics-cookie strike-through subscript superscript
         table-cell target timestamp underline verbatim my-object-keystroke)
  "Complete list of object types.")


;modification
(defun org-element-text-markup-successor ()
  "Search for the next text-markup object.

Return value is a cons cell whose CAR is a symbol among `bold',
`italic', `underline', `strike-through', `code' and `verbatim'
and CDR is beginning position."
  (save-excursion
    (unless (bolp) (backward-char))
    (when (re-search-forward org-emph-re nil t)
      (let ((marker (match-string 3)))
        (cons (cond
               ((equal marker "*") 'bold)
               ((equal marker "/") 'italic)
               ((equal marker "_") 'underline)
               ((equal marker "+") 'strike-through)
               ((equal marker "~") 'code)
               ((equal marker "=") 'verbatim)
               ((equal marker "‰") 'my-object-keystroke) 
               (t (error "Unknown marker at %d" (match-beginning 3))))
              (match-beginning 2))))))

এরপরে, আমি my-htmlরফতানির জন্য একটি ব্যাকএন্ড সংজ্ঞায়িত করেছি :

(org-export-define-derived-backend 'my-html 'html
  :translate-alist '((my-object-keystroke . org-html-keystroke))
  :menu-entry ' (?h 1
                    ((?r "my-html"  org-html-export-to-my-html))))

(defun org-html-export-to-my-html
  (&optional async subtreep visible-only body-only ext-plist)
  "Export current buffer to a HTML file.

Return output file's name."
  (interactive)
  (let* ((extension (concat "." org-html-extension))
         (file (org-export-output-file-name extension subtreep))
         (org-export-coding-system org-html-coding-system))
    (org-export-to-file 'my-html file
      async subtreep visible-only body-only ext-plist)))


(defun org-html-publish-to-my-html (plist filename pub-dir)
  "Publish an org file to my-html.
Return output file name."
  (org-publish-org-to 'my-html filename
                      (concat "." (or (plist-get plist :html-extension)
                                      org-html-extension "html"))
                      plist pub-dir))

(defun org-html-convert-region-to-my-html ()
  "Assume the current region has org-mode syntax, and convert it to HTML.
This can be used in any buffer.  For example, you can write an
itemized list in org-mode syntax in an HTML buffer and use this
command to convert it."
  (interactive)
  (org-export-replace-region-by 'my-html))

সুতরাং আমি যখন C-c C-e h rএটি ব্যবহার করি তখন এটি সঠিকভাবে রফতানি করা হয়:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

মন্তব্যগুলিতে ওপি দ্বারা প্রস্তাবিত হিসাবে আপনাকে আপনার বাফারটি ব্যবহার করতে org-mode-restart(বা org-reload) মারতে বা পুনরায় লোড করতে হতে পারে ।


সম্পাদনা করুন: এটি 8.3 পূর্ববর্তী সংস্করণগুলির সাথে org- মোডের জন্য কাজ করে (এটি 8.2.10 অবধি)

Versions8.3.1 সংস্করণ সহ, আমাকে সংশোধন করতে হবে

  • সংস্থা-উপাদানের-All-বস্তু
  • সম্ভবত org-عنصر-অবজেক্ট-সীমাবদ্ধতা
  • সংস্থা-উপাদানের - সেট regexps
  • সংস্থা-উপাদানের - অবজেক্ট লেক্স

এবং অবশ্যই এখনও ফাংশন যোগ করুন

  • সংস্থা-উপাদানের-মাই-অবজেক্ট কীস্ট্রোক-পার্সার
  • সংস্থা-উপাদানের-মাই-অবজেক্ট কীস্ট্রোক-ব্যাখ্যাকারী

কিন্তু

  • সংস্থা-উপাদানের-অবজেক্ট উত্তরাধিকারী-alist
  • সংস্থা-উপাদানের টেক্সট-মার্কআপ-উত্তরাধিকারী

এখন মুছে ফেলা হয়।

চার্লস সি বেরি তার সাহায্যের জন্য ধন্যবাদ ।


%চিহ্নিতকারী কি একটি অন্তর্নির্মিত? আমি সর্বশেষতম আরগের সাথে এটি কাজ করতে পারি না। অন্যান্য চিহ্নিতকারীদের হিসাবে, আমি যদি তাদের মুখ পরিবর্তন করি তবে এটি ঠিক আছে। কিন্তু সত্যই কি আমাদের নিজস্ব চিহ্নিতকারী যুক্ত করার উপায় আছে? তবুও, আপনার উত্তর দরকারী useful
তু দো

%বর্তমানে চিহ্নিতকারী হিসাবে ব্যবহৃত হয় না। আমি এটি যেভাবে ব্যবহার করেছি ঠিক তেমনভাবে এটি ব্যবহার করতে পারেন । আমি আপনার দ্বিতীয় প্রশ্নটি বুঝতে পারি না, এটি একটি নতুন মার্কার।
ফ্রেডট্যান্টিনি

ঠিক আছে, আমি %চিহ্নিতকারীকে কাজ করতে সক্ষম করেছিলাম , তবে আমাকে চালাতে হয়েছিল org-reload। আপনার এই আদেশটি দিয়ে উত্তরটি আপডেট করা উচিত।
তু দো

আসলে আমাদের দরকার org-reloadনেই org-mode-restart। জিনিসটি হ'ল, আমাদের অবশ্যই পূর্ববর্তী অর্গ বাফারটি মেরে ফেলতে হবে এবং পরিবর্তনটি কার্যকর হওয়ার জন্য একটি নতুন তৈরি করতে হবে।
টু দো

টিপস জন্য ধন্যবাদ। আমি আমার উত্তর আপডেট করেছি। খুশি আমি সাহায্য করতে পারি
ফ্রেডট্যান্টিনি

0

আমি মনে করি না নতুন org- মোড মার্কআপ বিকল্পগুলির জন্য চিহ্নিতকারী যুক্ত করা সম্ভব।

এই 2012 পোস্ট অনুসারে এটি org- মোডের "জোর দিয়ে চিহ্নিতকারীগুলি হার্ড-কোডেড হবে" বলে মনে হচ্ছে। জন্য একটি দ্রুত অনুসন্ধান করার সময় org-emph-reমধ্যে org.elকোন কোড যে আসলে উৎপন্ন হবে ভাগাভাগি করে না org-emph-reথেকে org-emphasis-alist। এর উপর ভিত্তি করে দেখে মনে হচ্ছে org-emph-reআপনার যুক্ত করা কোনও কিছুই অনুসন্ধান করবে না org-emphasis-alist

এই সামঞ্জস্যপূর্ণ আমার অভিজ্ঞতার সঙ্গে (আমি বিদ্যমান জোর চিহ্নিতকারী পুনরায় সংজ্ঞায়িত করতে পারছি, কিন্তু চিনতে পেতে পারে সংস্থা-মোডে |বা &বা H)।

যদিও আমি এখানে বিশেষজ্ঞ নই, এবং আমি ভুল বুঝতে পারি যে :)


1
কেবল সম্পাদনা org-emphasis-alistকোনও নতুন চিহ্নিতকারী যুক্ত করবে না। আপনাকে অতিরিক্তভাবে কাজ করতে org-font-lock-extra-keywordsহবে। এই উত্তরটি একটি কার্যক্ষম সমাধান দেয়।
ডিন সিও

আরে, যে কাজ করে! অন্তত, যে একই প্রভাব অর্জন! :) যখন তখন কেউ ব্যবহার করে org-font-lock-extra-keywordsতখন একেবারেই পরিবর্তন org-emphasis-alistকরার দরকার নেই , স্পষ্টতই (আমি org-font-lock...কোডটি যুক্ত করেছি তবে আমার পরিবর্তন হয়নি org-emphasis-alistএবং এখন জিনিসগুলি ফরম্যাট করা হচ্ছে)
মাইক দ্য টটল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.