Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
committed Jan 16, 2025
1 parent 5ffce35 commit 6378dd2
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 26 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 0.0.61

- New Version 0.0.61


## 0.0.60

- New Version 0.0.60
Expand Down
7 changes: 5 additions & 2 deletions lib/fork/mason_logger/src/ffi/unix_terminal.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<TCGetAttrNative, TCGetAttrDart>(
'tcgetattr',
Expand All @@ -35,7 +37,8 @@ class UnixTerminal implements Terminal {
void enableRawMode() {
final origTermIOS = _origTermIOSPointer.ref;
final newTermIOSPointer = calloc<TermIOS>()
..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)
Expand Down
14 changes: 12 additions & 2 deletions lib/fork/mason_logger/src/ffi/windows_terminal.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
58 changes: 41 additions & 17 deletions lib/fork/mason_logger/src/mason_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down Expand Up @@ -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))}''',
);
Expand All @@ -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;

Expand Down Expand Up @@ -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'))}''',
);
Expand All @@ -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() {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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() : <int>{};
final selections = hasDefaults
? defaultValues.map((value) => choices.indexOf(value)).toSet()
: <int>{};
var index = 0;

void writeChoices() {
Expand Down Expand Up @@ -427,17 +446,22 @@ class Logger {
List<T>? 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
Expand Down
10 changes: 5 additions & 5 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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'
Expand Down

0 comments on commit 6378dd2

Please sign in to comment.