Forma de ocultar los delimitadores de bloque SRC

13

¿Hay alguna manera de mantener solo el código fuente dentro del código fuente, es decir, hacer invisibles # + BEGIN_SRC y # + END_SRC? Es cosmético, pero aclara las cosas cuando uno tiene que lidiar con muchos fragmentos de código cortos. Por ejemplo:

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

en vez de :

  #+BEGIN_SRC emacs-lisp
       (defun org-xor (a b)
          "Exclusive or."
          (if a (not b) b))
  #+END_SRC
loukios
fuente
Mi comentario debajo de la pregunta en este hilo semi-relacionado muestra cómo ocultar mediante programación los encabezados / pies de página del bloque fuente. emacs.stackexchange.com/q/26163/2287 , es decir, (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)))) para mostrar todo, use (remove-overlays). Se necesita trabajar más para las entradas individuales y eliminar solo las superposiciones seleccionadas (en lugar de todas las superposiciones), pero esa es la idea general.
abogados
Gracias, esto es interesante ... Jugaré con esto.
loukios

Respuestas:

5

Se #+llama la cara para todas las líneas que comienzan con org-meta-line.

Puede personalizar esta cara más pequeña, más oscura, etc. para que sea menos visible.

Juancho
fuente
En efecto. Como ejemplo, lo tengo configurado usando (set-face-attribute 'org-meta-line nil :height 0.8 :slant 'normal). Me parece que ayuda bastante.
Harald Hanche-Olsen
Gracias por su respuesta, ayuda. He cambiado la altura por cierto, pero no tiene ningún efecto ...
loukios
Consulte esta documentación de Emacs Lisp sobre las opciones que puede asignar a org-meta-line gnu.org/software/emacs/manual/html_node/elisp/…
salotz el
4

Utilizo el siguiente código que funciona en parte. No es perfecto Tal vez se convierta en algo apropiado minor-modealgún día. ( fuente )

Captura de pantalla del código resultante

(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
fuente