অর্গমোড ফাইলটি খুললে আমি কীভাবে মূল্যায়ন করতে পারি?


13

আমার এলিজপ কোড রয়েছে আমি লোড করার সময় অরগমোড ফাইলগুলিতে চালাতে চাই (বিভিন্ন ফাইলের জন্য পৃথক, এবং নিজেই ফাইলটিতে সংজ্ঞায়িত)। এই কাজ করতে একটি উপায় আছে কি? আমি http://orgmode.org/manual/In_002dbuffer-settings.html তে কিছুই দেখতে পেলাম না

যদি আমি ইমাস ইনিশিয়ালেশনে এমন কিছু যুক্ত করতে পারি যা একটি অর্গমোড ফাইল লোড হয় তখন একটি বিশেষভাবে নামযুক্ত কোড ব্লক চালায়, এটি সমাধান হতে পারে, তবে আমি কীভাবে এটি করব তা নিশ্চিত নই এবং আদর্শভাবে সেখানে কিছু অন্তর্নির্মিত আছে।


1
ফাইল-লোকাল ভেরিয়েবল, সম্ভবত?
ড্যান

ওই কাজগুলো! আপনি কি এমন উত্তর দিতে চান যা আমি গ্রহণ করতে পারি?
এভিভি

আরও ভাবার বিষয়ে যে এডিট করার জন্য খুব অগোছালো পরিবেশ, সুতরাং একটি ভাল সমাধানে ফাইল স্থানীয় ভেরিয়েবলের একটি নামকৃত ব্লক চলবে।
অ্যাভিভি

এটি একটি অগ্রণী বা একটি ল্যাম্বডায় মোড়ানো, সম্ভবত?
ড্যান

3
আপনি এটি ব্যবহার করতে পারেন # -*- eval: (lisp code here) -*-তবে বিপদগুলি সম্পর্কে আপনাকে সচেতন হতে হবে। এমনকি আপনি যদি অন্য কারও সাথে এই নথিগুলি ভাগ না করেন তবে ইমাস লিস্পের ব্যাখ্যা করা প্রকৃতির অর্থ হ'ল পরিবর্তনের ফলে ঘটনাক্রমে ডেটা হারাতে পারে। এছাড়াও, যদি আপনি একাধিক ফাইলের জন্য একই কোডটি চালাতে চান তবে মোড হুক আরও ভাল বিকল্প বলে মনে হচ্ছে।
wvxvw

উত্তর:


9

এই সমাধানটির কোনও পরিবর্তন init.el(ছোটখাট পরিবর্তন সহ) দরকার নেই । এর মধ্যে ফাইল-স্থানীয় মূল্যায়ন জড়িত - তবে ওপি যা চেয়েছিল ঠিক তাই। সমাধানের সুবিধাগুলি হ'ল:

  • কোডটি মূল্যায়নের জন্য নিশ্চিতকরণের জন্য জিজ্ঞাসা করে
  • এলিএসপ কোডটি org-বাবেল পরিবেশের মধ্যে সম্পাদিত ও পরীক্ষা করা যেতে পারে
  • সমাধানটি init.elorgmode ফাইলটিতে পরিবর্তনের প্রয়োজন হয় না কারণ (বিশ্বস্ত) ব্যবহারকারীদের মধ্যে ভাগ করা যেতে পারে

আমি সমাধানটি এখানে পুনরায় চাপিয়ে দিচ্ছি।

আপনার ফাইলের কোথাও একটি সিআরসি-ব্লক যুক্ত করুন:

#+NAME: startup
#+BEGIN_SRC emacs-lisp
(your-code-here)
#+END_SRC

তারপরে, এটি আপনার অরগমোড-ফাইলের শেষে রাখুন:

# Local Variables:
# eval: (progn (org-babel-goto-named-src-block "startup") (org-babel-execute-src-block) (outline-hide-sublevels 1))
# End:

আমি যুক্ত করেছি (outline-hide-sublevels 1)কারণ আমি শিরোনামের ভিতরে এসআরসি-ব্লকটি আড়াল করতে চাই এবং শুরুতে সাবলেভেলগুলি লুকিয়ে রাখতে চাই hidden এই বিবৃতি ব্যতীত, sublevels দ্বারা প্রসারিত হবে (org-babel-goto-named-src-block "startup")

এই সমাধানের সাহায্যে ইমাকগুলি কার্যকর করার জন্য 2 বার জিজ্ঞাসা করবে (1 ম: স্থানীয় ভেরিয়েবল প্রয়োগ করুন; 2 য়: "স্টার্টআপ" -এসসিআর-ব্লক কার্যকর করুন)। আমার ফাইলে যেহেতু অনেকগুলি সিআরসি-ব্লক রয়েছে, আমি অন্য একটি ফাইল-লোকাল-ভেরিয়েবল সেট করেছি org-confirm-babel-evaluate, যেমন:

# Local Variables:
# org-confirm-babel-evaluate: nil
# eval: (progn (org-babel-goto-named-src-block "startup") (org-babel-execute-src-block) (outline-hide-sublevels 1))
# End:

