mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	further work on keybinding configuration
This commit is contained in:
		
							parent
							
								
									68d7336cb0
								
							
						
					
					
						commit
						c628a06c70
					
				
					 3 changed files with 123 additions and 15 deletions
				
			
		|  | @ -153,7 +153,6 @@ def GetSectionList(self, configSet, configType): | |||
|             cfgParser=self.defaultCfg[configType] | ||||
|         else: | ||||
|             raise 'Invalid configSet specified' | ||||
|          | ||||
|         return cfgParser.sections() | ||||
|      | ||||
|     def GetHighlight(self, theme, element, fgBg=None): | ||||
|  | @ -215,8 +214,10 @@ def GetExtensions(self, activeOnly=1): | |||
|         Gets a list of all idle extensions declared in the config files. | ||||
|         activeOnly - boolean, if true only return active (enabled) extensions | ||||
|         """ | ||||
|         extns=self.GetSectionList('default','extensions') | ||||
|         userExtns=self.GetSectionList('user','extensions') | ||||
|         extns=self.RemoveKeyBindNames( | ||||
|                 self.GetSectionList('default','extensions')) | ||||
|         userExtns=self.RemoveKeyBindNames( | ||||
|                 self.GetSectionList('user','extensions')) | ||||
|         for extn in userExtns: | ||||
|             if extn not in extns: #user has added own extension | ||||
|                 extns.append(extn)  | ||||
|  | @ -230,6 +231,75 @@ def GetExtensions(self, activeOnly=1): | |||
|         else: | ||||
|             return extns         | ||||
| 
 | ||||
|     def RemoveKeyBindNames(self,extnNameList): | ||||
|         #get rid of keybinding section names | ||||
|         names=extnNameList | ||||
|         kbNameIndicies=[] | ||||
|         for name in names: | ||||
|             if name.endswith('_bindings') or name.endswith('_cfgBindings'):  | ||||
|                     kbNameIndicies.append(names.index(name)) | ||||
|         kbNameIndicies.sort() | ||||
|         kbNameIndicies.reverse() | ||||
|         for index in kbNameIndicies: #delete each keybinding section name     | ||||
|             del(names[index]) | ||||
|         return names | ||||
|          | ||||
|     def GetExtensionKeys(self,extensionName): | ||||
|         """ | ||||
|         returns a dictionary of the configurable keybindings for a particular | ||||
|         extension,as they exist in the dictionary returned by GetCurrentKeySet; | ||||
|         that is, where previously re-used bindings are disabled. | ||||
|         """ | ||||
|         keysName=extensionName+'_cfgBindings' | ||||
|         activeKeys=self.GetCurrentKeySet() | ||||
|         extKeys={} | ||||
|         if self.defaultCfg['extensions'].has_section(keysName): | ||||
|             eventNames=self.defaultCfg['extensions'].GetOptionList(keysName) | ||||
|             for eventName in eventNames: | ||||
|                 event='<<'+eventName+'>>' | ||||
|                 binding=activeKeys[event] | ||||
|                 extKeys[event]=binding | ||||
|         return extKeys  | ||||
|          | ||||
|     def __GetRawExtensionKeys(self,extensionName): | ||||
|         """ | ||||
|         returns a dictionary of the configurable keybindings for a particular | ||||
|         extension, as defined in the configuration files, or an empty dictionary | ||||
|         if no bindings are found | ||||
|         """ | ||||
|         keysName=extensionName+'_cfgBindings' | ||||
|         extKeys={} | ||||
|         if self.defaultCfg['extensions'].has_section(keysName): | ||||
|             eventNames=self.defaultCfg['extensions'].GetOptionList(keysName) | ||||
|             for eventName in eventNames: | ||||
|                 binding=self.GetOption('extensions',keysName, | ||||
|                         eventName,default='').split() | ||||
|                 event='<<'+eventName+'>>' | ||||
|                 extKeys[event]=binding | ||||
|         return extKeys  | ||||
|      | ||||
|     def GetExtensionBindings(self,extensionName): | ||||
|         """ | ||||
|         Returns a dictionary of all the event bindings for a particular | ||||
|         extension. The configurable keybindings are returned as they exist in | ||||
|         the dictionary returned by GetCurrentKeySet; that is, where re-used  | ||||
|         keybindings are disabled. | ||||
|         """ | ||||
|         bindsName=extensionName+'_bindings' | ||||
|         extBinds=self.GetExtensionKeys(extensionName) | ||||
|         #add the non-configurable bindings | ||||
|         if self.defaultCfg['extensions'].has_section(bindsName): | ||||
|             eventNames=self.defaultCfg['extensions'].GetOptionList(bindsName) | ||||
|             for eventName in eventNames: | ||||
|                 binding=self.GetOption('extensions',bindsName, | ||||
|                         eventName,default='').split() | ||||
|                 event='<<'+eventName+'>>' | ||||
|                 extBinds[event]=binding | ||||
|          | ||||
|         return extBinds  | ||||
|          | ||||
|      | ||||
|      | ||||
|     def GetKeyBinding(self, keySetName, eventStr): | ||||
|         """ | ||||
|         returns the keybinding for a specific event. | ||||
|  | @ -241,12 +311,31 @@ def GetKeyBinding(self, keySetName, eventStr): | |||
|         binding=self.GetOption('keys',keySetName,eventName,default='').split() | ||||
|         return binding | ||||
| 
 | ||||
|     def GetKeys(self, keySetName=None): | ||||
|     def GetCurrentKeySet(self): | ||||
|         """ | ||||
|         returns the requested set of keybindings, with fallbacks if required. | ||||
|         Returns a dictionary of: all current core keybindings, plus the  | ||||
|         keybindings for all currently active extensions. If a binding defined | ||||
|         in an extension is already in use, that binding is disabled. | ||||
|         """ | ||||
|         currentKeySet=self.GetCoreKeys(keySetName=self.CurrentKeys()) | ||||
|         activeExtns=self.GetExtensions(activeOnly=1) | ||||
|         for extn in activeExtns: | ||||
|             extKeys=self.__GetRawExtensionKeys(extn) | ||||
|             if extKeys: #the extension defines keybindings | ||||
|                 for event in extKeys.keys(): | ||||
|                     if extKeys[event] in currentKeySet.values(): | ||||
|                         #the binding is already in use | ||||
|                         extKeys[event]='' #disable this binding | ||||
|                     currentKeySet[event]=extKeys[event] #add binding | ||||
|         return currentKeySet | ||||
|      | ||||
|     def GetCoreKeys(self, keySetName=None): | ||||
|         """ | ||||
|         returns the requested set of core keybindings, with fallbacks if | ||||
|         required. | ||||
|         """ | ||||
|         #keybindings loaded from the config file(s) are loaded _over_ these | ||||
|         #defaults, so if there is a problem getting any binding there will | ||||
|         #defaults, so if there is a problem getting any core binding there will | ||||
|         #be an 'ultimate last resort fallback' to the CUA-ish bindings | ||||
|         #defined here. | ||||
|         keyBindings={ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Steven M. Gava
						Steven M. Gava