- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为我的项目创建一个 REPL 工具(为清楚起见进行了简化)直接执行输入的命令或(如果输入命令“.x some/path/to/file”)从文件中读取并执行它们。我的问题与自动完成用户输入有关(使用 prompt_toolkit)。
我有类似的东西(最小可执行示例):
import prompt_toolkit
from prompt_toolkit.completion import Completer, Completion
from prompt_toolkit.document import Document
from prompt_toolkit.contrib.completers import PathCompleter
class CommandCompleter(Completer):
def __init__(self):
self.path_completer = PathCompleter()
self.commands = [".x", "command1", "command2"]
def get_completions(self, document, complete_event):
if document.text.startswith(".x "):
sub_doc = Document(document.text[3:])
yield from (Completion(cmd.text, -document.cursor_position)
# ???????? ?????????????????????????
for cmd
in self.path_completer.get_completions(sub_doc, complete_event))
# ???????
else:
yield from (Completion(cmd, -document.cursor_position)
for cmd in self.commands
if cmd.startswith(document.text))
if __name__ == "__main__":
while True:
other_args = {}
input = prompt_toolkit.prompt(">>> ", completer=CommandCompleter(), **other_args)
# Do something with input (omitted)
第二个 if 分支(用于命令)工作正常,但我不知道如何正确调用 PathCompleter.get_completions()
方法并重建 Completion
对象从第一个分支中的结果(???的位置)。诀窍是我只对输入的一部分使用完成,各种子字符串、位置计算等(还)没有导致令人满意的行为(即提供路径和构建正确的输入行)。
我肯定会继续搜索,但如果有人知道如何重写它,那将非常有用。
注意:yield from self.path_completer.get_completions(document, complete_event)
如果整个输入只是路径(这可以正常工作),将被使用。
最佳答案
可能以下应该修复它:
sub_doc = Document(document.text[3:])
yield from (Completion(completion.text, completion.start_position, display=completion.display)
for completion
in self.path_completer.get_completions(sub_doc, complete_event))
completion.text
包含将要插入的文本;completion.start_position
包含文本将要插入的位置,相对于光标位置(在这个特定示例中,我们可以从嵌套完成器中获取值)。 completion.display
是弹出菜单中显示的值。 (在本例中,是整个文件名,而不仅仅是插入的字符串。如果您有任何问题,请随时打开 GitHub 问题。
关于python - 如何在 prompt_toolkit 中重用 PathCompleter 的补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46528473/
我是 Jupyter Notebook 的新手。 目前,我正在使用带有 R 的笔记本,它运行良好。 现在,我尝试将它与 Python 一起使用,但收到以下错误。 [I 09:00:52.947 Not
我最近运行了一个 conda 列表,我发现我有两个不同的包,分别称为 prompt-toolkit 3.0.4 和 prompt_toolkit 3.0.4。我试图用谷歌搜索它们之间的区别,基本上使用
我正在为我的项目创建一个 REPL 工具(为清楚起见进行了简化)直接执行输入的命令或(如果输入命令“.x some/path/to/file”)从文件中读取并执行它们。我的问题与自动完成用户输入有关(
尝试打开 jupyter notebook 文件(.ipynb 文件)使用此命令 ipython notebook filename.ipynb 然后我在使用 ipython 时遇到以下错误.. Tr
我正在尝试让 ipython 在我的 Windows 10 64 位计算机上运行。当我尝试从命令行启动 ipython 时,出现了此问题所附屏幕截图中所示的错误。 有人遇到过吗?我该如何解决这个问题?
我在 ubuntu 18.04 中使用 Pycharm 2018.2 版本,我试图在它正在加载和创建新笔记本的 pycharm 中使用 JupyterNoteBook。但是 Jupyter 中的单元格
我是一名优秀的程序员,十分优秀!