থিম অনুযায়ী org- রফতানি <কোড> ব্লকগুলির ব্যাকগ্রাউন্ড সেট করুন


24

আমি প্রায়শই org- মোড ফাইল রফতানি করি এবং প্রায় সকলেরই কোড থাকে। আমি যখন রফতানি কোড করি, তখন এটি আমার থিমের উপর নির্ভর করে পাঠ্যটি রঙ করা শেষ করে, তবে আমি নিয়মিত একটি গা dark় থিম এবং হালকা থিমের মধ্যে স্যুইচ করি। হালকা থিমের ক্ষেত্রে, <code>ব্লকগুলির হালকা ব্যাকগ্রাউন্ড হওয়া দরকার এবং একটি অন্ধকার থিমের জন্য তাদের একটি গা dark় পটভূমি থাকা প্রয়োজন (অন্যথায় আমি হালকা হালকা রঙের পটভূমিতে হালকা হলুদ লেখাটি শেষ করি এবং এটি অপঠনযোগ্য)।

অন্ধকার ব্যাকগ্রাউন্ডের জন্য আমাকে এই লাইনটি যুক্ত করতে হবে:

#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>

এবং তারপরে আমি যখনই হালকা রঙিন পটভূমিতে স্যুইচ করি তখন এটিকে সরাতে মনে রাখবেন

রফতানির সময় আমি বর্তমান থিমের পটভূমি রঙটি স্বয়ংক্রিয়ভাবে সনাক্ত করতে এবং এটি রফতানি হওয়া এইচটিএমএল এর সিএসএসে ব্যবহার করতে পারি এমন কোনও উপায় আছে কি?

সম্পাদনা

আমি জর্ডনের জবাবটি দিয়ে যাচ্ছি (ধন্যবাদ জর্ডন, আপনি কর্ম পয়েন্ট পেয়েছেন!) তবে আমি আমার কোডটি যুক্ত করে শেষ হওয়া সমাধানটি পোস্ট করতে চেয়েছিলাম, কারণ এটি তার উত্তরের সামান্য পরিবর্তিত সংস্করণ ছিল:

