TextDocument: don't schedule rebuild when empty
TextDocument: shift highlights
Revamp merged events