terminalCursor property

Cursor? get terminalCursor

Returns a Cursor for rendering a real cursor in a TUI program. This requires that useVirtualCursor is set to false.

Implementation

Cursor? get terminalCursor {
  if (useVirtualCursor || !_focused) return null;

  final promptWidth = stringWidth(prompt);

  if (multiline) {
    final lines = _visibleTextViewLines();
    final cursorRow = lines.indexWhere((line) => line.hasCursor);
    if (cursorRow < 0 || cursorRow >= lines.length) return null;
    final line = lines[cursorRow];
    final cursorCol = (_pos - line.charOffset).clamp(0, line.graphemeCount);
    var xOffset = promptWidth;
    final graphemes = uni.graphemes(line.text).toList(growable: false);
    for (var i = 0; i < cursorCol && i < graphemes.length; i++) {
      xOffset += runeWidth(uni.firstCodePoint(graphemes[i]));
    }
    final yOffset = cursorRow;

    return Cursor(
      position: Position(xOffset, yOffset),
      color: styles.cursor.color,
      shape: styles.cursor.shape,
      blink: styles.cursor.blink,
    );
  }

  var xOffset = _pos - _offset + promptWidth;
  if (width > 0) {
    xOffset = math.min(xOffset, width + promptWidth);
  }

  return Cursor(
    position: Position(xOffset, 0),
    color: styles.cursor.color,
    shape: styles.cursor.shape,
    blink: styles.cursor.blink,
  );
}