ऑर्ग-मोड स्रोत कोड ब्लॉक को टॉगल कैसे करें: "eval no" स्थिति


9

मैं अक्सर :evalहेडर तर्क का उपयोग करते हुए org- मोड बेबल में विशिष्ट कोड ब्लॉक के मूल्यांकन को सीमित या अनलिमट करता हूं ।

यहाँ एक उदाहरण है:

#+BEGIN_SRC emacs-lisp :results value scalar :eval no
(+ 1 1)
#+END_SRC

#+RESULTS:
: 2

मैं हाथ के बीच :eval noऔर :eval n(या :eval noपूरी तरह से हटाने ) के बीच कोड ब्लॉक टॉगल करता हूं ।

#+PROPERTY: eval no सुविधाजनक है, लेकिन प्रत्येक कोड ब्लॉक के लिए अनुकूल नहीं है।

क्या :evalनीचे की तरह स्थिति को आसान बनाने के लिए कोई बेहतर तरीका है ?

C-c C-t     (org-todo)
Rotate the TODO state of the current item among
(unmarked) -> TODO -> DONE

जवाबों:


7

मैं एक अपेक्षाकृत अच्छा समाधान के साथ आया हूं, जो org-in-block-pफ़ंक्शन पर निर्भर करता है , जिसे मैं एक बार देखने की सलाह दूंगा। निम्न कोड को आप init.elफ़ाइल में जोड़ें :

(defun org-toggle-src-eval-no ()
  "Will toggle ':eval no' on the src block begin line"

  (defun in-src-block-p ()
    "Returns t when the point is inside a source code block"
    (string= "src" (org-in-block-p '("src"))))

  (defun beginning-src ()
    "Find the beginning of the src block"
    (let ((case-fold-search t)) (search-backward "#+BEGIN_SRC")))

  (defun toggle-eval-no ()
    "Handles the toggling of ' :eval no'"
     (save-excursion
      (end-of-line)
      (let ((case-fold-search t)) (search-backward "#+BEGIN_SRC")
       (if (search-forward " :eval no" (line-end-position) "f")
           (replace-match "")
         (insert " :eval no")
         ))))

  (if (in-src-block-p) (toggle-eval-no)))

(defun add-org-toggle-src-key ()
  (local-set-key (kbd "C-c t") (lambda () (interactive) (org-toggle-src-eval-no))))

(add-hook 'org-mode-hook 'add-org-toggle-src-key)

यह फ़ंक्शन को परिभाषित करता है org-toggle-src-eval-noऔर इसे वही करना चाहिए जो आप चाहते हैं; किसी भी समय आप एक कोड ब्लॉक के अंदर हैं, यह उपस्थिति को टॉगल करेगा :eval no। मैंने इसे करने के लिए बाध्य किया है C-c t, लेकिन जो कुछ भी आप चाहते हैं, उसे मैप करने के लिए स्वतंत्र महसूस करें। हैप्पी ऑर्ग-इंग।


1
गजब का! यह वास्तव में बहुत अच्छा है! जैसा मुझे चाहिए था यह बिल्कुल वैसा ही है! मुझे इतनी जल्दी समाधान मिलने की उम्मीद नहीं थी। इस बीच मैंने सिर्फ एक तुच्छ चीज पर ध्यान दिया। जब मेरे पास 2 कोड ब्लॉक होते हैं, अगर मैं दूसरे # + BEGIN_SRC ब्लॉक की एक पंक्ति की शुरुआत में Cc t करता हूं, तो पहला कोड ब्लॉक टॉगल हो जाता है। शायद दोनों (खोज-पिछड़े "# + BEGIN_SRC") से पहले मुझे (मूव-एंड-ऑफ-लाइन नील) जोड़ना चाहिए?
RUserPassingBy

1
बहुत बढ़िया बिंदु। मैंने (end-of-line)खोज से पहले शामिल करने के लिए अपने उत्तर को अपडेट कर दिया है , जो इस बिंदु के अंत में जाता है #+BEGIN_SRCयदि आप इससे पहले हैं (बिना किसी अन्य कार्यक्षमता को सीमित किए)। अगर आपको अभी भी समस्या हो रही है तो मुझे बताएं।
GJStein

मैं आपके कोड के लिए धन्यवाद! यह वास्तव में बहुत अच्छा है!!
RUserPassingBy

बहुत बहुत धन्यवाद। लंबे समय से इस तरह की कार्यक्षमता की तलाश कर रहा था :)
थॉमस देहाज़े
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.