[code.view]

[top] / python / PyMOTW / readline / readline_history.py

     #!/usr/bin/env python
     # encoding: utf-8
     #
     # Copyright (c) 2008 Doug Hellmann All rights reserved.
     #
     """
     """
     
     __version__ = "$Id$"
     #end_pymotw_header
     
     import readline
     import logging
     import os
     
     LOG_FILENAME = '/tmp/completer.log'
     HISTORY_FILENAME = '/tmp/completer.hist'
     
     logging.basicConfig(filename=LOG_FILENAME,
                         level=logging.DEBUG,
                         )
     
     def get_history_items():
         return [ readline.get_history_item(i)
                  for i in xrange(1, readline.get_current_history_length() + 1)
                  ]
     
     class HistoryCompleter(object):
         
         def __init__(self):
             self.matches = []
             return
     
         def complete(self, text, state):
             response = None
             if state == 0:
                 history_values = get_history_items()
                 logging.debug('history: %s', history_values)
                 if text:
                     self.matches = sorted(h 
                                           for h in history_values 
                                           if h and h.startswith(text))
                 else:
                     self.matches = []
                 logging.debug('matches: %s', self.matches)
             try:
                 response = self.matches[state]
             except IndexError:
                 response = None
             logging.debug('complete(%s, %s) => %s', 
                           repr(text), state, repr(response))
             return response
     
     def input_loop():
         if os.path.exists(HISTORY_FILENAME):
             readline.read_history_file(HISTORY_FILENAME)
         print 'Max history file length:', readline.get_history_length()
         print 'Startup history:', get_history_items()
         try:
             while True:
                 line = raw_input('Prompt ("stop" to quit): ')
                 if line == 'stop':
                     break
                 if line:
                     print 'Adding "%s" to the history' % line
         finally:
             print 'Final history:', get_history_items()
             readline.write_history_file(HISTORY_FILENAME)
     
     # Register our completer function
     readline.set_completer(HistoryCompleter().complete)
     
     # Use the tab key for completion
     readline.parse_and_bind('tab: complete')
     
     # Prompt the user for text
     input_loop()
     

[top] / python / PyMOTW / readline / readline_history.py

contact | logmethods.com