292 lines
12 KiB
Plaintext
292 lines
12 KiB
Plaintext
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
MAY 2021
|
||
Asynchronous code execution
|
||
|
||
TEC
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
|
||
2021-05-31
|
||
|
||
|
||
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.
|
||
┌────
|
||
│ #+property: header-args:lang :session foo
|
||
└────
|
||
|
||
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.
|
||
|
||
[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.
|
||
|
||
|
||
[emacs-jupyter] <https://github.com/nnicandro/emacs-jupyter>
|
||
|
||
|
||
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 `@@format:content@@'. For
|
||
example:
|
||
|
||
┌────
|
||
│ I love using Org to export to @@html:<abbr title="Hyper Text Markup Language">HTML</abbr>@@ @@latex:\LaTeX{}@@ documents.
|
||
└────
|
||
which will export to HTML as,
|
||
┌────
|
||
│ I love using Org to export to <abbr title="Hyper Text Markup Language">HTML</abbr> documents.
|
||
└────
|
||
and then in LaTeX will be,
|
||
┌────
|
||
│ I love using Org to export to \LaTeX{} documents.
|
||
└────
|
||
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 [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 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 |
|
||
└────
|
||
|
||
As usual, this relies on `gnuplot' being present. You can read more
|
||
about it in the [manual].
|
||
|
||
|
||
[last month’s post] <file:2021-04-30-export-plot.org>
|
||
|
||
[manual] <https://orgmode.org/manual/Org-Plot.html>
|
||
|
||
|
||
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'.
|
||
|
||
┌────
|
||
│ #+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
|
||
└────
|
||
|
||
<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 🙂.
|
||
|
||
┌────
|
||
│ (define-key org-mode-map (kbd "M-SPC M-SPC")
|
||
│ (lambda () (interactive) (insert "\u200b")))
|
||
└────
|
||
|
||
Should you want to keep zero-width spaces out of exports, that’s easy
|
||
enough to accomplish with an [export filter].
|
||
|
||
┌────
|
||
│ (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)
|
||
└────
|
||
|
||
|
||
[export filter]
|
||
<https://orgmode.org/manual/Advanced-Export-Configuration.html>
|
||
|
||
|
||
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_
|