Dear all, Here are the meetup notes from September meetup. (The October notes will hopefully be coming soon).
TL;DR: delays in bug fixes and patch reviews; batch refiling; link completion; stable heading IDs; theming HTML export; macro replacement; native LaTeX embeddings; footnotes; citations (CSL); examining Org's parse tree; detecting blockers; auto-recording changes under each heading; org-fold-show-context-detail; time zone support; durations in Org. - As usual, we started from the latest Emacs news https://sachachua.com/blog/2025/09/2025-09-08-emacs-news/ - This meetup just followed a series of work trips I made, so lots of things on the Org development side were not acted upon - Pedro A. Aranda reminded about his ongoing work on improvements in the LaTeX exporter when using non-English document languages (and that I had things to review and come back to him) - His work is on =feature/all-tex-fonts= branch https://cgit.git.savannah.gnu.org/cgit/emacs/org-mode.git/log/?h=feature/all-tex-fonts - The most recent discussion thread is https://list.orgmode.org/87y0q0xhez.fsf@localhost/T/#t - For the same reason, the meetup etherpad was still full of notes from previous one. Lots of dept. - Sacha reminded about talk submissions to EmacsConf (deadline passed by now, but they might still accept talks, you really want to give one) - Here is the list of talks they got for this year https://emacsconf.org/2025/talks/ - Sacha Chua shared a refiling workflow where instead of searching for heading to refile to every time, we can use hydra https://gist.github.com/jsomers/ded472b1aa3b92d5fc8b35e92164eb07 https://mollermara.com/blog/Fast-refiling-in-org-mode-with-hydras/ to refile many tasks one after another - I personally use two approaches when I need batch-refiling + Built-in batch-refiling from agenda views: 1. Find all the tasks I need to refile using agenda search view 2. Mark the tasks I need to refile with "m" 3. "B r" to (b)atch (r)efile all the tasks to the same heading + Custom helm actions: 1. I first go to the heading that is refile *target* (heading to refile to) 2. I use helm search with org-ql to search for headings I want to refile under heading at point 3. I select multiple headings I want to refile (helm makes it easy) 4. I use custom action to refile all selected headings under heading at point https://github.com/yantar92/emacs-config/blob/master/config.org#helm-org-ql - famubu asked about quick linking to other headings in the same Org document (I think; it was by voice and I did not take many notes about this question) - The traditional approach Org uses for linking is the following: 1. You go to heading you want to link to 2. You M-x org-store-link (C-c C-S-l). The link is stored in the link ring. 3. Maybe repeat 1 and 2 multiple times 4. You go back to you text and M-x org-insert-link (C-c C-l) or M-x org-insert-all-links (C-c C-M-l). The completion will, by default, offer links from the link ring - Also, you can type [[*<TAB> and get a completion for headings inside current buffer See [[org#Internal Links]] that touches on internal link completion and generally described how to link to places inside the same document. - Alternatively, you can make use of completion, for custom link types that implement it. For example, just a few weeks ago, Steven Allen contributed links built-in completion for id: links - Another common approach is linking using third-party package like org-roam or org-ql. I personally use org-ql when I need to add links at point - We then shifted the discussion towards linking to headings inside document - The simplest way is =[[*Heading title]]=, but it may break if the heading title ever changes. Also, when exporting to, say, HTML, the HTML anchor will be generated randomly - a common annoying "feature" of Org. It is really a feature as it prevents duplicate anchor names, but it is annoying as they are (1) not human-readable (go figure how to make human-readable and also unique ids) (2) not stable - The stability can be solved when using publishing system as it maintains id cache and does not change the generated ids (as much as possible) when exporting/publishing several times in a row - Some people generate ids based on title once, so that they are retained even when the title changes (with obvious downside of de-syncing the title and id). For example, see Sacha's my-org-set-custom-id in https://sach.ac/dotemacs - Another way is specifying id explicitly in =CUSTOM_ID= property of a heading. Then, =[[#custom_id_name]]= will refer to heading. Moreover, if ~org-html-prefer-user-labels~ is set to t (it is *not* the default), the same ids will be directly re-used in HTML. (Again, the fact that the default is nil is a "feature" as custom ids may contain Unicode symbols, which would be problematic in HTML) - A similar problem may happen with links to non-headings (to named images, blocks, or to targets). Sacha Chua shared her solution to this https://sachachua.com/blog/2025/02/adding-an-anchor-to-a-paragraph-in-org-mode-html-export/ - The main famubu's use case is exporting to HTML (AFAIR). We thus also discussed ways to customize the appearance of the exported HTML documents - The usual way to change the looks of the exported HTML is customizing CSS classes, or, more generally, HTML document preamble and postamble - This can either be done manually, or you can make use of one of the existing HTML themes for Org - https://github.com/fniessen/org-html-themes - https://github.com/mrlee23/readtheorg - The themes are usually just a series of =#+HTML_HEAD= keywords, that can be loaded via =#+SETUPFILE= - =#+SETUPFILE= can point to a remote http location, so themes can be automatically fetched online. Of course, local SETUPFILE is also possible - When working with CSS, it is often desired to wrap some text into some HTML class - This can be easily done with =#+begin_classname ... #+end_classname= special blocks - Org HTML export will transform these blocks into container with "classname" class - Also, if org-html-html5-fancy is non-nil and org-html-doctype is "html5" (by default Org sticks to very conservative xml style), =#+begin_section/summary/etc= will translate to the corresponding HTML5 tags instead of assigning class. - Org mode export (any export, not just HTML) also provides macro replacement - See 13.5 Macro Replacement section of Org mode manual - For example, one can substitute property values via ={{{property(...)}}}= macro - Or just have classic macro use like : #+MACRO: friendname Phoebe : Hello, {{{friendname}}} - Going away from HTML, LaTeX export is more directly supported - =\begin{environment} ... \end{environment}= are legal parts of Org mode syntax that will not only work when exporting to LaTeX, but also when exporting to other formats. For non-LaTeX, Org will usually pass the fragment through LaTeX and generate an image. - Similar for inline fragments $$a + b = c$$ - Note that both latex environments and inline latex fragments will be treated as LaTeX syntax - no Org syntax can be used inside (despite fontification showing the opposite - that's a bug in fontification code) - For use Org markup inside environments, you can use special blocks - When having a single environment is not good enough, there is always =\#+begin_export latex ... #+end_export= and inline =@@latex:...@@=. But mind that this markup will be ignored when exporting to other) formats. - Sacha commented that similarly to natively supported LaTeX fragments, one might allow native HTML =<b>syntax</b>= when Org sees "<" (just like in vanilla Markdown). - I am not sure about this. In particular, it is not entirely clear how to render HTML syntax - famubu asked about putting links at the end of document as #+begin_example Hello [link][1]. Another [link[2]. [1]: https://www.example.com [2]: https://www.example.com/home.html #+end_example - This reminded me of Org mode's citation system - Although something more directly related is simply footnotes https://orgmode.org/manual/Creating-Footnotes.html - kickingvegas asked about printing bibliographies when exporting citations. He had an issue with URL field in the bibtex record not being printed - https://orgmode.org/manual/Citation-handling.html - For rendering citations, (and for everything else) Org mode uses customizeable citation processors. By default, the citations are very basic - just author - title - year (~org-cite-basic--print-entry~). We might extend that function if you file a feature request. - For more realistic scenarios, we recommend using CSL for printing bibliography (https://orgmode.org/manual/Citation-export-processors.html) - CSL processors are based on CSL standard that have templates for pretty much all kinds of bibliographies. See https://citationstyles.org/authors/ and https://editor.citationstyles.org/searchByExample/ - I shared a bit about my (Org mode maintainer) situation with time and handling Org mode development - The important maintainer's job is handling bug fixes and reviewing patches - With my current job, I more or less have enough time to do exactly these two activities (most of the time, when my schedules are regular-ish) - Unfortunately, I cannot do much more, like adding new features or doing some non-trivial code changes. This is a pity - I am considering to ask for help with bug fixing to free up some time for non-trivial code changes that require knowledge of Org mode code (like the refactoring I have been talking about during Emacsconf 2024) - Rudy shared his experiment with using Org parser to develop multi-page HTML exporter - He asked about the best way to look into the parse tree during debugging - The AST structure is described in the commentary in org-element-ast.el - Also, I recommend https://github.com/mmontone/emacs-inspector when you need to look into deeply nested lists (which Org AST is) - there is also ~pp~ function for pretty-printing arbitrary Lisp objects, however Org AST has recursive circular references, so printing might not always work well compared to interactive emacs-inspector views - Jake asked about programmatic way to check whether a given heading is a blocker for other headings. He is writing a package that re-implements taskwarrior's urgency system and wants to set higher urgency for tasks that are blockers. - I looked into ~org-entry-blocked-p~ and friends, and, given its expendability, there is no universal way to check this. The logic for blocking may be arbitrary - I thought maybe https://elpa.gnu.org/packages/org-edna.html . provides something, but nope - So, brute force checking whether other headings are blocked is probably the only 100% correct way - Sacha also mentioned https://github.com/mskorzhinskiy/org-linked-tasks/blob/master/org-linked-tasks.el (which she learned from https://www.reddit.com/r/emacs/comments/i9jv3l/orgedna_how_to_set_scheduled_todo_keyword_only/) - We went on talking about org-edna and how it has its own DSL to describe blockers and triggers. niklauz asked whether org-ql would make more sense to use. Although org-edna is much, much older than org-ql. - I briefly mentioned my limited usage of org-edna. I mostly use it to form chains of tasks to do one after another (fix one bug after fixing another or watch next movie in a series after previous). https://github.com/yantar92/emacs-config/blob/master/config.org#task-dependencies - niklauz asked about automatically setting a timestamp every time heading contents is changed - Similar discussions - https://org-roam.discourse.group/t/update-a-field-last-modified-at-save/321 - https://melpa.org/#/org-roam-timestamps - I remember this question being asked several times in the past. I even once replied with a code on reddit. (Long, long time ago) - This can be done by maintaining hash of the contents + setting a timestamp every time the hash changed (e.g. via save hooks) - One pitfall is that property drawer may fall within contents, which will create infinite update cycle. So, the property drawer, or, at least, the hash/update time property should be excluded from hash calculation - I did a quick code with rough implementation how to extract contents via elisp #+begin_src emacs-lisp (when-let* ((hd (org-element-lineage (org-element-at-point) 'headline t))) (when-let* ((cbeg (org-element-contents-begin hd))) (let ((beg cbeg)) (catch :exit (while (org-element-type-p (org-element-at-point beg) '(planning property-drawer)) (let ((newbeg (org-element-end (org-element-at-point beg)))) (when (equal newbeg beg) (throw :exit t)) (setq beg (org-element-end (org-element-at-point beg)))))) (buffer-substring-no-properties beg (org-element-end hd))))) #+end_src - Sacha asked whether there is Org element API to find end of metadata (like org-end-of-meta-data, but using parser) - There is none, even in my WIP rewrite that makes use of the parser much more actively. Not that is cannot be done, but I did not feel that it will give immediate benefits. - Sacha Chua invited me to talk about Org development during EmacsConf - Unlikely to happen this year - I am a bit annoyed by my lack of time. I can only work on Org outside my main work hours. And those are fairly strict. Combined with even less free time during my recent work trips, I am getting piles of backlog (I just have enough time to address patches and bugs, but nothing else). So, I do not quite want to add the task of preparing Emacsconf presentation on top of that (it will be 1-2 weeks worth of free time) - I also did less than I wanted to this year, especially on big code development projects, which is also not great. - For now, I'd rather try to focus on encouraging more people to help with bug fixing/patch reviews. That will free up some time for complex (and interesting) code changes I want to do. - (Note that I tried using EmacsConf for this purpose last year, with /some/, but limited success) - Reporting that I worked on bug reports and merged a couple of new features won't be too exciting - karthink asked about org-fold-show-context-detail customization - It provides a number of different ways to reveal folded text around point (minimal, local, lineage, etc) - But what karthink wants is showing ancestors (lineage) *and also descendants* - Such view is indeed not there - Maybe we should make org-fold-show-context-detail user-extendable one day (it should be more or less trivial patch) - There was a periodic question about supporting time zones in timestamp - Not much progress since summer (no update from the person who last volunteered) - As I mentioned during previous meetups, it is now up to writing patches - We have decided the syntax spec and roughly what needs to be done - https://list.orgmode.org/orgmode/[email protected]/ - what to do to get started on the patch - Continuing about formatting time stamps, Jeff Trull asked whether Org mode supports ISO8601 (https://en.wikipedia.org/wiki/ISO_8601) - Partially. Org mode timestamps YYYY-MM-DD are compatible with ISO-8601, but that standard defines several different ways to define timestamp, including omitting dates, omitting "-", providing week number instead of month, specifying seconds, etc. Org format is somewhat stricter. - Jeff later clarified that he is particularly interested in distinction between duration and timestamps in ISO-8601. ISO-8601 defines duration independent of calendar dates. For example, P4Y stands for "4 years". Org mode has a notion of durations, but it is not part of the actual Org syntax. Rather it is an optional feature that can be used when working with tables or columns. Here is what org-duration.el says: : ;; This library provides tools to manipulate durations. A duration : ;; can have multiple formats: : ;; : ;; - 3:12 : ;; - 1:23:45 : ;; - 1y 3d 3h 4min : ;; - 1d3h5min : ;; - 3d 13:35 : ;; - 2.35h - Funnily, Org mode defines durations in more lax way compared to timestamps - Also, see https://orgmode.org/manual/Durations-and-time-values.html :comments: [17:54] [Pedro A. Aranda : VIEWER]: Hi [17:54] [yaca : VIEWER]: hello [17:54] [Pedro A. Aranda : VIEWER]: Back to "real life" after the summer... [18:00] [Dave Marquardt : VIEWER]: Hello [18:00] [Thomas : VIEWER]: Hi all [18:00] yantar92 is now the presenter [18:01] [Rudy : VIEWER]: Howdy! [18:01] [Pedro A. Aranda : VIEWER]: Hi! [18:02] [Sacha Chua : VIEWER]: Hello hello! =) [18:02] [yantar92 : MODERATOR]: The latest Emacs news: https://sachachua.com/blog/2025/09/2025-09-08-emacs-news/ [18:03] [Sacha Chua : VIEWER]: The kiddo is back to virtual school, so I can help with taking notes again and stuff. [18:03] [Sacha Chua : VIEWER]: yantar92: did we want to use a separate Etherpad or the shared notes? [18:04] [yantar92 : MODERATOR]: Public Etherpad where we can write even after the meetup: https://pad.emacsconf.org/orgmeetup [18:06] [Pedro A. Aranda : VIEWER]: 😄 [18:07] [Sacha Chua : VIEWER]: EmacsConf CFP target date: next Friday (Sept 19) https://emacsconf.org/2025/cfp/ , could be nice to see what people are up to in terms of Org workflows [18:09] [Rudy : VIEWER]: Possible topics: ID link completions, multi-page HTML export [I started working on mine, in the meantime, with the amazing Org Element API], status update on the new LaTeX subsystem, status update on the "proper parsing" branch. 😊 [18:10] [Sacha Chua : VIEWER]: Also, I liked this workflow for using a dynamic hydra for refiling Org notes into buckets. Haven't tried it myself yet, but I've been wanting something like it for a while: https://gist.github.com/jsomers/ded472b1aa3b92d5fc8b35e92164eb07 [18:11] [yantar92 : MODERATOR]: [[info:org#Internal Links][org#Internal Links]] [18:11] [yantar92 : MODERATOR]: about internal links [18:11] [yantar92 : MODERATOR]: (including links to figures) [18:14] [Sacha Chua : VIEWER]: https://github.com/fniessen/org-html-themes and https://github.com/mrlee23/readtheorg have examples of how to use #+SETUPFILE: [18:14] [Sacha Chua : VIEWER]: ah, HTML anchors [18:14] [Pedro A. Aranda : VIEWER]: Where to you get the shortcut characters? This may confuse newbies... [18:14] [Sacha Chua : VIEWER]: I often use CUSTOM_ID in a subtree to set that for a heading [18:15] [Rudy : VIEWER]: Pedro: +1 (he should disable the special characters when teaching people about Org; it is confusing even for a veteran) [18:15] [Sacha Chua : VIEWER]: (if we're talking about HTML anchors, that is) [18:15] [Pedro A. Aranda : VIEWER]: 😉 [18:15] [Nick Anderson : VIEWER]: I see it [18:15] [Sacha Chua : VIEWER]: I can see yantar's screen [18:15] [Nick Anderson : VIEWER]: and its updating [18:16] [yantar92 : MODERATOR]: https://github.com/fniessen/org-html-themes [18:17] [Rudy : VIEWER]: I just style with CSS (all classes are documented), and it is pretty powerful. [18:17] [famubu : VIEWER]: You mean `#+HTML`? [18:17] [Sacha Chua : VIEWER]: CUSTOM_ID property, then you can org-store-link a reference to it and then org-insert-link and it will turn into ... [18:19] [Sacha Chua : VIEWER]: oh I have a post about non-heading anchors, like if you want to link to paragraph. You can #+ATTR_HTML: :id ... right before it. https://sachachua.com/blog/2025/02/adding-an-anchor-to-a-paragraph-in-org-mode-html-export/ [18:19] [Sacha Chua : VIEWER]: yeah, random hashes are not pretty =) [18:19] [Nick Anderson : VIEWER]: OH that is a great tip [18:19] [Sacha Chua : VIEWER]: I have a my-org-set-custom-id in https://sach.ac/dotemacs that sets the CUSTOM_ID based on the outline path of the headings [18:20] [yantar92 : MODERATOR]: [[info:org#Headlines in HTML export][org#Headlines in HTML export]] [18:20] [yantar92 : MODERATOR]: + you can use publishing for stable anchors [18:23] [Rudy : VIEWER]: Chinese :CUSTOM_ID: whatshamacallit 😊 [18:24] [famubu : VIEWER]: In markdown we can group together links at the end of the document like: ``` Hello [link][1]. Another [link[2]. [1]: https://www.example.com [2]: https://www.example.com/home.html ``` Is there a similar way in org? Right now I'm using a seperate `#+LINK` for each link and then using that name. [18:24] [Sacha Chua : VIEWER]: I have a validation function that complains if I have headings with the same outline path, and I have a function that assigns CUSTOM_IDs for all the headings in the buffer if they don't already have one =) [18:25] [Nick Anderson : VIEWER]: Footnotes [18:25] [Rudy : VIEWER]: Citations are heavyweight; perhaps footnotes. [18:25] [Nick Anderson : VIEWER]: https://orgmode.org/manual/Creating-Footnotes.html [18:26] [Rudy : VIEWER]: #+print_bibliography: [18:27] [Nick Anderson : VIEWER]: someday ill start using citations [18:28] [Harry : VIEWER]: with citeproc.el css works very nicely [18:28] [Sacha Chua : VIEWER]: Putting the links at the end tends to help with Markdown readability, but since Org Mode hides the link targets, I find I don't need that as much. It also helps with writing the text and then figuring out the links later, which I have an Org workflow for now. I can write [[lots of plain links]] and then run a function to go back and fill all those links in interactively. (https://sachachua.com/blog/2025/07/finding-unlinked-text/) [18:28] [Nick Anderson : VIEWER]: I use footnotes a fair amount, quite simple and effective. [18:29] [Sacha Chua : VIEWER]: I like using footnotes when I want to add extra text, not just a link. I have some JS that duplicates them as side notes. [18:29] [Nick Anderson : VIEWER]: org-footnote-new [18:30] [Rudy : VIEWER]: The footnotes can be also all at the end in the Org file, FYI. Ihor showed inline footnotes. [18:30] [Pedro A. Aranda : VIEWER]: Need to leave.... waiting til you are ready to continue with the fonts.. 😄 [18:30] [yantar92 : MODERATOR]: https://github.com/emacsorphanage/ox-pandoc [18:31] [niklauz : VIEWER]: Hi folks 😊 [18:31] [Rudy : VIEWER]: niklauz: Hi! [18:32] [Sacha Chua : VIEWER]: Custom tags... Oh, would you find custom Org link types useful? [18:34] [Sacha Chua : VIEWER]: Like, I use org-link-set-parameters to make a sketchThumb: link type that turns [[sketchThumb:filename.png]] into a {% sketchThumb ... %} shortcode for my blogging engine [18:35] [Sacha Chua : VIEWER]: oh that's interesting, I didn't know about using org-html-html5-elements for directly translating #+begin_... into tags. [18:36] [Sacha Chua : VIEWER]: What kinds of custom tags are you thinking about? Could you give an example? [18:36] [Rudy : VIEWER]: org-html-html5-fancy is not documented as #+options: [18:37] [Rudy : VIEWER]: [in C-h v] [18:37] [famubu : VIEWER]: Perhaps `(setq org-html-doctype "html5")`? [18:38] [Rudy : VIEWER]: I wonder when (if ever) will Org start defaulting to HTML5. 2050? 😊 [18:38] [famubu : VIEWER]: Like `#+FRIEND_NAME:` [18:38] [Sacha Chua : VIEWER]: what output do you want? [18:38] [famubu : VIEWER]: I don't if that's tag. [18:39] [Sacha Chua : VIEWER]: Oh, if you want to set the text and then have it substituted in your blog post, that sounds like Org macros [18:39] [famubu : VIEWER]: I wish to insert value of that `FRIEND_NAME` into appropriate spot inside the html template while exporting. [18:39] [Sacha Chua : VIEWER]: Yeah that definitely sounds like macros [18:40] [Rudy : VIEWER]: Fontification to confuse the enemy! [18:40] [Rudy : VIEWER]: And friends as well. 😁 [18:40] [Sacha Chua : VIEWER]: "Macro Replacement" in the Org manual, #+MACRO: name replacement text; $1, $2 are arguments, use like this: #+MACRO: friendname Phoebe Hello, {{{friendname}}} [18:41] [Rudy : VIEWER]: APL Org [18:43] [niklauz : VIEWER]: I've been looking more at LaTeX lately - are there clever ways to parameterized latex or strong guides on how to map Org elements to Latex elements? [18:44] [Sacha Chua : VIEWER]: Can probably also have it expand to raw HTML if you need to, using syntax like @@html:Text goes here@@ [18:44] [Rudy : VIEWER]: It would be great to have overlays with resolved macros (e.g. descriptive macros, like we have descriptive links). [18:45] [niklauz : VIEWER]: I've been poking at how to ... for example, use Org `#+USERNAME: myusername` in something like `Login provided to \bf{ {{{KEYWORD(USERNAME)}}} }`or something like that [18:45] [famubu : VIEWER]: I guess worg source is the best place to look for examples. [18:47] [Sacha Chua : VIEWER]: niklauz: ooooh, I can imagine how setting the properties and then including the template file could be pretty interesting [18:48] [niklauz : VIEWER]: Ah - so this may seems like a basic question, but are Latex commands usable without needing to be wrapped in a src/export block? [18:48] [niklauz : VIEWER]: (I don't know if I've ever seen that stated so clearly anywhere) [18:48] [niklauz : VIEWER]: Awsome! [18:49] [niklauz : VIEWER]: Org never ceases to amaze [18:50] [niklauz : VIEWER]: Would you be willing to show the example with `USERNAME` on your screen as an example ... wondering if it's possible to use PROPERTIES to interpolate or variablize LaTeX [18:50] [Sacha Chua : VIEWER]: I wonder if it would make sense to have something like that for HTML tags, like if < is the beginning of the line [18:51] [kickingvegas : VIEWER]: hi folks - since it looks like Org export to LaTeX is being covered, any guidance on #+CITE_EXPORT for basic references? I'm trying to cite a bib reference (@online, @software) with a url field and the url does not get printed out in the bibliography. [18:52] [niklauz : VIEWER]: @Sacha there's something like that for supporting HTML within Markdown, isn't there? [18:55] [kickingvegas : VIEWER]: @niklauz - you can insert raw HTML into Markdown [18:56] [Sacha Chua : VIEWER]: For environments, that's one of the reasons why I like the #+begin_myenvironment ... #+end_myenvironment style, since it exports to HTML fine as well. [18:59] [famubu : VIEWER]: I need to go now. Thanks everyone! [19:00] [Sacha Chua : VIEWER]: famubu: good luck with your blog! [19:00] [Rudy : VIEWER]: famubu: Cheers! [19:00] [Sacha Chua : VIEWER]: famubu: let me know at [email protected] when you post Emacs things so I can include them in Emacs News =) [19:01] [Sacha Chua : VIEWER]: Pedro just mentioned that he's back and ready to work on it again [19:05] [Sacha Chua : VIEWER]: Is there a good way to visualize the data structures? Sometimes edebug / prin1 isn't very helpful because the nested properties are very long [19:07] [Sacha Chua : VIEWER]: Ehh, maybe I should just get better at looking at the nesting =) [19:08] [yantar92 : MODERATOR]: https://github.com/mmontone/emacs-inspector [19:09] [Jake : VIEWER]: Also Emacs has a pretty printer function called pp [19:09] [Sacha Chua : VIEWER]: oh yeah, I actually have that [19:09] [Sacha Chua : VIEWER]: (pp - but it's pretty nested, so that's why I was getting confused) [19:09] [Jake : VIEWER]: Right, the references would be confusing [19:10] [Sacha Chua : VIEWER]: pp hides cyclic references (shows #0, #1), which is nice [19:10] [Rudy : VIEWER]: The Org Element API really elevates Org, IMO. Really good stuff. Easy to use, fast, etc. [19:14] [Jake : VIEWER]: I'm trying to design a function that checks whether the heading at point is blocking something else, sort of an inverse of org-entry-blocked-p. I have some ideas, but I'm curious to know how other people would approach the problem. [19:14] [Jake : VIEWER]: My first thought: trigger blocking hooks for every heading in the agenda, and then check org-block-entry-blocking. [19:15] [Sacha Chua : VIEWER]: Jake: Are you using something like org-edna for the task dependencies? [19:15] [Sacha Chua : VIEWER]: or just the hierarchy? [19:15] [Rudy : VIEWER]: kickingvegas: You can use out-of-the-box citations, if you do not care about the style. But if you want to publish, e.g. journal or instructor tells you what style they are expecting. For that, just download CSL and plop that one line into your Org. I have used it a lot at uni, and it works well. [19:15] [Jake : VIEWER]: Yeah, I am using org-edna. [19:15] [Nick Anderson : VIEWER]: Search for like http [19:15] [yantar92 : MODERATOR]: https://editor.citationstyles.org/searchByExample/ [19:16] [yantar92 : MODERATOR]: https://github.com/andras-simonyi/citeproc-el [19:16] [Jake : VIEWER]: Maybe just searching BLOCKER props for the current entry's ID would be enough for the way I use org-edna. [19:16] [Sacha Chua : VIEWER]: kickingvegas: ... or hack something around the Org export to modify the output? 😉 [19:17] [Sacha Chua : VIEWER]: Jake: sounds promising [19:17] [Sacha Chua : VIEWER]: kickingvegas: the CSL does sound like the proper way to do it [19:19] [Jake : VIEWER]: Yeah, I think that the blocking logic in org mode is too flexible for my solution to be as general as I'd like. [19:20] [Sacha Chua : VIEWER]: Jake: https://github.com/mskorzhinskiy/org-linked-tasks/blob/master/org-linked-tasks.el uses org-ql to do property searches for linked tasks, if you're looking for a similar thing [19:21] [niklauz : VIEWER]: I've wondered if org-ql could be setup for use within Org-EDNA ... is that feasible? [19:21] [niklauz : VIEWER]: I imagine that if org-ql existed first, that's probably how it would've been built. [19:21] [Sacha Chua : VIEWER]: https://www.reddit.com/r/emacs/comments/i9jv3l/orgedna_how_to_set_scheduled_todo_keyword_only/ is a relevant Reddit thread [19:22] [Sacha Chua : VIEWER]: that org-edna--finder-cache looks potentially interesting too [19:23] [niklauz : VIEWER]: Wow, Ihor you make is look /almost/ straight-forward hahah [19:24] [Sacha Chua : VIEWER]: the docstring of the cache notes that it doesn't work for relative context, though [19:24] [niklauz : VIEWER]: FWIW I believe org-ql includes caching [19:26] [Jake : VIEWER]: For context: I've written a package that reimplement's taskwarrior's urgency system, and I was looking for ways to make blocking tasks more urgent. Since I may release the package, I was exploring how I might make that work for other users. [19:26] [Sacha Chua : VIEWER]: if you mainly use IDs and the performance of the property search doesn't work out, it might be interesting to have a function that can add an explicit backlink for you or something [19:27] [Jake : VIEWER]: Not necessarily based on org-edna. [19:27] [Jake : VIEWER]: Just wanted to account for users using org-edna like I do. [19:28] [Sacha Chua : VIEWER]: right, the Reddit thread was about having multiple tasks collectively trigger another task [19:28] [Jake : VIEWER]: So I'd have the org-urgency package plus an org-urgency-edna package or something for the integration with org-edna. [19:29] [Jake : VIEWER]: I might advise org-edna functions and override org-get-heading to include a market [19:29] [Jake : VIEWER]: marker* [19:30] [Jake : VIEWER]: ah, right [19:30] [Sacha Chua : VIEWER]: mmm, make it work for your use case and then see if other people are motivated enough to help get it working for theirs? =) [19:31] [Jake : VIEWER]: Probably the right thing to do for now, yeah [19:31] [Sacha Chua : VIEWER]: aha, support for the explicit backlink property - it works for yantar92 😉 [19:32] [Sacha Chua : VIEWER]: oh actually, no, that's just a forward link to the blocker [19:33] [Sacha Chua : VIEWER]: but his config does set up the trigger at the same time, so yeah, explicit links [19:33] [Jake : VIEWER]: I have to split. I appreciate the help and advice! [19:34] [niklauz : VIEWER]: Is there a good MODIFICATION or CONTENTHASH updater solution for Org Headlines? [19:35] [Sacha Chua : VIEWER]: do you mean setting a property with modification date or hash of the contents? [19:35] [Nick Anderson : VIEWER]: https://org-roam.discourse.group/t/update-a-field-last-modified-at-save/321 [19:35] [niklauz : VIEWER]: a general purpose form of this, https://melpa.org/#/org-roam-timestamps [19:35] [niklauz : VIEWER]: ah, yes [19:37] [niklauz : VIEWER]: I wonder why there isn't a consensus general purpose package to provide this? Could it be everyone has solved it as a one-off? [19:38] [niklauz : VIEWER]: oh, haven't seen an org-element example - may you paste that code snippet into chat please? [19:39] [niklauz : VIEWER]: I have a messy hand-jammed solution in my config heheh [19:39] [yantar92 : MODERATOR]: (when-let* ((hd (org-element-lineage (org-element-at-point) 'headline 'include-self))) ;; caveat: also need to exclude PROPERTIES drawer itself to avoid hashing the hash ;; caveat 2: need to make sure that context-begin/end is non-nil (let ((chash (md5 (current-buffer) (org-element-contents-begin hd) (org-element-contents-end hd)))) (org-entry-put "CHASH" chash))) [19:39] [niklauz : VIEWER]: Cheers! [19:40] [Sacha Chua : VIEWER]: is there an org-element API equivalent of org-end-of-meta-data? [19:43] [Sacha Chua : VIEWER]: I tend to use org-end-of-meta-data + org-end-of-subtree (or org-heading-regexp) a lot to get just the text of a subtree, but it would be neat to have an org-element way of getting the text. =) [19:47] [yantar92 : MODERATOR]: (when-let* ((hd (org-element-lineage (org-element-at-point) 'headline t))) (when-let* ((cbeg (org-element-contents-begin hd))) (let ((beg cbeg)) (while (org-element-type-p (org-element-at-point beg) '(planning property-drawer)) (setq beg (org-element-end (org-element-at-point beg)))) (buffer-substring-no-properties beg (org-element-end hd))))) [19:50] [yantar92 : MODERATOR]: (when-let* ((hd (org-element-lineage (org-element-at-point) 'headline t))) (when-let* ((cbeg (org-element-contents-begin hd))) (let ((beg cbeg)) (catch :exit (while (org-element-type-p (org-element-at-point beg) '(planning property-drawer)) (let ((newbeg (org-element-end (org-element-at-point beg)))) (when (equal newbeg beg) (throw :exit t)) (setq beg (org-element-end (org-element-at-point beg)))))) (buffer-substring-no-properties beg (org-element-end hd))))) [19:53] [niklauz : VIEWER]: Put me down for 2026 😉 [19:54] [niklauz : VIEWER]: When is the schedule mostly firmed up? [19:55] [niklauz : VIEWER]: Perfecto [19:57] [niklauz : VIEWER]: The state of Emacs and State of Org are must watch 😁 [19:58] [karthink : VIEWER]: I have a question about org-fold-show-context-detail. Is there no view that shows the current entry in full but a sparse-tree view of its position in the document? i.e. show its direct ancestors and descendants as headings-only. [19:58] [niklauz : VIEWER]: I recall last year there was a mention of TZ aware time-stamps, is that still WIP? [19:58] [niklauz : VIEWER]: Karthik FTW [19:58] [Rudy : VIEWER]: LaTeX preview! [19:58] [Rudy : VIEWER]: +1 Karthink FTW! [20:00] [Rudy : VIEWER]: Gosh, 20:00. [20:00] [Rudy : VIEWER]: Gotta go! [20:00] [Rudy : VIEWER]: [Lecture starting.] [20:00] [Rudy : VIEWER]: Cheers and thanks everyone! [20:00] [Thomas : VIEWER]: I need to leave. Thank you! [20:02] [niklauz : VIEWER]: Was there a spec adopted? [20:03] [niklauz : VIEWER]: (just curious what it'll look like) [20:04] [niklauz : VIEWER]: Ah OK, great! [20:05] [niklauz : VIEWER]: Yeah, all the time/clock math will be a lot [20:06] [niklauz : VIEWER]: Yup - OK thanks for the update [20:06] [Jeff Trull : VIEWER]: Do we support iso 8601 timestamps in any way [20:06] [Nick Anderson : VIEWER]: Thanks so much for organizing and doing these. [20:08] [Jeff Trull : VIEWER]: I'm interested in the distinction between "timepoint" and "duration" also. It looks like org tables understand duration (at least in calculations), and we have org-duration.el [20:09] [Jeff Trull : VIEWER]: It's interesting for clock tables [20:10] [Jeff Trull : VIEWER]: I make timesheets for invoices in org and it's always a question what e.g. 03:47 represents - a time or a duration [20:17] [yantar92 : MODERATOR]: Input duration values must be of the form ‘HH:MM[:SS]’, where seconds are optional [20:18] [yantar92 : MODERATOR]: 3.5.4 Durations and time values in the manual [20:18] [Jeff Trull : VIEWER]: This is interesting for export reasons too; ooxml (for example) has a separate format option for timestamps and durations that displays and calculates with them differently [20:18] [Jeff Trull : VIEWER]: It's strange because the textual representation is the same but the calculation behavior is different and it's a function of the format not the contents [20:19] [Jeff Trull : VIEWER]: Thanks for the tour! [20:21] [niklauz : VIEWER]: Nothing more from me - thanks Ihor 😊 [20:21] [Jeff Trull : VIEWER]: Next time we can talk about grid-table 😊 [20:21] [kickingvegas : VIEWER]: thanks! [20:21] [Jeff Trull : VIEWER]: Thanks Ihor! [20:21] [zaimon : VIEWER]: Thanks everyone [20:21] [Jeff Trull : VIEWER]: We don't have to do that now haha [20:21] [karthink : VIEWER]: Thanks for the meetup [20:22] [Jacob S. Gordon : VIEWER]: Thanks Ihor! :end: -- Ihor Radchenko // yantar92, Org mode maintainer, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