সতর্কতা: এই সংযোজনের সাথে, ইম্যাকগুলি কেবল একবার মৃত্যুদন্ড কার্যকর করার অনুমতি চেয়ে জিজ্ঞাসা করবে - সেই ফাইলের সমস্ত এসসিআর-ব্লক এখন আরও নিশ্চিতকরণ ছাড়াই কার্যকর করা হতে পারে। অন্যরা যেমন আগে উল্লেখ করেছে, এই আচরণটি বিপজ্জনক হতে পারে এবং আপনার এই সেটিংটি সম্পর্কে খুব সতর্ক হওয়া উচিত।

যাইহোক, আমি যুক্তি দিয়েছি যে জো কার্নেলির দেওয়া সমাধানের চেয়ে এই সমাধানটি (বিশেষত প্রথম সংস্করণ) আরও সুরক্ষিত কারণ কমপক্ষে আপনাকে সম্পাদন করার জন্য নিশ্চিতকরণের জন্য বলা হবে । জো এর সমাধানটি যদি ফাইলটিতে পাওয়া যায় তবে তা নিশ্চিত না করেই বিশেষ ব্লকের মূল্যায়ন করবে। একজন আক্রমণকারীকে অবশ্যই বিশেষ ব্লকের নামটি অনুমান করতে হবে, অবশ্যই ...

আমি এই পদ্ধতিকে বড় ডকুমেন্টগুলি লিখতে ব্যবহার করছি যা যেমন org- এক্সপোর্ট পদ্ধতিতে অভিযোজন প্রয়োজন।


5

org-mode... এর প্যারেন্ট মোডটি outline-modeচালাতে পারে এমন কোনও হুক ছাড়াও , এই মোডটি হুকটি চালায় org-mode-hook, আরম্ভের সময় চূড়ান্ত পদক্ষেপ হিসাবে।

সুতরাং, আপনার init.el এ:

(defun function-that-finds-and-evaluates-special-block ()
;; DWIM :-)
)
(add-hook 'org-mode-hook 'function-that-finds-and-evaluates-special-block)

এটি এই কাজের জন্য আমার কাছে ফাইল-স্থানীয় বারের চেয়ে বেশি যুক্তিসঙ্গত মনে হয়। তবে সম্ভবত আমি কিছু মিস করছি।
ড্র

@ জো কর্নেলি এবং তারপরে আপনি প্রকৃত org ফাইলটিতে কী রাখবেন?
ভাস্বরত্ববিদ

"বিশেষ ব্লক" ব্যতীত বিশেষ কিছুই নয়।
জো কর্নেলি

3

যেহেতু আপনি চাইছেন

(বিভিন্ন ফাইলের জন্য পৃথক, এবং নিজেই ফাইলটিতে সংজ্ঞায়িত)

তারপরে, এই সমাধানটি চেষ্টা করে দেখুন ।


কেন ডাউন ভোট কেন তা বোঝাতে যত্নবান?
ইমাস ব্যবহারকারী

এর কারণ যে উত্তরগুলি কেবলমাত্র অন্য উত্তরের লিঙ্ক, নিরুৎসাহিত করা হয়। বলা হচ্ছে, সম্ভবত এই প্রশ্নটি আপনি যার সাথে লিঙ্ক করেছেন তার একটি অর্থ?
লিনাস আরভার

1

আমি @ জো কার্নেলির হুক ব্যবহারের পরামর্শের সাথে একমত।

আমার কাছে এটিও ঘটে যে আপনি এখানে বুকমার্কগুলি উপার্জন করতে পারেন: একটি নির্দিষ্ট বুকমার্ক হুকের উপরে রেখে দিন। কোড ব্লকে একটি বুকমার্কের সুবিধা হ'ল এটি সাধারণত স্বয়ংক্রিয়ভাবে স্থানান্তরিত হয় (যেমন ফাইলের সামগ্রী পরিবর্তন হিসাবে), তাই ব্লকটি সনাক্ত করা সাধারণত স্বয়ংক্রিয়ভাবে যত্ন নেওয়া উচিত।

[তবে অন্য কোথাও পরিবর্তে অরগ-মোড ফাইলগুলিতে আপনার কোডটি কেন রয়েছে তা আমার কাছে পরিষ্কার নয়। আমরা সমস্যার বিবৃতি অনুযায়ী একটি প্রদত্ত হিসাবে এটি নিচ্ছি, তবে আপনি কেন এমনটি করছেন তা অবাক করি। আমাদের সম্মানের নকশা সম্পর্কে আরও জানানো আরও ভাল সহায়তা হতে পারে]]


0

আমি জো কার্নেলি থেকে কোডটি উন্নত করার চেষ্টা করেছি:

আপনার init.el ফাইলটিতে এটি আপনার দরকার:

  (defun tdh/eval-startblock ()
    (if (member "startblock" (org-babel-src-block-names))
      (save-excursion
        (org-babel-goto-named-src-block "startblock")
        (org-babel-execute-src-block))
      nil
      )
    )
  (add-hook 'org-mode-hook 'tdh/eval-startblock)

প্রতিবার আপনি যখন একটি org- মোড বাফারটি খুলবেন, এটি স্টার্টব্লক নামে একটি উত্স ব্লক অনুসন্ধান করবে, যদি এটি পাওয়া যায় তবে এটি কার্যকর করে দেবে।

আপনার org- মোড ফাইলগুলিতে, আপনি এটি পরে রাখতে পারেন:

#+NAME: startblock
#+BEGIN_SRC emacs-lisp
  ;; Any code you want
#+END_SRC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.