+ /// move one step backwards
+ bool posBackward();
+ /// move one step forward
+ bool posForward();
+ /// move visually one step to the right
+ /**
+ * @note: This method may move into an inset unless skip_inset == true.
+ * @note: This method may move into a new paragraph.
+ * @note: This method may move out of the current slice.
+ * @return: true if moved, false if not moved
+ */
+ bool posVisRight(bool skip_inset = false);
+ /// move visually one step to the left
+ /**
+ * @note: This method may move into an inset unless skip_inset == true.
+ * @note: This method may move into a new paragraph.
+ * @note: This method may move out of the current slice.
+ * @return: true if moved, false if not moved
+ */
+ bool posVisLeft(bool skip_inset = false);
+ /// move visually to next/previous row
+ /**
+ * Assuming we were to keep moving left (right) from the current cursor
+ * position, place the cursor at the rightmost (leftmost) edge of the
+ * new row to which we would move according to visual-mode cursor movement.
+ * This could be either the next or the previous row, depending on the
+ * direction in which we're moving, and whether we're in an LTR or RTL
+ * paragraph.
+ * @note: The new position may even be in a new paragraph.
+ * @note: This method will not move out of the current slice.
+ * @return: false if not moved (no more rows to move to in given direction)
+ * @return: true if moved
+ */
+ bool posVisToNewRow(bool movingLeft);
+ /// move to right or left extremity of the current row
+ void posVisToRowExtremity(bool left);