""" Parens and Ticks Closing Extension When you hit left paren or tick, automatically creates the closing paren or tick. Version: 0.1 Author: Charles M. Wohlganger charles.wohlganger@gmail.com Date: 17-Jul-2017 Add to the end of config-extensions.def [parenClose] enable=True enable_paren_close = True enable_tick_close = True skip_closures = True [TabExtension_cfgBindings] p-open= t-open= p-close= """ from idlelib.config import idleConf class ParenClose: def __init__(self,editwin): self.editwin=editwin self.text=editwin.text self.enable_paren_close=idleConf.GetOption( 'extensions','ParenClose','enable_paren_close', default = True) self.enable_tick_close=idleConf.GetOption( 'extensions','ParenClose','enable_tick_close', default = True) self.skip_closures=idleConf.GetOption( 'extensions','ParenClose','enable_skip_closures', default = True) def p_open_event(self,event): if self.enable_paren_close: closer={'(':')','[':']','{':'}'}[event.char] pos=self.text.index('insert') self.text.insert(pos,closer) self.text.mark_set('insert',pos) def p_close_event(self,event): pos=self.text.index('insert') if self.skip_closures and self.text.get(pos,pos + '+1c')==event.char: self.text.delete(pos,pos+'+1c') def t_open_event(self,event): if self.enable_tick_close: pos=self.text.index('insert') #don't do if there are two ticks #user wants to make docstring or multiline if self.text.get(pos+'-2c',pos)!=event.char*2 or self.text.get(pos,pos+'+1c')==event.char: if self.skip_closures and self.text.get(pos, pos + '+1c')==event.char: self.text.delete(pos,pos+'+1c') else: self.text.insert(pos,event.char) self.text.mark_set('insert',pos ) else: self.text.insert(pos,event.char*3) self.text.mark_set('insert',pos)