The current implementation does not allow a call to
cm.addSelection() to pass in a range that falls within an atomic TM (and documentation makes this wonderfully clear). Note that I’m not saying the current behavior is wrong – just proposing a change.
It’s clear that the cursor can’t fall within an atomic range (without violating the semantics of
atomic), and certainly, if I can’t put my cursor inside an atomic range, I could never manually select a range contained with it it. But it’s less clear why a programmatically-defined selection couldn’t fall within that range.
This change wouldn’t impact cursor movement, or non-API selection. I also can’t think of a use-case in which an API-selected region relies on this being forbidden. This would be enormously useful for a project I’m contributing to, which will allow any CM instance to turn into a block-based editor if a (traditional) parser for the language is available. Since we’re replacing code with DOM trees, we’d like to allow copy/paste on subtrees, which fall within a the range of the TextMarker.
I’m sure there are angles I’m missing, but if this change is doable it would allow us to use CM’s wonderful selection API instead of rolling our own.