org-mode – Mostrar errores y advertencias en un bloque de código de modo de organización

Pregunta:

Me gustaría poder informar advertencias y errores al evaluar un bloque de código Python en un archivo Org.

Cuando un bloque de código tiene errores de sintaxis de Python, Org amablemente los muestra en un búfer separado llamado *Org-Babel Error Output* . Sería bueno poder enviar mis propias advertencias allí también, mientras conservo la capacidad de devolver un resultado de matriz al modo Org como una tabla usando :results value .

Para ser claros, aquí hay un ejemplo ficticio del tipo de cosas que pensé que podrían funcionar:

#+BEGIN_SRC python 
    import sys
    sys.stderr.write('Warning.\n')
    sys.stderr.flush()
    return [['Table', 'header'], ['table', 'data']]
#+END_SRC

#+RESULTS:
| Table | header |
| table | data   |

Editado para agregar: esta discusión sobre la lista del modo de organización sugiere que la salida de error solo se muestra cuando falla la evaluación del bloque de código. Entonces parece que esto es posible, pero solo abortando la evaluación usando exit(1) o similar.

Respuesta:

Como lo describió Eric Schulte en la lista de correo del org-mode (vea el enlace en la pregunta), podemos modificar org-babel-eval para lograr esto:

(defvar org-babel-eval-verbose t
  "A non-nil value makes `org-babel-eval' display")

(defun org-babel-eval (cmd body)
  "Run CMD on BODY.
If CMD succeeds then return its results, otherwise display
STDERR with `org-babel-eval-error-notify'."
  (let ((err-buff (get-buffer-create " *Org-Babel Error*")) exit-code)
    (with-current-buffer err-buff (erase-buffer))
    (with-temp-buffer
      (insert body)
      (setq exit-code
            (org-babel--shell-command-on-region
             (point-min) (point-max) cmd err-buff))
      (if (or (not (numberp exit-code)) (> exit-code 0)
              (and org-babel-eval-verbose (> (buffer-size err-buff) 0))) ; new condition
          (progn
            (with-current-buffer err-buff
              (org-babel-eval-error-notify exit-code (buffer-string)))
            nil)
        (buffer-string)))))

Ahora, si org-babel-eval-verbose se establece en t , la salida impresa en stderr durante la evaluación de un bloque de código fuente se muestra en una ventana separada como si fallara la evaluación del código fuente.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım