fix: snippet fmt (#570)

This commit is contained in:
lollipopkit🏳️‍⚧️
2024-09-01 21:07:32 +08:00
committed by GitHub
parent edb49ead67
commit db9b2dd818
7 changed files with 84 additions and 53 deletions

View File

@@ -1,7 +1,6 @@
import 'package:dartssh2/dartssh2.dart';
import 'package:server_box/data/model/app/error.dart';
import 'package:server_box/data/model/app/shell_func.dart';
import 'package:server_box/data/model/app/tag_pickable.dart';
import 'package:server_box/data/model/server/battery.dart';
import 'package:server_box/data/model/server/conn.dart';
import 'package:server_box/data/model/server/cpu.dart';
@@ -14,7 +13,7 @@ import 'package:server_box/data/model/server/server_private_info.dart';
import 'package:server_box/data/model/server/system.dart';
import 'package:server_box/data/model/server/temp.dart';
class Server implements TagPickable {
class Server {
Spi spi;
ServerStatus status;
SSHClient? client;
@@ -27,14 +26,6 @@ class Server implements TagPickable {
this.client,
});
@override
bool containsTag(String tag) {
return spi.tags?.contains(tag) ?? false;
}
@override
String get tagName => spi.id;
bool get needGenClient => conn < ServerConn.connecting;
bool get canViewDetails => conn == ServerConn.finished;

View File

@@ -6,13 +6,11 @@ import 'package:json_annotation/json_annotation.dart';
import 'package:server_box/data/model/server/server_private_info.dart';
import 'package:xterm/core.dart';
import 'package:server_box/data/model/app/tag_pickable.dart';
part 'snippet.g.dart';
@JsonSerializable()
@HiveType(typeId: 2)
class Snippet implements TagPickable {
class Snippet {
@HiveField(0)
final String name;
@HiveField(1)
@@ -39,14 +37,6 @@ class Snippet implements TagPickable {
Map<String, dynamic> toJson() => _$SnippetToJson(this);
@override
bool containsTag(String tag) {
return tags?.contains(tag) ?? false;
}
@override
String get tagName => name;
static final fmtFinder = RegExp(r'\$\{[^{}]+\}');
String fmtWithSpi(Spi spi) {
@@ -109,11 +99,21 @@ class Snippet implements TagPickable {
if (special != null) {
final raw = key.substring(special.key.length + 1, key.length - 1);
await special.value((term: terminal, raw: raw));
} else {
// Term keys
final termKey = _find(fmtTermKeys, key);
if (termKey != null) {
await _doTermKeys(terminal, termKey, key);
} else {
// Normal input
terminal.textInput(key);
}
}
// Term keys
final termKey = _find(fmtTermKeys, key);
if (termKey != null) await _doTermKeys(terminal, termKey, key);
// Text between this and next match
if (idx < starts.length - 1) {
terminal.textInput(argsFmted.substring(end, starts[idx + 1]));
}
}
// End term input
@@ -129,10 +129,10 @@ class Snippet implements TagPickable {
MapEntry<String, TerminalKey> termKey,
String key,
) async {
if (termKey.value == TerminalKey.enter) {
terminal.keyInput(TerminalKey.enter);
return;
}
// if (termKey.value == TerminalKey.enter) {
// terminal.keyInput(TerminalKey.enter);
// return;
// }
final ctrlAlt = switch (termKey.value) {
TerminalKey.control => (ctrl: true, alt: false),
@@ -140,6 +140,8 @@ class Snippet implements TagPickable {
_ => (ctrl: false, alt: false),
};
if (!key.contains('+')) return;
// `${ctrl+ad}` -> `ctrla + d`
final chars = key.substring(termKey.key.length + 1, key.length - 1);
if (chars.isEmpty) return;