this-month-in-org/2021-05-31-async.org

237 lines
9.9 KiB
Org Mode
Raw Normal View History

2024-01-09 18:20:48 +00:00
# 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:<abbr title="Hyper Text Markup Language">HTML</abbr>@@ @@latex:\LaTeX{}@@ documents.
#+end_src
which will export to HTML as,
#+begin_src html
I love using Org to export to <abbr title="Hyper Text Markup Language">HTML</abbr> 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_