Façon de masquer les délimiteurs de blocs SRC

13

existe-t-il un moyen de ne conserver que le code source dans le code source, c'est-à-dire de rendre # + BEGIN_SRC et # + END_SRC invisibles? C'est cosmétique, mais cela rend les choses plus claires lorsque l'on doit faire face à de nombreux extraits de code courts. Par exemple:

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

au lieu de :

  #+BEGIN_SRC emacs-lisp
       (defun org-xor (a b)
          "Exclusive or."
          (if a (not b) b))
  #+END_SRC
loukios
la source
Mon commentaire sous la question dans ce fil semi-connexe montre comment masquer par programme les en-têtes / pieds de page du bloc source. emacs.stackexchange.com/q/26163/2287 - c'est-à-dire que (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)))) pour tout afficher, utilisez (remove-overlays). Des travaux supplémentaires doivent être effectués pour les entrées individuelles et supprimer uniquement les superpositions sélectionnées (au lieu de toutes les superpositions), mais c'est l'idée générale.
lawlist
Merci, c'est intéressant ... Je vais jouer avec ça.
loukios

Réponses:

5

Le visage de toutes les lignes commençant par #+est appelé org-meta-line.

Vous pouvez personnaliser ce visage plus petit, plus sombre, etc. pour le rendre moins visible.

Juancho
la source
En effet. Par exemple, je l'ai configuré en utilisant (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). Je trouve que ça aide pas mal.
Harald Hanche-Olsen
Merci pour votre réponse, ça aide. J'ai changé la hauteur entre-temps mais ça n'a aucun effet ...
loukios
Consultez cette documentation Emacs Lisp sur les options que vous pouvez attribuer à org-meta-line gnu.org/software/emacs/manual/html_node/elisp/…
salotz
4

J'utilise le morceau de code suivant qui va en partie. Ce n'est pas parfait. Peut-être que cela deviendra un minor-modejour un vrai . ( source ).

Capture d'écran du code résultant

(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
la source