diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ca7bfb..f53a53f 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.61 + +- New Version 0.0.61 + + ## 0.0.60 - New Version 0.0.60 diff --git a/lib/fork/mason_logger/src/ffi/unix_terminal.dart b/lib/fork/mason_logger/src/ffi/unix_terminal.dart index 3d31c05..a0732ef 100644 --- a/lib/fork/mason_logger/src/ffi/unix_terminal.dart +++ b/lib/fork/mason_logger/src/ffi/unix_terminal.dart @@ -13,7 +13,9 @@ import 'package:general_lib/fork/mason_logger/src/ffi/terminal.dart'; class UnixTerminal implements Terminal { UnixTerminal() { - _lib = Platform.isMacOS ? DynamicLibrary.open('/usr/lib/libSystem.dylib') : DynamicLibrary.open('libc.so.6'); + _lib = Platform.isMacOS + ? DynamicLibrary.open('/usr/lib/libSystem.dylib') + : DynamicLibrary.open('libc.so.6'); _tcgetattr = _lib.lookupFunction( 'tcgetattr', @@ -35,7 +37,8 @@ class UnixTerminal implements Terminal { void enableRawMode() { final origTermIOS = _origTermIOSPointer.ref; final newTermIOSPointer = calloc() - ..ref.c_iflag = origTermIOS.c_iflag & ~(_BRKINT | _ICRNL | _INPCK | _ISTRIP | _IXON) + ..ref.c_iflag = + origTermIOS.c_iflag & ~(_BRKINT | _ICRNL | _INPCK | _ISTRIP | _IXON) ..ref.c_oflag = origTermIOS.c_oflag & ~_OPOST ..ref.c_cflag = (origTermIOS.c_cflag & ~_CSIZE) | _CS8 ..ref.c_lflag = origTermIOS.c_lflag & ~(_ECHO | _ICANON | _IEXTEN | _ISIG) diff --git a/lib/fork/mason_logger/src/ffi/windows_terminal.dart b/lib/fork/mason_logger/src/ffi/windows_terminal.dart index 3488d9a..aebcfc6 100644 --- a/lib/fork/mason_logger/src/ffi/windows_terminal.dart +++ b/lib/fork/mason_logger/src/ffi/windows_terminal.dart @@ -15,13 +15,23 @@ class WindowsTerminal implements Terminal { @override void enableRawMode() { - const dwMode = (~CONSOLE_MODE.ENABLE_ECHO_INPUT) & (~CONSOLE_MODE.ENABLE_PROCESSED_INPUT) & (~CONSOLE_MODE.ENABLE_LINE_INPUT) & (~CONSOLE_MODE.ENABLE_WINDOW_INPUT); + const dwMode = (~CONSOLE_MODE.ENABLE_ECHO_INPUT) & + (~CONSOLE_MODE.ENABLE_PROCESSED_INPUT) & + (~CONSOLE_MODE.ENABLE_LINE_INPUT) & + (~CONSOLE_MODE.ENABLE_WINDOW_INPUT); SetConsoleMode(inputHandle, dwMode); } @override void disableRawMode() { - const dwMode = CONSOLE_MODE.ENABLE_ECHO_INPUT | CONSOLE_MODE.ENABLE_EXTENDED_FLAGS | CONSOLE_MODE.ENABLE_INSERT_MODE | CONSOLE_MODE.ENABLE_LINE_INPUT | CONSOLE_MODE.ENABLE_MOUSE_INPUT | CONSOLE_MODE.ENABLE_PROCESSED_INPUT | CONSOLE_MODE.ENABLE_QUICK_EDIT_MODE | CONSOLE_MODE.ENABLE_VIRTUAL_TERMINAL_INPUT; + const dwMode = CONSOLE_MODE.ENABLE_ECHO_INPUT | + CONSOLE_MODE.ENABLE_EXTENDED_FLAGS | + CONSOLE_MODE.ENABLE_INSERT_MODE | + CONSOLE_MODE.ENABLE_LINE_INPUT | + CONSOLE_MODE.ENABLE_MOUSE_INPUT | + CONSOLE_MODE.ENABLE_PROCESSED_INPUT | + CONSOLE_MODE.ENABLE_QUICK_EDIT_MODE | + CONSOLE_MODE.ENABLE_VIRTUAL_TERMINAL_INPUT; SetConsoleMode(inputHandle, dwMode); } } diff --git a/lib/fork/mason_logger/src/mason_logger.dart b/lib/fork/mason_logger/src/mason_logger.dart index 3a4167e..e19b23e 100644 --- a/lib/fork/mason_logger/src/mason_logger.dart +++ b/lib/fork/mason_logger/src/mason_logger.dart @@ -24,7 +24,8 @@ String? _detailStyle(String? m) => darkGray.wrap(m); String? _infoStyle(String? m) => m; String? _errStyle(String? m) => lightRed.wrap(m); String? _warnStyle(String? m) => yellow.wrap(styleBold.wrap(m)); -String? _alertStyle(String? m) => backgroundRed.wrap(styleBold.wrap(white.wrap(m))); +String? _alertStyle(String? m) => + backgroundRed.wrap(styleBold.wrap(white.wrap(m))); String? _successStyle(String? m) => lightGreen.wrap(m); /// {@template log_theme} @@ -184,13 +185,16 @@ class Logger { String prompt(String? message, {Object? defaultValue, bool hidden = false}) { final hasDefault = defaultValue != null && '$defaultValue'.isNotEmpty; final resolvedDefaultValue = hasDefault ? '$defaultValue' : ''; - final suffix = hasDefault ? ' ${darkGray.wrap('($resolvedDefaultValue)')}' : ''; + final suffix = + hasDefault ? ' ${darkGray.wrap('($resolvedDefaultValue)')}' : ''; final resolvedMessage = '$message$suffix '; _stdout.write(resolvedMessage); final input = hidden ? _readLineHiddenSync() : _readLineSync(); - final response = input == null || input.isEmpty ? resolvedDefaultValue : input; + final response = + input == null || input.isEmpty ? resolvedDefaultValue : input; final lines = resolvedMessage.split('\n').length - 1; - final prefix = lines > 1 ? '\x1b[A\u001B[2K\u001B[${lines}A' : '\x1b[A\u001B[2K'; + final prefix = + lines > 1 ? '\x1b[A\u001B[2K\u001B[${lines}A' : '\x1b[A\u001B[2K'; _stdout.writeln( '''$prefix$resolvedMessage${styleDim.wrap(lightCyan.wrap(hidden ? '******' : response))}''', ); @@ -213,8 +217,12 @@ class Logger { while (true) { final key = _readKey(); - final isEnterOrReturnKey = key.controlChar == ControlCharacter.ctrlJ || key.controlChar == ControlCharacter.ctrlM; - final isDeleteOrBackspaceKey = key.controlChar == ControlCharacter.delete || key.controlChar == ControlCharacter.backspace || key.controlChar == ControlCharacter.ctrlH; + final isEnterOrReturnKey = key.controlChar == ControlCharacter.ctrlJ || + key.controlChar == ControlCharacter.ctrlM; + final isDeleteOrBackspaceKey = + key.controlChar == ControlCharacter.delete || + key.controlChar == ControlCharacter.backspace || + key.controlChar == ControlCharacter.ctrlH; if (isEnterOrReturnKey) break; @@ -272,9 +280,12 @@ class Logger { // so we treat them as the user pressing enter (e.g. use `defaultValue`). _stdout.writeln(); } - final response = input == null || input.isEmpty ? defaultValue : input.toBoolean() ?? defaultValue; + final response = input == null || input.isEmpty + ? defaultValue + : input.toBoolean() ?? defaultValue; final lines = resolvedMessage.split('\n').length - 1; - final prefix = lines > 1 ? '\x1b[A\u001B[2K\u001B[${lines}A' : '\x1b[A\u001B[2K'; + final prefix = + lines > 1 ? '\x1b[A\u001B[2K\u001B[${lines}A' : '\x1b[A\u001B[2K'; _stdout.writeln( '''$prefix$resolvedMessage${styleDim.wrap(lightCyan.wrap(response ? 'Yes' : 'No'))}''', ); @@ -296,7 +307,8 @@ class Logger { String Function(T choice)? display, }) { final resolvedDisplay = display ?? (value) => '$value'; - final hasDefault = defaultValue != null && resolvedDisplay(defaultValue).isNotEmpty; + final hasDefault = + defaultValue != null && resolvedDisplay(defaultValue).isNotEmpty; var index = hasDefault ? choices.indexOf(defaultValue) : 0; void writeChoices() { @@ -334,9 +346,14 @@ class Logger { T? result; while (result == null) { final key = _readKey(); - final isArrowUpOrKKey = key.controlChar == ControlCharacter.arrowUp || key.char == 'k'; - final isArrowDownOrJKey = key.controlChar == ControlCharacter.arrowDown || key.char == 'j'; - final isReturnOrEnterOrSpaceKey = key.controlChar == ControlCharacter.ctrlJ || key.controlChar == ControlCharacter.ctrlM || key.char == ' '; + final isArrowUpOrKKey = + key.controlChar == ControlCharacter.arrowUp || key.char == 'k'; + final isArrowDownOrJKey = + key.controlChar == ControlCharacter.arrowDown || key.char == 'j'; + final isReturnOrEnterOrSpaceKey = + key.controlChar == ControlCharacter.ctrlJ || + key.controlChar == ControlCharacter.ctrlM || + key.char == ' '; if (isArrowUpOrKKey) { index = (index - 1) % (choices.length); @@ -387,7 +404,9 @@ class Logger { }) { final resolvedDisplay = display ?? (value) => '$value'; final hasDefaults = defaultValues != null && defaultValues.isNotEmpty; - final selections = hasDefaults ? defaultValues.map((value) => choices.indexOf(value)).toSet() : {}; + final selections = hasDefaults + ? defaultValues.map((value) => choices.indexOf(value)).toSet() + : {}; var index = 0; void writeChoices() { @@ -427,17 +446,22 @@ class Logger { List? results; while (results == null) { final key = _readKey(); - final keyIsUpOrKKey = key.controlChar == ControlCharacter.arrowUp || key.char == 'k'; - final keyIsDownOrJKey = key.controlChar == ControlCharacter.arrowDown || key.char == 'j'; + final keyIsUpOrKKey = + key.controlChar == ControlCharacter.arrowUp || key.char == 'k'; + final keyIsDownOrJKey = + key.controlChar == ControlCharacter.arrowDown || key.char == 'j'; final keyIsSpaceKey = key.char == ' '; - final keyIsEnterOrReturnKey = key.controlChar == ControlCharacter.ctrlJ || key.controlChar == ControlCharacter.ctrlM; + final keyIsEnterOrReturnKey = key.controlChar == ControlCharacter.ctrlJ || + key.controlChar == ControlCharacter.ctrlM; if (keyIsUpOrKKey) { index = (index - 1) % (choices.length); } else if (keyIsDownOrJKey) { index = (index + 1) % (choices.length); } else if (keyIsSpaceKey) { - selections.contains(index) ? selections.remove(index) : selections.add(index); + selections.contains(index) + ? selections.remove(index) + : selections.add(index); } else if (keyIsEnterOrReturnKey) { _stdin ..lineMode = true diff --git a/pubspec.yaml b/pubspec.yaml index c7605d1..cd7f18c 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: 'general_lib' description: 'All in one library for help you make easy app on cross platform and support server side, inclue tcp, fetch, event emitter, websocket, and more.' -version: '0.0.60' +version: '0.0.61' environment: sdk: '>=3.6.0 <4.0.0' dev_dependencies: @@ -12,15 +12,15 @@ dependencies: path: '^1.9.0' io_universe: '^0.0.4' encrypt: '^5.0.3' - stack_trace: '^1.12.0' + stack_trace: '^1.12.0' yaml: '^3.1.3' archive: '^4.0.2' qr: '^3.0.2' zxing2: '^0.2.0' image: '^4.3.0' - win32: ^5.10.0 - io: ^1.0.5 - ffi: ^2.1.3 + win32: '^5.10.0' + io: '^1.0.5' + ffi: '^2.1.3' dependency_overrides: pointycastle: '3.8.0' mime: '^2.0.0'