Cách để ẩn các dấu phân cách khối SRC


12

Có cách nào để chỉ giữ mã nguồn bên trong mã nguồn, đó là ẩn # + BEGIN_SRC và # + END_SRC không? Đó là mỹ phẩm nhưng nó làm cho mọi thứ rõ ràng hơn khi người ta phải đối phó với rất nhiều đoạn mã ngắn. Ví dụ như:

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

thay vì :

  #+BEGIN_SRC emacs-lisp
       (defun org-xor (a b)
          "Exclusive or."
          (if a (not b) b))
  #+END_SRC

Nhận xét của tôi bên dưới câu hỏi trong chủ đề bán liên quan này cho thấy cách lập trình ẩn các tiêu đề / chân trang của khối nguồn. emacs.stackexchange.com/q/26163/2287 - tức là, (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)))) để bỏ ẩn mọi thứ, hãy sử dụng (remove-overlays). Công việc tiếp theo cần phải được thực hiện cho các mục riêng lẻ và chỉ xóa các lớp phủ chọn (thay vì tất cả các lớp phủ), nhưng đó là ý tưởng chung.
luật

Cảm ơn, điều này thật thú vị ... Tôi sẽ chơi xung quanh với điều này.
loukios

Câu trả lời:


5

Khuôn mặt cho tất cả các dòng bắt đầu với #+được gọi org-meta-line.

Bạn có thể tùy chỉnh khuôn mặt này nhỏ hơn, tối hơn, vv để làm cho nó ít nhìn thấy hơn.


Thật. Ví dụ, tôi đã thiết lập nó bằng cách sử dụng (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). Tôi thấy nó giúp khá nhiều.
Harald Hanche-Olsen

Cảm ơn câu trả lời của bạn, nó giúp. Tôi đã thay đổi chiều cao btw nhưng nó không có tác dụng gì ...
loukios

Xem tài liệu Lisp của Emacs này về các tùy chọn bạn có thể gán cho org-meta-line gnu.org/software/emacs/manual/html_node/elisp/ Kẻ
salotz

4

Tôi sử dụng đoạn mã sau đây đi một số cách. Nó không hoàn hảo. Có lẽ nó sẽ trở thành một minor-modengày thích hợp . ( nguồn ).

Ảnh chụp màn hình của mã kết quả

(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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.