[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

}

823824

self.builtin_name = tracers.add(

824825

StringVar(self), self.var_changed_builtin_name)

@@ -866,6 +867,11 @@ def create_page_highlight(self):

866867

('stderr', 'stderr'), ('\n\n', 'normal'))

867868

for texttag in text_and_tags:

868869

text.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')

869875

for element in self.theme_elements:

870876

def 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):

18661875

IntVar(self), ('main', 'General', 'autosave'))

18671876

self.format_width = tracers.add(

18681877

StringVar(self), ('extensions', 'FormatParagraph', 'max-width'))

1878+

self.line_numbers_default = tracers.add(

1879+

BooleanVar(self),

1880+

('main', 'EditorWindow', 'line-numbers-default'))

18691881

self.context_lines = tracers.add(

18701882

StringVar(self), ('extensions', 'CodeContext', 'maxlines'))

18711883

@@ -1944,6 +1956,14 @@ def create_page_general(self):

19441956

validatecommand=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+19471967

frame_context = Frame(frame_editor, borderwidth=0)

19481968

context_title = Label(frame_context, text='Max Context Lines :')

19491969

self.context_int = Entry(

@@ -2021,6 +2041,10 @@ def create_page_general(self):

20212041

frame_format.pack(side=TOP, padx=5, pady=0, fill=X)

20222042

format_width_title.pack(side=LEFT, anchor=W, padx=5, pady=5)

20232043

self.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.

20252049

frame_context.pack(side=TOP, padx=5, pady=0, fill=X)

20262050

context_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'))

20642088

self.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'))

20662092

self.context_lines.set(idleConf.GetOption(

20672093

'extensions', 'CodeContext', 'maxlines', type='int'))

20682094