Currently, output backends track the cursor behind the scenes. This results in some amount of code duplication, for example the handling of hidden cursors, every backend handles in its own unique way, some don't do it correctly. Another issue is that output backend interact with other components behind the back. This can be a problem for tasks such as backing the cursor with an output layer.
This change introduces explicit output cursor manipulation APIs in the Output class. There's a good chance that it's going to be revised more in the future as part of streamlining output layer manipulation apis.
With the proposed changes, the workspace would need to call Output::setCursor() or Output::moveCursor() to set/unset or move the cursor, respectively.