• <bdo id='J6Yu7'></bdo><ul id='J6Yu7'></ul>
    <i id='J6Yu7'><tr id='J6Yu7'><dt id='J6Yu7'><q id='J6Yu7'><span id='J6Yu7'><b id='J6Yu7'><form id='J6Yu7'><ins id='J6Yu7'></ins><ul id='J6Yu7'></ul><sub id='J6Yu7'></sub></form><legend id='J6Yu7'></legend><bdo id='J6Yu7'><pre id='J6Yu7'><center id='J6Yu7'></center></pre></bdo></b><th id='J6Yu7'></th></span></q></dt></tr></i><div id='J6Yu7'><tfoot id='J6Yu7'></tfoot><dl id='J6Yu7'><fieldset id='J6Yu7'></fieldset></dl></div>
  • <small id='J6Yu7'></small><noframes id='J6Yu7'>

      1. <tfoot id='J6Yu7'></tfoot><legend id='J6Yu7'><style id='J6Yu7'><dir id='J6Yu7'><q id='J6Yu7'></q></dir></style></legend>
      2. Python命令行界面中的制表符完成-如何捕获制表符事件

        时间:2024-08-21

          1. <tfoot id='iLdQM'></tfoot>
              <bdo id='iLdQM'></bdo><ul id='iLdQM'></ul>

                <tbody id='iLdQM'></tbody>

                <small id='iLdQM'></small><noframes id='iLdQM'>

              • <i id='iLdQM'><tr id='iLdQM'><dt id='iLdQM'><q id='iLdQM'><span id='iLdQM'><b id='iLdQM'><form id='iLdQM'><ins id='iLdQM'></ins><ul id='iLdQM'></ul><sub id='iLdQM'></sub></form><legend id='iLdQM'></legend><bdo id='iLdQM'><pre id='iLdQM'><center id='iLdQM'></center></pre></bdo></b><th id='iLdQM'></th></span></q></dt></tr></i><div id='iLdQM'><tfoot id='iLdQM'></tfoot><dl id='iLdQM'><fieldset id='iLdQM'></fieldset></dl></div>
              • <legend id='iLdQM'><style id='iLdQM'><dir id='iLdQM'><q id='iLdQM'></q></dir></style></legend>

                  本文介绍了Python命令行界面中的制表符完成-如何捕获制表符事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在用Python编写一个小CLI(作为Mercurial的扩展),并希望支持制表符完成。具体地说,我希望在提示符中显示catch选项卡,并显示匹配选项的列表(就像bash一样)。

                  示例:输入节名:

                   ext*TAB*  
                   extensions  
                   extras
                  

                  问题是我不确定如何捕捉Tab事件。我使用的是Mercurial的ui.prompt()API,它只是在幕后调用raw_input()

                  据我所知,raw_input()只在‘Enter’时返回,如果用户输入制表符,则返回的字符串只包含一个" "

                  推荐答案

                  为此,您可以使用readline模块。

                  我能想到的最简单的代码:

                  import readline
                  COMMANDS = ['extra', 'extension', 'stuff', 'errors',
                              'email', 'foobar', 'foo']
                  
                  def complete(text, state):
                      for cmd in COMMANDS:
                          if cmd.startswith(text):
                              if not state:
                                  return cmd
                              else:
                                  state -= 1
                  
                  readline.parse_and_bind("tab: complete")
                  readline.set_completer(complete)
                  raw_input('Enter section name: ')
                  

                  示例用法:

                  Enter section name: <tab>
                  email      errors     extension  extra      foo        foobar    stuff
                  Enter section name: e<tab>
                  email      errors     extension  extra      
                  Enter section name: ext<tab>
                  extension  extra      
                  

                  除完成外,readline还提供:

                  • 行编辑
                  • 键绑定配置(包括emacs和vi模式)
                  • 历史记录(向上箭头可调用以前的值)
                  • 历史记录搜索、保存和加载

                  这篇关于Python命令行界面中的制表符完成-如何捕获制表符事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用参数(django/python-Social-auth)将Google OAuth访问限制为一个域 下一篇:芹菜中如何向特定队列发送周期性任务

                  相关文章

                    <bdo id='aMEd4'></bdo><ul id='aMEd4'></ul>
                  <i id='aMEd4'><tr id='aMEd4'><dt id='aMEd4'><q id='aMEd4'><span id='aMEd4'><b id='aMEd4'><form id='aMEd4'><ins id='aMEd4'></ins><ul id='aMEd4'></ul><sub id='aMEd4'></sub></form><legend id='aMEd4'></legend><bdo id='aMEd4'><pre id='aMEd4'><center id='aMEd4'></center></pre></bdo></b><th id='aMEd4'></th></span></q></dt></tr></i><div id='aMEd4'><tfoot id='aMEd4'></tfoot><dl id='aMEd4'><fieldset id='aMEd4'></fieldset></dl></div>

                      <small id='aMEd4'></small><noframes id='aMEd4'>

                      <tfoot id='aMEd4'></tfoot>
                    1. <legend id='aMEd4'><style id='aMEd4'><dir id='aMEd4'><q id='aMEd4'></q></dir></style></legend>