[3.7] bpo-17535: IDLE editor line numbers (GH-14030) · python/cpython@e9ec166
@@ -819,6 +819,7 @@ def create_page_highlight(self):
819819'Shell Error Text': ('error', '12'),
820820'Shell Stdout Text': ('stdout', '13'),
821821'Shell Stderr Text': ('stderr', '14'),
822+'Line Number': ('linenumber', '16'),
822823 }
823824self.builtin_name = tracers.add(
824825StringVar(self), self.var_changed_builtin_name)
@@ -866,6 +867,11 @@ def create_page_highlight(self):
866867 ('stderr', 'stderr'), ('\n\n', 'normal'))
867868for texttag in text_and_tags:
868869text.insert(END, texttag[0], texttag[1])
870+n_lines = len(text.get('1.0', END).splitlines())
871+for lineno in range(1, n_lines + 1):
872+text.insert(f'{lineno}.0',
873+f'{lineno:{len(str(n_lines))}d} ',
874+'linenumber')
869875for element in self.theme_elements:
870876def tem(event, elem=element):
871877# event.widget.winfo_top_level().highlight_target.set(elem)
@@ -1827,6 +1833,9 @@ def create_page_general(self):
18271833 frame_format: Frame
18281834 format_width_title: Label
18291835 (*)format_width_int: Entry - format_width
1836+ frame_line_numbers_default: Frame
1837+ line_numbers_default_title: Label
1838+ (*)line_numbers_default_bool: Checkbutton - line_numbers_default
18301839 frame_context: Frame
18311840 context_title: Label
18321841 (*)context_int: Entry - context_lines
@@ -1866,6 +1875,9 @@ def create_page_general(self):
18661875IntVar(self), ('main', 'General', 'autosave'))
18671876self.format_width = tracers.add(
18681877StringVar(self), ('extensions', 'FormatParagraph', 'max-width'))
1878+self.line_numbers_default = tracers.add(
1879+BooleanVar(self),
1880+ ('main', 'EditorWindow', 'line-numbers-default'))
18691881self.context_lines = tracers.add(
18701882StringVar(self), ('extensions', 'CodeContext', 'maxlines'))
18711883@@ -1944,6 +1956,14 @@ def create_page_general(self):
19441956validatecommand=self.digits_only, validate='key',
19451957 )
194619581959+frame_line_numbers_default = Frame(frame_editor, borderwidth=0)
1960+line_numbers_default_title = Label(
1961+frame_line_numbers_default, text='Show line numbers in new windows')
1962+self.line_numbers_default_bool = Checkbutton(
1963+frame_line_numbers_default,
1964+variable=self.line_numbers_default,
1965+width=1)
1966+19471967frame_context = Frame(frame_editor, borderwidth=0)
19481968context_title = Label(frame_context, text='Max Context Lines :')
19491969self.context_int = Entry(
@@ -2021,6 +2041,10 @@ def create_page_general(self):
20212041frame_format.pack(side=TOP, padx=5, pady=0, fill=X)
20222042format_width_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
20232043self.format_width_int.pack(side=TOP, padx=10, pady=5)
2044+# frame_line_numbers_default.
2045+frame_line_numbers_default.pack(side=TOP, padx=5, pady=0, fill=X)
2046+line_numbers_default_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
2047+self.line_numbers_default_bool.pack(side=LEFT, padx=5, pady=5)
20242048# frame_context.
20252049frame_context.pack(side=TOP, padx=5, pady=0, fill=X)
20262050context_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
@@ -2063,6 +2087,8 @@ def load_general_cfg(self):
20632087'main', 'General', 'autosave', default=0, type='bool'))
20642088self.format_width.set(idleConf.GetOption(
20652089'extensions', 'FormatParagraph', 'max-width', type='int'))
2090+self.line_numbers_default.set(idleConf.GetOption(
2091+'main', 'EditorWindow', 'line-numbers-default', type='bool'))
20662092self.context_lines.set(idleConf.GetOption(
20672093'extensions', 'CodeContext', 'maxlines', type='int'))
20682094