[HN Gopher] Tree-sitter grammar for org-mode
       ___________________________________________________________________
        
       Tree-sitter grammar for org-mode
        
       Author : happy-dude
       Score  : 101 points
       Date   : 2022-04-07 15:37 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | sfink wrote:
       | Offtopic, but I use org mode for my notes files (both general and
       | technical), and I've never really figured out how to use it
       | effectively.
       | 
       | My pre-org notes file was just a giant text file with entries
       | delimited by manually-entered '--------------' lines. I stuck a
       | topic in each entry for searchability and then the rest was
       | freeform text. It worked pretty well.
       | 
       | org mode gives me more power, but it's getting a little
       | unmanageable. I find myself expanding and collapsing sections a
       | lot, especially when just trying to find the right place to add a
       | new entry. (I'm using a hierarchy rather than the flat append-
       | only list.) The file is pretty huge at this point, and I split it
       | up once but that broke my most common usage of just isearching
       | through the entire file, and it was annoying to have to load
       | multiple files to do a complete search. I had links between
       | files, but that didn't help for searching.
       | 
       | I imagine there are tips and tricks to resolve all of my issues
       | and nuisances, but I've never taken the time to figure them out.
       | Is there a good workflow description somewhere that I should be
       | looking at? It's hard to beat a basic text file, but after a
       | decade or so it has gotten pretty big and I'd like to eg be able
       | to cluster related things together so I can purge obsolete stuff.
       | 
       | Maybe my problem is that org mode is intended for organizing
       | things, and my use case is too free-form?
        
         | drunkpotato wrote:
         | I have a daily.org file I use to capture meeting notes and
         | quick notes into. org-mode automatically keeps it organized as
         | a datetree. I set all my other org files to archive into a
         | subheader of the day it's archived (or done, for todos). So far
         | I like it, but I've only been doing it for a few months. We'll
         | see when it gets to years.
         | 
         | One nice thing is it's easy to see at a glance roughly what I
         | did in a given week or month. It also doesn't insert much
         | process into my flow, which I appreciate.
        
         | tconfrey wrote:
         | Scaling your system is always going to be a problem, no matter
         | what tools you use.
         | 
         | I hear you on isearching. To support multiple files you could
         | look at ag.el for fast cross-file search (although not
         | incremental like isearch).
         | 
         | Alternately you can use :tags: to add a different dimension of
         | information by which things can be grouped. org-agenda can then
         | be used to see items by tag (also since they are just text you
         | can search them in a buffer). I use org-agenda in 'F'ollow mode
         | whereby a second buffer shows the selected agenda item in its
         | original context. It helps visualize where things are while
         | navigating.
         | 
         | The new hotness, ala org-roam, is bidirectional linking with
         | tiny files. That would probably be a pain to migrate to, and
         | isn't really aligned with your free-form model. But it might be
         | the way to scale over the long term.
        
         | hnrj95 wrote:
         | try org roam
        
       | spicybright wrote:
       | I don't care for org mode but this could be huge for people that
       | do.
       | 
       | I find being able to open + edit notes quickly helps my thought
       | process more, so hopefully this can help with that.
        
         | lazyier wrote:
         | > I find being able to open + edit notes quickly helps my
         | thought process more,
         | 
         | I use org with roam in Doom Emacs. The org roam notes directory
         | is backed by git.
         | 
         | https://www.orgroam.com/
         | 
         | It allows for using a Zettelkasten style approach to note
         | taking inside of Emacs. The basic idea is small quick notes
         | that are cross referenced, indexed, and searchable.
         | 
         | Doom Emacs is like Spacemacs were access to commands are
         | activated through hitting the space bar while in Evil's command
         | mode.
         | 
         | This way if you stumble across a link or something notable or
         | get an idea you want to hit later it takes about 15-20 seconds
         | to generate a new note card, link it to other ones, and then
         | get back to whatever you were doing before you got distracted.
         | 
         | And then later you can go back and refine and expand on the
         | idea with more note cards and have something you can easily use
         | for a future reference.
         | 
         | Nvim has it's own Zettelkasten-style note taking plugins, of
         | course. But what sets Org apart, IMO, is just how flexible and
         | FAST it is as a text-based UI for writing documents. Makes
         | using MarkDown seem plodding in comparison.
         | 
         | My favorite is, though, reStructuredText. RST was a work of
         | genius.
         | 
         | But the clincher for Org, when compared to RST, ends up being
         | Org-babel. The ability to embed multiple formats into a single
         | document, be able to quickly render those other documents to
         | separate files, and being able to execute source code and
         | maintain state between multiple src segments is crazy
         | effective. Completely awesome if you want to get into literate
         | programming.
         | 
         | This turns your personal text-based notebook into having
         | capabilities akin to Wolfwam or Jupyter Notebooks. Can even
         | turn your indexed notes into an interface for Jupyter or
         | Wolfram Mathmatica if you really want to.
         | 
         | It's pretty nuts.
         | 
         | Having something like that for NeoVim would be extremely nice.
         | With new versions of Emacs having Wayland and Native
         | Compilation it has improved performance significantly, but I
         | don't think it will ever approach to just how fast NeoVim can
         | be.
        
           | bananamerica wrote:
           | > Having something like that for NeoVim would be extremely
           | nice. With new versions of Emacs having Wayland and Native
           | Compilation it has improved performance significantly, but I
           | don't think it will ever approach to just how fast NeoVim can
           | be.
           | 
           | Always good to remind that emacsclient makes starting an
           | Emacs frame/window instantaneous.
        
             | ossusermivami wrote:
             | As someone who is fluent (but rather more emacs) in both I
             | got to say neovim is much faster to use and not just to
             | start. Emacs does a lot more tho so I don't think it's a
             | fair comparaison....
             | 
             | Still enjoying switching between both,
        
           | justinhj wrote:
           | I'm a long time emacs and org-mode user but I switched to
           | neovim for 90% of my development work. I still use emacs for
           | org-mode and I doubt I would ever use org-mode in neovim
           | because it relies on being implemented in the entire emacs
           | system and the emacs lisp language . Nothing short of
           | embedding emacs on neovim would make it tenable. I have the
           | same problem in the other direction, viper is not a
           | substitute for neovim.
        
             | omaranto wrote:
             | > I have the same problem in the other direction, viper is
             | not a substitute for neovim.
             | 
             | You should give Evil a try, people say it's much better
             | than Viper. At the very least Evil emulates Vim, while
             | Viper just emulates vi.
        
       | happy-dude wrote:
       | From the readme:
       | 
       | > Org grammar for tree-sitter. It is not meant to implement
       | emacs' orgmode parser, but to implement a grammar that can
       | usefully parse org files to be used in neovim and any library
       | that uses tree-sitter parsers.
       | 
       | This grammar is in active development and is being used by nvim-
       | orgmode/orgmode [1], a org-mode neovim plugin.
       | 
       | Some additional resources some might find useful:
       | 
       | * Org Syntax - https://orgmode.org/worg/dev/org-syntax.html
       | 
       | * EBNF grammar - https://github.com/200ok-ch/org-
       | parser/blob/master/resources...
       | 
       | * Tree-sitter - https://tree-sitter.github.io/tree-sitter/
       | 
       | [1] https://github.com/nvim-orgmode/orgmode
        
         | tgbugs wrote:
         | We're in the middle of updating the org syntax document. I've
         | been preoccupied and haven't gotten a chance to take another
         | pass, but there should be a new version out in the next month
         | or so. See also [0].
         | 
         | 0.
         | https://github.com/tgbugs/laundry/tree/master/laundry/gramma...
        
         | milisims wrote:
         | I'd had the 1.0 commit sitting on my machine for a while, this
         | post gave me the activation energy to bump it. The grammar is
         | fairly stable now.
        
       | tconfrey wrote:
       | This is very exciting.
       | 
       | IMO the Tools For Thought (#TFT) ecosystem is crying out for a
       | standard interchange format to break down the silos. Org-mode
       | could be that format. It's not just an outliner format, it's the
       | best markup[1] _and_ supports pretty much everything you need for
       | journaling /task-management/project-management etc.
       | 
       | What's been missing thus far is a single canonical definition
       | that everyone can build on (beyond the org-mode source code). I'd
       | love to see this be the reference implementation of Karl Voits
       | Orgdown proposal [2]. (BTW there was a recent relevant discussion
       | here [3])
       | 
       | [1] https://karl-voit.at/2017/09/23/orgmode-as-markup-only
       | 
       | [2] https://gitlab.com/publicvoit/orgdown
       | 
       | [3] https://news.ycombinator.com/item?id=30879327
        
         | preek wrote:
         | All good points. As a daily user of Org mode, I couldn't agree
         | more.
         | 
         | Hence, we are working on building a parser that also acts as a
         | canonical definition here: https://github.com/200ok-ch/org-
         | parser
        
           | tconfrey wrote:
           | Thanks @preek. I mentioned you guys in [3] above. BTW I'm
           | actually using this parser: https://github.com/orgapp/orgajs
           | for my product (https://braintool.org), so there are other
           | choices. I guess the key thing is a single well defined
           | grammar.
           | 
           | Is GDrive syncing working in Organice these days? I've wanted
           | to demonstrate interop with BrainTool (which syncs to GDrive
           | files) but last I checked there was some bug.
        
         | scottrblock wrote:
         | I agree! I'm the creator of phonetonote [1], which tries to
         | integrate with different tools for thought. I just started a
         | `tft-interop` repo [2] with similar goals. We're just getting
         | started thinking through how to make the TFT structures (edn
         | mostly) more interoperable. I'm not personally an org-mode
         | user, but agree it could be a good format to parse these trees
         | in and out of. I've mostly been thinking about OPML so far.
         | Feel free to hop into the discussions where we're sorting
         | through these ideas -- https://github.com/phonetonote/tft-
         | interop/discussions/2
         | 
         | [1] https://phonetonote.com [2]
         | https://github.com/phonetonote/tft-interop/
        
         | altgans wrote:
         | Imo the problem with Org-mode is that it "afterloads" all the
         | complexity into the :PROPERTIES: drawers. Those quickly
         | transform into unreadable hideous beasts of metadata that
         | _require_ you to use Emacs. Every plugin developer likes to
         | create their own set of properties, which directly leads to the
         | problem of "multiple Markdown flavours". Extensibility is not
         | always good.
        
           | tconfrey wrote:
           | Thats a fair point. But I'd argue that as long as there's a
           | large enough core of agreed upon functionality having app-
           | specific data packed away and carried for free (as plain
           | text) is not a bad thing.
           | 
           | My app, for example, sticks a couple of useful pieces of data
           | in properties but when it creates a TODO item or adds a
           | [[link]] or *heading that semantic meaning is available to
           | any other outliner or task management app using the same
           | backing store.
           | 
           | I guess the argument is that org-mode encompasses a large
           | enough set of core components that its the best place to
           | standardize what can be standard in this PKM/Productivity/TFT
           | space.
        
       | nonrandomstring wrote:
       | Great to have a generalised parser to help Org-up (org as a more
       | widespread markup language) to florish. I'd really like to see
       | Gemini adopt instead/(alongside) its markup.
        
       ___________________________________________________________________
       (page generated 2022-04-07 23:00 UTC)