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,
);
}