SRC 블록 구분 기호를 숨기는 방법


13

소스 코드 내에 소스 코드 만 유지하는 방법이 있습니까? 즉, # + BEGIN_SRC 및 # + END_SRC는 보이지 않습니까? 그것은 화장품이지만 많은 짧은 코드 스 니펫을 처리해야 할 때 상황을 더 명확하게 만듭니다. 예를 들어:

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

대신에 :

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

이 반 관련 스레드에서 질문 아래에 내 의견은 프로그래밍 방식으로 소스 블록 머리글 / 바닥 글을 숨기는 방법을 보여줍니다. emacs.stackexchange.com/q/26163/2287-(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)))) 모든 것을 숨기기 해제하려면을 사용하십시오 (remove-overlays). 개별 항목에 대해 추가 작업을 수행하고 모든 오버레이 대신 선택된 오버레이 만 제거해야하지만 이것이 일반적인 아이디어입니다.
lawlist

고마워, 이것은 흥미 롭다. 나는 이것을 가지고 놀 것이다.
loukios

답변:


5

로 시작하는 모든 선의면을 #+이라고 org-meta-line합니다.

이 얼굴을 더 작고 어둡게 설정하여 눈에 잘 띄지 않게 할 수 있습니다.


과연. 예를 들어을 사용하여 설정했습니다 (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). 나는 그것이 꽤 도움이된다는 것을 알았습니다.
Harald Hanche-Olsen

답변 주셔서 감사합니다, 그것은 도움이됩니다. 나는 btw 높이를 변경했지만 아무런 영향을 미치지 않습니다 ...
loukios


4

나는 다음과 같은 코드를 사용합니다. 완벽하지 않습니다. 아마 언젠가는 적절해질 것 minor-mode입니다. ( 소스 ).

결과 코드의 스크린 샷

(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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.