Eli Zaretskii <e...@gnu.org> writes: >> >> In addition, `org-kill-line' acts specially in certain scenarios: >> >> >> >> For >> >> * Heading <point> text :tag1:tag2: >> >> >> >> `org-kill-line' will keep and re-align ":tag1:tag2:": >> >> >> >> * Heading <point> :tag1:tag2: >> >> >> >> It would be nice if we could express such behavior without overriding >> >> the `kill-line' command. >> ... >> I am not sure if I like the idea of text property - marking all the tags >> in buffer with text property is expensive. > > Then perhaps just a special value for buffer-invisibility-spec, or > some other simple variation of a property Org already uses?
We may have a misunderstanding here. In "* Heading text :tag1:tag2:", everything is visible yet Org needs to protect ":tag1:tag2: from being killed by `kill-line', but not from `kill-whole-line'. Moreover, the behaviour also depends on the point position - if point is inside ":tag1:tag2:", we fall back to the default behaviour. And the whole "special" behaviour can also be switched off by flipping `org-special-ctrl-k'. Invisibility has nothing to do with this need. >> What about something like `end-of-visible-line-function'? > > That is also a possibility, but it will then affect kill-line > _anywhere_ in the buffer, whereas a text property can have a more > localized effect. Are you sure kill-line will need this customization > on the whole buffer? Applying text property is not free - (1) we need to do it across the whole buffer, which scales poorly; (2) we need to keep it updated as the buffer changes, which scales even worse. In addition, adding more text properties slow down redisplay, which Org already strains to its limits. -- Ihor Radchenko // yantar92, Org mode contributor, 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>