|
2 | 2 | """ |
3 | 3 | mccli.py : CLI interface to MeschCore BLE companion app |
4 | 4 | """ |
| 5 | + |
5 | 6 | import asyncio |
6 | 7 | import os, sys |
7 | 8 | import time, datetime |
|
16 | 17 | from prompt_toolkit.shortcuts import PromptSession |
17 | 18 | from prompt_toolkit.shortcuts import CompleteStyle |
18 | 19 | from prompt_toolkit.completion import NestedCompleter |
| 20 | +from prompt_toolkit.completion import CompleteEvent, Completer, Completion |
19 | 21 | from prompt_toolkit.history import FileHistory |
20 | 22 | from prompt_toolkit.formatted_text import ANSI |
21 | 23 | from prompt_toolkit.key_binding import KeyBindings |
22 | 24 | from prompt_toolkit.shortcuts import radiolist_dialog |
23 | 25 |
|
| 26 | +#from typing import Iterable, Mapping, Set, Union |
| 27 | + |
| 28 | +from prompt_toolkit.completion.word_completer import WordCompleter |
| 29 | +from prompt_toolkit.document import Document |
| 30 | + |
| 31 | +import re |
| 32 | + |
24 | 33 | from meshcore import MeshCore, EventType, logger |
25 | 34 |
|
26 | 35 | # Version |
@@ -297,6 +306,17 @@ async def subscribe_to_msgs(mc, json_output=False, above=False): |
297 | 306 | CS = mc.subscribe(EventType.CHANNEL_MSG_RECV, handle_message) |
298 | 307 | await mc.start_auto_message_fetching() |
299 | 308 |
|
| 309 | +# redefine get_completion to let user put symbols in first item |
| 310 | +class MyNestedCompleter(NestedCompleter): |
| 311 | + def get_completions( self, document, complete_event): |
| 312 | + if not " " in document.text_before_cursor.lstrip(): |
| 313 | + completer = WordCompleter( |
| 314 | + list(self.options.keys()), ignore_case=self.ignore_case, |
| 315 | + pattern=re.compile(r"([a-zA-Z0-9_\\/]+|[^a-zA-Z0-9_\s]+)")) |
| 316 | + yield from completer.get_completions(document, complete_event) |
| 317 | + else: # normal behavior for remainder |
| 318 | + yield from super().get_completions(document, complete_event) |
| 319 | + |
300 | 320 | def make_completion_dict(contacts, pending={}, to=None, channels=None): |
301 | 321 | contact_list = {} |
302 | 322 | pending_list = {} |
@@ -666,7 +686,7 @@ def _(event): |
666 | 686 | session.app.ttimeoutlen = 0.2 |
667 | 687 | session.app.timeoutlen = 0.2 |
668 | 688 |
|
669 | | - completer = NestedCompleter.from_nested_dict( |
| 689 | + completer = MyNestedCompleter.from_nested_dict( |
670 | 690 | make_completion_dict(mc.contacts, |
671 | 691 | mc.pending_contacts, |
672 | 692 | to=contact, |
|
0 commit comments