(defun my/org-inline-css-hook (exporter)
  "Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
  (when (eq exporter 'html)
    (let* ((my-pre-bg (face-background 'default))
           (my-pre-fg (face-foreground 'default)))
      (setq
       org-html-head-extra
       (concat
        org-html-head-extra
        (format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
                my-pre-bg my-pre-fg))))))

(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)

এটি কেবল পটভূমির রঙই নয়, অগ্রভাগের রঙটিও সেট করে। এটি বিদ্যমান org-html-head-extraসেটিংটিতে লাইনটি সংযোজন করে যাতে অন্য এইচটিএমএলটি দুর্ঘটনাক্রমে ওভাররাইট করা যায় না। আমি পরীক্ষা করেছি এবং এটি আমার পক্ষে দুর্দান্ত কাজ করে!


1
আমি নিশ্চিত যে একটি উপায় আছে তবে রফতানির সময় সর্বদা একই থিমটি প্রয়োগ করা কি ভাল না হয়? অথবা আপনি ইচ্ছাকৃতভাবে বিভিন্ন থিম সহ রফতানি করবেন?
মালবারবা

@ মালবারবা উদ্দেশ্যটি হ'ল আমি বর্তমানে কোন থিমটি ব্যবহার করছি তা রফতানি করতে সক্ষম হবে এবং কোডটি পাঠযোগ্য হবে। যেহেতু অনেকগুলি থিম পরিষ্কারভাবে স্যুইচ করে না (এমনকি এটিও disable-theme), তাই আমি কেবল HTML রফতানি করার জন্য একটি পৃথক থিম সহ পুনরায় আরম্ভ করতে চাই না, যা আমি দিনে অনেকবার করি।
লি এইচ

1
যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনার বর্তমান সেটআপটি ইতিমধ্যে কোড ব্লকগুলিতে থিমের রঙগুলি ব্যবহার করে এবং আপনার যে সমস্যাটি হচ্ছে তা হ'ল থিমটির ব্যাকগ্রাউন্ড ব্যবহার করা হয়নি। যদি আমার এটি ভুল হয়ে থাকে তবে দয়া করে আপনার শিরোনামে আমি সম্পাদনাটি রোলব্যাক করে নির্দ্বিধায় অনুভব করুন।
মালবারবা

@ মালবারবা আমার বর্তমান সেটআপটি কোড ব্লকের পটভূমির রঙ নির্দিষ্ট করে না (যদিও আমি সিএসএসে একটি পটভূমির রঙকে হার্ড-কোড করতে পারি যদি তা সাহায্য করে)। Org- মোড কোড ব্লকগুলির জন্য থিমের ব্যাকগ্রাউন্ড রঙটি ব্যবহার করতে চাই। নতুন শিরোনাম আমার জন্য কাজ করে।
লি এইচ

উপরের সমাধানটি নিয়ে দুটি সমস্যা রয়েছে। প্রথমত, 'গ্রে 80' এর মতো রঙগুলি সিএসএস মানগুলিতে সঠিকভাবে অনুবাদ হবে না এবং সেট হবে না। দ্বিতীয়ত, প্রতিবার রফতানি চলতে থাকে, এতে org-html-head-extraযুক্ত হয়ে যায়, সীমাহীন বৃদ্ধির দিকে পরিচালিত করে, যদিও শৈলীর কার্যকারিতা ক্ষতিগ্রস্থ হবে না।
আরপি ডিলন

উত্তর:


10

প্রথমত, আমি বিশ্বাস করি org htmlizeআপনার থিম অনুসারে আপনার উত্স কোড ব্লকগুলিকে স্বয়ংক্রিয়ভাবে রঙ করতে পারে ।

বিকল্পভাবে।

পরীক্ষা করে দেখুন http://definitelyaplug.b0.cx/post/custom-inlined-css-in-org-mode-html-export/org-export-before-processing-hookএইচটিএমএল রফতানির আগে একটি org ডকুমেন্টে কাস্টম সিএসএস নিক্ষেপ করতে কীভাবে এটি ব্যবহার করবেন তার দুর্দান্ত উদাহরণ রয়েছে ।

সাইটটি নীচে নেওয়ার ক্ষেত্রে কোডটি এখানে:

এখানে এইচটিএমএল রফতানিতে org বর্তমান ডিরেক্টরিতে স্টাইলস.এসএস নামে একটি ফাইল বা .emacs.d ডিরেক্টরিতে একটি ডিফল্ট ফাইল সন্ধান করবে এবং নথিতে সেই সিএসএস ইনজেক্ট করবে। এটি দুর্দান্ত তবে আপনার ব্যবহারের ক্ষেত্রে উপযুক্ত নয়।

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let* ((dir (ignore-errors (file-name-directory (buffer-file-name))))
           (path (concat dir "style.css"))
           (homestyle (or (null dir) (null (file-exists-p path))))
           (final (if homestyle "~/.emacs.d/org-style.css" path)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head (concat
                           "<style type=\"text/css\">\n"
                           "<!--/*--><![CDATA[/*><!--*/\n"
                           (with-temp-buffer
                             (insert-file-contents final)
                             (buffer-string))
                           "/*]]>*/-->\n"
                           "</style>\n")))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

আপনি এটি কীভাবে চান তা কার্যকর করার জন্য আপনি এটি কয়েকটি উপায়ে কাস্টমাইজ করতে পারেন।

একটি উপায় হ'ল আপনার থিমের উপর ভিত্তি করে সিএসএস ম্যানুয়ালি তৈরি করা এবং এটি sertোকানো।

এখানে একটি পরিবর্তিত সংস্করণ যা pre.srcডিফল্ট মুখগুলির হেক্স মানটির পটভূমি সেট করে : ব্যাকগ্রাউন্ড সম্পত্তি।

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let ((my-pre-bg (face-background 'default)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head
            (format "<style type=\"text/css\">\n pre.src { background-color: %s;}</style>\n" my-pre-bg)))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

1
ধন্যবাদ জর্ডন, এটি দুর্দান্ত! আমি আমার সামান্য সম্পাদিত সংস্করণ দিয়ে আমার মূল প্রশ্নটি আপডেট করেছি তবে আপনি অনুগ্রহ এবং সমাধান পান!
লি এইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.