"""Example extension, also used for testing. See extend.txt for more details on creating an extension. See config-extension.def for configuring an extension. """ from idlelib.config import idleConf from functools import wraps def format_selection(format_line): "Apply a formatting function to all of the selected lines." @wraps(format_line) def apply(self, event=None): head, tail, chars, lines = self.formatter.get_region() for pos in range(len(lines) - 1): line = lines[pos] lines[pos] = format_line(self, line) self.formatter.set_region(head, tail, chars, lines) return 'break' return apply class ZzDummy: """Prepend or remove initial text from selected lines.""" # Extend the format menu. menudefs = [ ('format', [ ('Z in', '<>'), ('Z out', '<>'), ] ) ] def __init__(self, editwin): "Initialize the settings for this extension." self.editwin = editwin self.text = editwin.text self.formatter = editwin.fregion @classmethod def reload(cls): "Load class variables from config." cls.ztext = idleConf.GetOption('extensions', 'ZzDummy', 'z-text') @format_selection def z_in_event(self, line): """Insert text at the beginning of each selected line. This is bound to the <> virtual event when the extensions are loaded. """ return f'{self.ztext}{line}' @format_selection def z_out_event(self, line): """Remove specific text from the beginning of each selected line. This is bound to the <> virtual event when the extensions are loaded. """ zlength = 0 if not line.startswith(self.ztext) else len(self.ztext) return line[zlength:] ZzDummy.reload() if __name__ == "__main__": import unittest unittest.main('idlelib.idle_test.test_zzdummy', verbosity=2, exit=False)