setParams method
Sets SGR parameter values and optional separators.
If separators is set, it must match params length and should contain
separator bytes such as ; and :.
Implementation
void setParams(List<int> params, {String? separators}) {
_ensureOpen();
if (separators != null && separators.length != params.length) {
throw ArgumentError.value(
separators,
'separators',
'Must have same length as params.',
);
}
final paramsPtr = calloc<ffi.Uint16>(params.length);
ffi.Pointer<ffi.Char> separatorsPtr = ffi.nullptr;
ffi.Pointer<ffi.Char>? allocatedSeparators;
try {
for (var i = 0; i < params.length; i++) {
final value = params[i];
if (value < 0 || value > 0xFFFF) {
throw RangeError.range(value, 0, 0xFFFF, 'params[$i]');
}
paramsPtr[i] = value;
}
if (separators != null) {
allocatedSeparators = calloc<ffi.Char>(separators.length);
for (var i = 0; i < separators.length; i++) {
final value = separators.codeUnitAt(i);
if (value > 0xFF) {
throw RangeError.range(value, 0, 0xFF, 'separators[$i]');
}
allocatedSeparators[i] = value;
}
separatorsPtr = allocatedSeparators;
}
final result = bindings.ghostty_sgr_set_params(
_handle,
paramsPtr,
separatorsPtr,
params.length,
);
_checkResult(result, 'ghostty_sgr_set_params');
} finally {
calloc.free(paramsPtr);
if (allocatedSeparators != null) {
calloc.free(allocatedSeparators);
}
}
}