# Created 2022-03-03 Thu 01:39 #+title: May 2021 #+date: 2021-05-31 #+author: TEC #+subtitle: Asynchronous code execution * Async Babel sessions have landed Jack Kamm has made a fantastic contribution to Org: =ob-comint.el= now supports asynchronous output from source blocks /with full support for sessions/ 🎉. If you haven't used sessions before, you're in for a treat! By simply assigning a named session to a source code block, e.g. =:session foo=, the same process will be reused for any other code blocks that specify the =foo= session. To do this for a certain language across the entire document, you can set the header argument property, i.e. #+begin_src org ,#+property: header-args:lang :session foo #+end_src Along with the asynchronous process communication in =ob-comint.el=, we have an implementation for *Python*, and we should see support for *R* and *Ruby* in the not-too-distant future 😍. To use this, just add the =:async= parameter to a python block. Instead of Emacs freezing until it completes execution, you'll see a placeholder inserted which is replaced by the result when it is ready. [[https://github.com/nnicandro/emacs-jupyter][emacs-jupyter]] allowed for asynchronous code execution (with sessions), but it's great to have a solution that doesn't require Jupyter kernels, and is part of Org. * Font lock for inline export snippets Now, this isn't necessarily a significant change, but I don't think many people know about this feature so I'll take the opportunity to go over it 🙂. If you want to include a snippet of HTML/LaTeX etc. when exporting to that format, you can use a =#+begin_export html= block which simply includes the enclosed content verbatim. This doesn't really work for small inline snippets though --- but never fear, Org has /inline/ export snippets which simply follow the form src_org{@@format:content@@}. For example: #+begin_src org I love using Org to export to @@html:HTML@@ @@latex:\LaTeX{}@@ documents. #+end_src which will export to HTML as, #+begin_src html I love using Org to export to HTML documents. #+end_src and then in LaTeX will be, #+begin_src LaTeX I love using Org to export to \LaTeX{} documents. #+end_src isn't that neat! Now you'll find the =@@= parts using the comment face and the =format:= bit using the Org tag's face. It's a small change, but it makes it easier to see what's going on. No mode-specific syntax highlighting yet, but that may come in the future 😉. * =#+plot= your =#+results= Org-plot has been getting some more love as of late (see [[file:2021-04-30-export-plot.org][last month's post]]), and that hasn't stopped yet. This month there's been a fairly minor change that I'm quite a fan of. If you have a source block that produces a table of =#+results=, you can now put a =#+plot= statement immediately above to get a visualisation of those results! #+begin_src org ,#+begin_src python # pretend this is some profound source of information return [[i, i^3 - 4*i^2 - 2*i] for i in range(5)] ,#+end_src ,#+plot: ind:1 ,#+RESULTS: | 0 | 1 | | 1 | -2 | | 2 | 7 | | 3 | 8 | | 4 | 13 | #+end_src As usual, this relies on =gnuplot= being present. You can read more about it in the [[https://orgmode.org/manual/Org-Plot.html][manual]]. * Fancier LaTeX verses With the use of =verse.sty= you can now export fancier verses from Org, as verse blocks now support four new attributes: - =:lines= for the numbering interval. - =:center= which can be set to =t= and works as long as, - =:versewidth=, the longest line in the verse as a text string is set. - You can also easily add arbitrary LaTeX code to be included with =:latexcode=. #+begin_src org ,#+latex_header: \usepackage{verse} ,#+latex: \poemtitle{A Dream Within a Dream} ,#+attr_latex: :lines 3 :center t ,#+attr_latex: :versewidth Through my fingers to the deep, ,#+begin_verse Take this kiss upon the brow! And, in parting from you now, Thus much let me avow — You are not wrong, who deem That my days have been a dream; Yet if hope has flown away In a night, or in a day, In a vision, or in none, Is it therefore the less /gone?/ /All/ that we see or seem Is but a dream within a dream. I stand amid the roar Of a surf-tormented shore, And I hold within my hand Grains of the golden sand — How few! yet how they creep Through my fingers to the deep, While I weep — while I weep! O God! Can I not grasp Them with a tighter clasp? O God! can I not save /One/ from the pitiless wave? Is /all/ that we see or seem But a dream within a dream? ,#+end_verse #+end_src #+caption: A short Poe-em [[file:figures/org-verses-example-poem-dream-within-dream.png]] * Easy zero-width spaces with Org Occasionally you may run into annoyances when you wish to have two different Org elements right next to each other (no space) --- for example, *emph*asising part of a word or putting a currency symbol immediately before an inline source block. The best solution to this in Org is zero-width spaces. As such, I've found it rather nice adding insertion of a zero-width space to the ~org-mode-map~ in my config. Perhaps some of you might find this solution useful too 🙂. #+begin_src emacs-lisp (define-key org-mode-map (kbd "M-SPC M-SPC") (lambda () (interactive) (insert "\u200b"))) #+end_src Should you want to keep zero-width spaces out of exports, that's easy enough to accomplish with an [[https://orgmode.org/manual/Advanced-Export-Configuration.html][export filter]]. #+begin_src emacs-lisp (defun +org-export-remove-zero-width-space (text _backend _info) "Remove zero width spaces from TEXT." (unless (org-export-derived-backend-p 'org) (replace-regexp-in-string "\u200b" "" text))) (add-to-list 'org-export-filter-final-output-functions #'+org-export-remove-zero-width-space t) #+end_src * Org's repos have moved - =contrib/= is now at https://git.sr.ht/~bzg/org-contrib for Org 9.5, and it will be available on Non-GNU ELPA. - Worg is now at https://git.sr.ht/~bzg/worg - Org itself is moving to Savannah * Other improvements - Add support for =HHhMM= date formats (e.g. =13h20=) _Gustavo Barros_ - Make tangling faster /and/ more robust _Sébastien Miquel_ - Allow importing tables from files that /don't/ end in =.txt=, =.tsv=, or =.csv= _Utkarsh Singh_ - Add an SVG-specific post-export =ob-plantuml= step: ~org-babel-plantuml-svg-text-to-path~ for running Inkscape text-to-path replacement _Nick Daly_ - Refactor JavaScript in =ox-html= _Anthony Carrico_ - Set ~org-html-head-include-scripts~ to ~nil~ by default (was ~t~) _Bastien Guerry_ - Remove LaTeX-environment type =#+results= _TEC_ - New capture templates parameter, =:refile-targets= _Richard Garner_ - Merge ~org-speed-commands-default~ and ~org-speed-commands-user~ into a new variable, ~org-speed-commands~ _Bastien Guerry_ - URL recognition regex now handles up to two levels of nested brackets, and is tested _Ihor Radchenko_ - Cache parent heading positions for faster movement up buffers. Significantly improves Org queries involving inheritance (~15-50x improvement) _Ihor Radchenko_ - New command ~org-refile-reverse~ bound to =C-c C-M-w= _Adam Spiers_ - Allow inline tasks to be dragged up/down _Bastien Guerry_ - LaTeX export, allow arbitrary =:float= values _Thomas S. Dye_ - Org attach git, new option ~org-attach-git-dir~ to use the attachment dir as a git repository _Juan Manuel Macías_ - Use a write-back buffer in Org src _Sébastien Miquel_ - Add the =:environment= and =:options= LaTeX attributes to Quote blocks _Juan Manuel Macias_ - Surround LaTeX =:options= attribute with curly braces when it contains square braces _Markus Huber_ - Recognise the specific contributions of Kyle Meyer, Ihor Radchenko, and TEC in the manual _Bastien Guerry_ - Improve test coverage _Ihor Radchenko, Kévin Le Gouguec_ - A bikeshed of new maintainers - New maintainer for =ox-html= --- TEC - New =ob-ledger= maintainer --- Eric S Fraga - New =ob-awk= maintainer --- Tyler Smith - New =ob-calc= maintainer --- Tom Gillespie - New =ob-asymptote= and =ob-coq= maintainer --- Luc Pellissier - General code cleanup _Bastien Guerry_ - Documentation improvements _Bastien Guerry, Eric S Fraga, Samim Pezeshki, Nicolar Goaziou_ * Bugfixes - Make =ob-gnuplot= work on remote systems _Ihor Radchenko_ - Stop =M-x org-toggle-link-display= from affecting emphasis markers _Bastien Guerry_ - Inserting a heading before a headline _Bastien Guerry_ - Perform ~org-entry-put~ in a read-only buffer _Ihor Radchenko_ - Emacs 24 compatibility for =ob-C= and ~org-agenda-show-new-time~ _Kyle Meyer_ - Maintain Org's keybindings when ~visual-line-mode~ active _Bastien Guerry_ - Keep track of start of region beginning in ~org-table-wrap-region~ _Bastien Guerry_ - Ensure correct visibility when unfolding subtree _Bastien Guerry_ - Corner case in ~org--backwards-paragaph-once~ _Bastien Guerry_ - Some byte compiler silencing _Kyle Meyer_ - Make tags filtering case-sensitive _Bastien Guerry_ - =C-c C-c= on a =#+plot= line can no longer cause an error _Bastien Guerry_ - Ensure consistent position-translation in =org-src= by using point for position instead of column _TEC_ - Prevent =ob-sql= from getting stuck on an error _Ivan Sokolov_ - Make =org-columns= respect ~global-visual-line-mode~, and simplify tag scanning _Nick Savage_ - Don't fontify =::= in headlines as description item _Ihor Radchenko_ - Handle a few corner-cases in =ob-R= _Jeremie Juste_ - Many fixes to ~org-indent-line~ _Bastien Guerry_ - Make headline numbering consistent with TOC _Mingkai Dong_ - Allow read-only tangling again, and ensure the correct filename is used _Sébastien Miquel_ - Fix edge case when converting durations to minutes _Nicolas Goaziou_ - Make org-refile work in non-file-visiting buffers _Bastien Guerry_ - Be more rigorous in ~org-sort-remove-invisible~ _Nicolas Goaziou_ - Don't update checkbox stats when heading has =todo= =COOKIE_DATA= _Bastien Guerry_ - Don't recognise a lone =:END:= to be forming a drawer _Nicolas Goaziou_ - Allow new footnotes in empty table cells _Nicolas Goaziou_