Möglichkeit, SRC-Blocktrennzeichen auszublenden


11

Gibt es eine Möglichkeit, nur Quellcode im Quellcode zu belassen, dh # + BEGIN_SRC und # + END_SRC unsichtbar zu machen? Es ist kosmetisch, aber es macht die Dinge klarer, wenn man sich mit vielen Kurzcode-Schnipsel beschäftigen muss. Zum Beispiel:

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

Anstatt von :

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

Mein Kommentar unter der Frage in diesem semi-verwandten Thread zeigt, wie die Kopf- / Fußzeilen des Quellblocks programmgesteuert ausgeblendet werden. emacs.stackexchange.com/q/26163/2287 - dh, (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)))) um alles einzublenden, verwenden Sie (remove-overlays). Weitere Arbeiten müssen für einzelne Einträge durchgeführt werden und nur ausgewählte Überlagerungen (anstelle aller Überlagerungen) entfernt werden. Dies ist jedoch die allgemeine Idee.
Lawlist

Danke, das ist interessant ... ich werde damit herumspielen.
Loukios

Antworten:


5

Das Gesicht für alle Zeilen, die mit beginnen, #+wird aufgerufen org-meta-line.

Sie können dieses Gesicht kleiner, dunkler usw. anpassen, um es weniger sichtbar zu machen.


Tatsächlich. Als Beispiel habe ich es mit eingerichtet (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). Ich finde es hilft ziemlich viel.
Harald Hanche-Olsen

Vielen Dank für Ihre Antwort, es hilft. Ich habe die Höhe übrigens geändert, aber es hat keine Auswirkung ...
Loukios

In dieser Emacs Lisp-Dokumentation finden Sie org-meta-line Informationen
salotz

4

Ich verwende den folgenden Code, der einen Teil des Weges geht. Es ist nicht perfekt. Vielleicht wird es eines minor-modeTages richtig . ( Quelle ).

Screenshot des resultierenden Codes

(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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.