mercurial - Tab Completion in Python Command Line Interface - how to catch Tab events -


i'm writing little cli in python (as extension mercurial) , support tab-completion. specifically, catch tabs in prompt , show list of matching options (just bash).

example: enter section name:

 ext*tab*    extensions    extras 

the problem i'm not sure how catch tab events. i'm using ui.prompt() api of mercurial, calling raw_input() under hood.

as far know, raw_input() returns on 'enter' , if user enters tab, string returned includes "\t".

for use readline module.

simplest code can think:

import readline commands = ['extra', 'extension', 'stuff', 'errors',             'email', 'foobar', 'foo']  def complete(text, state):     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: ') 

example usage:

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

besides completion, readline provides with:

  • line editing
  • keybinding configuration (emacs , vi modes included)
  • history (up arrow recall previous values)
  • history searching, saving , loading

Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -