|
62 | 62 | import org.apache.commons.lang3.tuple.Pair; |
63 | 63 | import org.bouncycastle.util.encoders.Hex; |
64 | 64 | import org.hid4java.HidDevice; |
| 65 | +import org.jline.reader.Candidate; |
65 | 66 | import org.jline.reader.Completer; |
66 | 67 | import org.jline.reader.EndOfFileException; |
67 | 68 | import org.jline.reader.LineReader; |
68 | 69 | 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; |
69 | 73 | import org.jline.reader.impl.completer.StringsCompleter; |
70 | 74 | import org.jline.terminal.Terminal; |
71 | 75 | import org.jline.terminal.TerminalBuilder; |
|
79 | 83 | import org.tron.common.utils.ByteUtil; |
80 | 84 | import org.tron.common.utils.PathUtil; |
81 | 85 | import org.tron.common.utils.Utils; |
| 86 | +import org.tron.core.dao.AddressEntry; |
82 | 87 | import org.tron.core.dao.Tx; |
83 | 88 | import org.tron.core.exception.CancelException; |
84 | 89 | import org.tron.core.exception.CipherException; |
85 | 90 | import org.tron.core.manager.TxHistoryManager; |
86 | 91 | import org.tron.core.manager.UpdateAccountPermissionInteractive; |
| 92 | +import org.tron.core.service.AddressBookService; |
87 | 93 | import org.tron.keystore.StringUtils; |
88 | 94 | import org.tron.ledger.TronLedgerGetAddress; |
89 | 95 | import org.tron.ledger.listener.TransactionSignManager; |
@@ -3432,11 +3438,40 @@ private void run() { |
3432 | 3438 | System.out.println(); |
3433 | 3439 |
|
3434 | 3440 | 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(); |
3436 | 3445 | 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 | + |
3437 | 3468 | LineReader lineReader = LineReaderBuilder.builder() |
3438 | 3469 | .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) |
3440 | 3475 | .option(LineReader.Option.CASE_INSENSITIVE, true) |
3441 | 3476 | .build(); |
3442 | 3477 | String prompt = "wallet> "; |
|
0 commit comments