enableRawMode method

  1. @override
void enableRawMode()
override

Enables raw mode which allows us to process each keypress as it comes in. https://viewsourcecode.org/snaptoken/kilo/02.enteringRawMode.html

Implementation

@override
void enableRawMode() {
  final pInMode = calloc<Uint32>();
  final pOutMode = calloc<Uint32>();
  try {
    if (GetConsoleMode(inputHandle, pInMode).value) {
      _origInputMode ??= pInMode.value;
      final dwInMode =
          (pInMode.value &
              ~(ENABLE_ECHO_INPUT |
                  ENABLE_PROCESSED_INPUT |
                  ENABLE_LINE_INPUT |
                  ENABLE_WINDOW_INPUT)) |
          ENABLE_VIRTUAL_TERMINAL_INPUT;
      SetConsoleMode(inputHandle, CONSOLE_MODE(dwInMode));
    }
    if (GetConsoleMode(outputHandle, pOutMode).value) {
      _origOutputMode ??= pOutMode.value;
      final dwOutMode = pOutMode.value | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
      SetConsoleMode(outputHandle, CONSOLE_MODE(dwOutMode));
    }
  } finally {
    calloc.free(pInMode);
    calloc.free(pOutMode);
  }
}