Skip to content

Commit 6b32907

Browse files
committed
feature(cmd): add address auto completion
1 parent 94580b6 commit 6b32907

File tree

4 files changed

+47
-7
lines changed

4 files changed

+47
-7
lines changed

src/main/java/org/tron/core/dao/AddressEntry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,8 @@ public String toString() {
2424
public String toFileString() {
2525
return String.join(",", name, address, note == null ? "" : note);
2626
}
27+
28+
public String getDisplayString(int index) {
29+
return String.format("%d. %s (%s) - %s", index, name, address, note);
30+
}
2731
}

src/main/java/org/tron/core/service/AddressBookService.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.tron.core.service;
22

3+
import static org.tron.common.utils.Utils.greenBoldHighlight;
4+
35
import java.io.*;
46
import java.util.*;
57
import org.tron.core.dao.AddressEntry;
@@ -23,7 +25,7 @@ private void load() {
2325
String line;
2426
while ((line = br.readLine()) != null) {
2527
if (line.trim().isEmpty()) continue;
26-
String[] parts = line.split(",", 3); // 最多分3段
28+
String[] parts = line.split(",", 3);
2729
String name = parts.length > 0 ? parts[0].trim() : "";
2830
String address = parts.length > 1 ? parts[1].trim() : "";
2931
String note = parts.length > 2 ? parts[2].trim() : "";
@@ -85,8 +87,8 @@ public void list() {
8587
System.out.println("The address book is empty.");
8688
return;
8789
}
88-
System.out.printf("%-15s %-35s %s%n", "Name", "Address", "Note");
89-
System.out.println("--------------------------------------------------------------------------");
90+
System.out.printf("%-28s %-48s %s%n", greenBoldHighlight("Name"), greenBoldHighlight("Address"), greenBoldHighlight("Note"));
91+
System.out.println("-------------------------------------------------------------------------");
9092
entries.forEach(System.out::println);
9193
}
9294

src/main/java/org/tron/core/viewer/AddressBookView.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.tron.core.viewer;
22

33
import java.util.Scanner;
4-
import org.tron.core.manager.TxHistoryManager;
54
import org.tron.core.service.AddressBookInteractive;
65
import org.tron.core.service.AddressBookService;
76

@@ -34,7 +33,7 @@ private void printMainMenu() {
3433
System.out.println("1. addAddress");
3534
System.out.println("2. editAddress");
3635
System.out.println("3. delAddress");
37-
System.out.println("4. getAddressBook");
36+
System.out.println("4. getAddressBook & exit");
3837
System.out.print("Select option: ");
3938
}
4039
}

src/main/java/org/tron/walletcli/Client.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,14 @@
6262
import org.apache.commons.lang3.tuple.Pair;
6363
import org.bouncycastle.util.encoders.Hex;
6464
import org.hid4java.HidDevice;
65+
import org.jline.reader.Candidate;
6566
import org.jline.reader.Completer;
6667
import org.jline.reader.EndOfFileException;
6768
import org.jline.reader.LineReader;
6869
import org.jline.reader.LineReaderBuilder;
70+
import org.jline.reader.impl.DefaultParser;
71+
import org.jline.reader.impl.completer.ArgumentCompleter;
72+
import org.jline.reader.impl.completer.NullCompleter;
6973
import org.jline.reader.impl.completer.StringsCompleter;
7074
import org.jline.terminal.Terminal;
7175
import org.jline.terminal.TerminalBuilder;
@@ -79,11 +83,13 @@
7983
import org.tron.common.utils.ByteUtil;
8084
import org.tron.common.utils.PathUtil;
8185
import org.tron.common.utils.Utils;
86+
import org.tron.core.dao.AddressEntry;
8287
import org.tron.core.dao.Tx;
8388
import org.tron.core.exception.CancelException;
8489
import org.tron.core.exception.CipherException;
8590
import org.tron.core.manager.TxHistoryManager;
8691
import org.tron.core.manager.UpdateAccountPermissionInteractive;
92+
import org.tron.core.service.AddressBookService;
8793
import org.tron.keystore.StringUtils;
8894
import org.tron.ledger.TronLedgerGetAddress;
8995
import org.tron.ledger.listener.TransactionSignManager;
@@ -3432,11 +3438,40 @@ private void run() {
34323438
System.out.println();
34333439

34343440
try {
3435-
Terminal terminal = TerminalBuilder.builder().system(true).dumb(true).build();
3441+
Terminal terminal = TerminalBuilder.builder().system(true)
3442+
.dumb(true)
3443+
.nativeSignals(true).build();
3444+
DefaultParser parser = new DefaultParser();
34363445
Completer commandCompleter = new StringsCompleter(commandList);
3446+
Completer addressCompleter = (reader, line, candidates) -> {
3447+
List<AddressEntry> addressEntries = new AddressBookService().getEntries();
3448+
for (int i = 0; i < addressEntries.size(); i++) {
3449+
AddressEntry entry = addressEntries.get(i);
3450+
candidates.add(new Candidate(
3451+
entry.getAddress(),
3452+
entry.getAddress(),
3453+
null,
3454+
entry.getDisplayString(i + 1),
3455+
null,
3456+
null,
3457+
false
3458+
));
3459+
}
3460+
};
3461+
Completer completer = new ArgumentCompleter(
3462+
commandCompleter,
3463+
addressCompleter,
3464+
addressCompleter,
3465+
NullCompleter.INSTANCE
3466+
);
3467+
34373468
LineReader lineReader = LineReaderBuilder.builder()
34383469
.terminal(terminal)
3439-
.completer(commandCompleter)
3470+
.parser(parser)
3471+
.completer(completer)
3472+
.variable(LineReader.SECONDARY_PROMPT_PATTERN, "%M%P > ")
3473+
.variable(LineReader.INDENTATION, 2)
3474+
.option(LineReader.Option.AUTO_FRESH_LINE, true)
34403475
.option(LineReader.Option.CASE_INSENSITIVE, true)
34413476
.build();
34423477
String prompt = "wallet> ";

0 commit comments

Comments
 (0)