Cara untuk menyembunyikan pembatas blok SRC

12

adakah cara untuk menjaga hanya kode sumber di dalam kode sumber, yaitu membuat # + BEGIN_SRC dan # + END_SRC tidak terlihat? Ini kosmetik tetapi membuat segalanya lebih jelas ketika kita harus berurusan dengan banyak cuplikan kode pendek. Sebagai contoh:

(defun org-xor (a b)
          "Exclusive or."
          (if a (not b) b))

dari pada :

  #+BEGIN_SRC emacs-lisp
       (defun org-xor (a b)
          "Exclusive or."
          (if a (not b) b))
  #+END_SRC
loukios
sumber
Komentar saya di bawah pertanyaan di utas semi-terkait ini menunjukkan cara menyembunyikan header / footer blok sumber. emacs.stackexchange.com/q/26163/2287 - yaitu, (save-excursion (goto-char (point-max)) (while (re-search-backward "#\\+BEGIN_SRC\\|#\\+END_SRC" nil t) (let ((ov (make-overlay (line-beginning-position) (1+ (line-end-position))))) (overlay-put ov 'invisible t)))) Untuk menyembunyikan semuanya, gunakan (remove-overlays). Pekerjaan lebih lanjut perlu dilakukan untuk masing-masing entri, dan menghapus hanya overlay pilih (alih-alih semua overlay), tetapi itu adalah ide umum.
lawlist
Terima kasih, ini menarik ... Saya akan bermain-main dengan ini.
loukios

Jawaban:

5

Wajah untuk semua garis dimulai dengan #+disebut org-meta-line.

Anda dapat menyesuaikan wajah ini lebih kecil, lebih gelap, dll. Untuk membuatnya kurang terlihat.

Juancho
sumber
Memang. Sebagai contoh, saya mengaturnya menggunakan (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). Saya merasa ini sedikit membantu.
Harald Hanche-Olsen
Terima kasih atas jawaban Anda, itu memang membantu. Saya telah mengubah ketinggian btw tetapi tidak memiliki efek apa pun ...
loukios
Lihat dokumentasi Emacs Lisp ini pada opsi yang dapat Anda tetapkan untuk org-meta-line gnu.org/software/emacs/manual/html_node/elisp/…
salotz
4

Saya menggunakan potongan kode berikut yang berjalan beberapa cara. Itu tidak sempurna. Mungkin itu akan menjadi suatu minor-modehari nanti. ( sumber ).

Cuplikan layar dari kode yang dihasilkan

(with-eval-after-load 'org
  (defvar-local rasmus/org-at-src-begin -1
    "Variable that holds whether last position was a ")

  (defvar rasmus/ob-header-symbol ?☰
    "Symbol used for babel headers")

  (defun rasmus/org-prettify-src--update ()
    (let ((case-fold-search t)
          (re "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*")
          found)
      (save-excursion
        (goto-char (point-min))
        (while (re-search-forward re nil t)
          (goto-char (match-end 0))
          (let ((args (org-trim
                       (buffer-substring-no-properties (point)
                                                       (line-end-position)))))
            (when (org-string-nw-p args)
              (let ((new-cell (cons args rasmus/ob-header-symbol)))
                (cl-pushnew new-cell prettify-symbols-alist :test #'equal)
                (cl-pushnew new-cell found :test #'equal)))))
        (setq prettify-symbols-alist
              (cl-set-difference prettify-symbols-alist
                                 (cl-set-difference
                                  (cl-remove-if-not
                                   (lambda (elm)
                                     (eq (cdr elm) rasmus/ob-header-symbol))
                                   prettify-symbols-alist)
                                  found :test #'equal)))
        ;; Clean up old font-lock-keywords.
        (font-lock-remove-keywords nil prettify-symbols--keywords)
        (setq prettify-symbols--keywords (prettify-symbols--make-keywords))
        (font-lock-add-keywords nil prettify-symbols--keywords)
        (while (re-search-forward re nil t)
          (font-lock-flush (line-beginning-position) (line-end-position))))))

  (defun rasmus/org-prettify-src ()
    "Hide src options via `prettify-symbols-mode'.

  `prettify-symbols-mode' is used because it has uncollpasing. It's
  may not be efficient."
    (let* ((case-fold-search t)
           (at-src-block (save-excursion
                           (beginning-of-line)
                           (looking-at "^[ \t]*#\\+begin_src[ \t]+[^ \f\t\n\r\v]+[ \t]*"))))
      ;; Test if we moved out of a block.
      (when (or (and rasmus/org-at-src-begin
                     (not at-src-block))
                ;; File was just opened.
                (eq rasmus/org-at-src-begin -1))
        (rasmus/org-prettify-src--update))
      ;; Remove composition if at line; doesn't work properly.
      ;; (when at-src-block
      ;;   (with-silent-modifications
      ;;     (remove-text-properties (match-end 0)
      ;;                             (1+ (line-end-position))
      ;;                             '(composition))))
      (setq rasmus/org-at-src-begin at-src-block)))

  (defun rasmus/org-prettify-symbols ()
    (mapc (apply-partially 'add-to-list 'prettify-symbols-alist)
          (cl-reduce 'append
                     (mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x))))
                             `(("#+begin_src" . ?✎) ;; ➤ 🖝 ➟ ➤ ✎
                               ("#+end_src"   . ?□) ;; ⏹
                               ("#+header:" . ,rasmus/ob-header-symbol)
                               ("#+begin_quote" . ?»)
                               ("#+end_quote" . ?«)))))
    (turn-on-prettify-symbols-mode)
    (add-hook 'post-command-hook 'rasmus/org-prettify-src t t))
  (add-hook 'org-mode-hook #'rasmus/org-prettify-symbols))
rasmus
sumber