mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from contextlib import contextmanager
 | |
| 
 | |
| try:
 | |
|     from _sqlite3 import SQLITE_KEYWORDS
 | |
| except ImportError:
 | |
|     SQLITE_KEYWORDS = ()
 | |
| 
 | |
| _completion_matches = []
 | |
| 
 | |
| 
 | |
| def _complete(text, state):
 | |
|     global _completion_matches
 | |
| 
 | |
|     if state == 0:
 | |
|         text_upper = text.upper()
 | |
|         _completion_matches = [c for c in SQLITE_KEYWORDS if c.startswith(text_upper)]
 | |
|     try:
 | |
|         return _completion_matches[state] + " "
 | |
|     except IndexError:
 | |
|         return None
 | |
| 
 | |
| 
 | |
| @contextmanager
 | |
| def completer():
 | |
|     try:
 | |
|         import readline
 | |
|     except ImportError:
 | |
|         yield
 | |
|         return
 | |
| 
 | |
|     old_completer = readline.get_completer()
 | |
|     try:
 | |
|         readline.set_completer(_complete)
 | |
|         if readline.backend == "editline":
 | |
|             # libedit uses "^I" instead of "tab"
 | |
|             command_string = "bind ^I rl_complete"
 | |
|         else:
 | |
|             command_string = "tab: complete"
 | |
|         readline.parse_and_bind(command_string)
 | |
|         yield
 | |
|     finally:
 | |
|         readline.set_completer(old_completer)
 | 
