วิธีการสลับบล็อกซอร์สโค้ด Org โหมดบล็อก“: eval no”


9

ฉันมักจะ จำกัด หรือไม่ จำกัด การประเมินผลของการบล็อกรหัสเฉพาะในโหมด babel โดยใช้:evalอาร์กิวเมนต์ส่วนหัว

นี่คือตัวอย่าง:

#+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 บล็อกที่สองบล็อกโค้ดแรกจะถูกสลับ บางทีฉันควรจะเพิ่ม (ไม่มีจุดสิ้นสุดของบรรทัด) ก่อนหน้าทั้งคู่ (ค้นหาจากด้านหลัง "# + BEGIN_SRC")?
RUserPassing โดย

1
จุดที่ดีเยี่ยม ฉันได้อัปเดตคำตอบให้รวม(end-of-line)ก่อนการค้นหาซึ่งจะย้ายจุดไปยังจุดสิ้นสุด#+BEGIN_SRCถ้าคุณอยู่ก่อนหน้า (โดยไม่ จำกัด ฟังก์ชันการทำงานอื่น ๆ ) แจ้งให้เราทราบหากคุณยังมีปัญหาอยู่
GJStein

ฉันขอขอบคุณสำหรับรหัสของคุณ! มันยอดเยี่ยมจริงๆ !!
RUserPassing โดย

ขอบคุณมาก. กำลังมองหาฟังก์ชั่นดังกล่าวมาเป็นเวลานาน :)
โทมัส Dehaeze
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.