Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion 6 Lib/idlelib/NEWS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ Released on 2019-12-16?
======================================


bop-26353: Stop adding newline when saving an IDLE shell window.
bpo-4360: Add an option to toggle IDLE's cursor blink for shell,
editor, and output windows. See Settings, General, Window Preferences,
Cursor Blink. Patch by Zachary Spytz.

bpo-26353: Stop adding newline when saving an IDLE shell window.

bpo-38598: Do not try to compile IDLE shell or output windows.

Expand Down
1 change: 1 addition & 0 deletions 1 Lib/idlelib/config-main.def
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ delete-exitfunc= 1
[EditorWindow]
width= 80
height= 40
cursor-blink= 1
font= TkFixedFont
# For TkFixedFont, the actual size and boldness are obtained from tk
# and override 10 and 0. See idlelib.config.IdleConf.GetFont
Expand Down
2 changes: 2 additions & 0 deletions 2 Lib/idlelib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ def __init__(self, _utest=False):
self.defaultCfg = {}
self.userCfg = {}
self.cfg = {} # TODO use to select userCfg vs defaultCfg
# self.blink_off_time = <first editor text>['insertofftime']
# See https:/bugs.python.org/issue4630, msg356516.

if not _utest:
self.CreateConfigHandlers()
Expand Down
17 changes: 17 additions & 0 deletions 17 Lib/idlelib/configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ def activate_config_changes(self):
instance.set_notabs_indentwidth()
instance.ApplyKeybindings()
instance.reset_help_menu_entries()
instance.update_cursor_blink()
for klass in reloadables:
klass.reload()

Expand Down Expand Up @@ -1820,6 +1821,9 @@ def create_page_general(self):
(*)win_width_int: Entry - win_width
win_height_title: Label
(*)win_height_int: Entry - win_height
frame_cursor_blink: Frame
cursor_blink_title: Label
(*)cursor_blink_bool: Checkbutton - cursor_blink
frame_autocomplete: Frame
auto_wait_title: Label
(*)auto_wait_int: Entry - autocomplete_wait
Expand Down Expand Up @@ -1864,6 +1868,8 @@ def create_page_general(self):
StringVar(self), ('main', 'EditorWindow', 'width'))
self.win_height = tracers.add(
StringVar(self), ('main', 'EditorWindow', 'height'))
self.cursor_blink = tracers.add(
BooleanVar(self), ('main', 'EditorWindow', 'cursor-blink'))
self.autocomplete_wait = tracers.add(
StringVar(self), ('extensions', 'AutoComplete', 'popupwait'))
self.paren_style = tracers.add(
Expand Down Expand Up @@ -1920,6 +1926,11 @@ def create_page_general(self):
validatecommand=self.digits_only, validate='key',
)

frame_cursor_blink = Frame(frame_window, borderwidth=0)
cursor_blink_title = Label(frame_cursor_blink, text='Cursor Blink')
self.cursor_blink_bool = Checkbutton(frame_cursor_blink,
variable=self.cursor_blink, width=1)

frame_autocomplete = Frame(frame_window, borderwidth=0,)
auto_wait_title = Label(frame_autocomplete,
text='Completions Popup Wait (milliseconds)')
Expand Down Expand Up @@ -2024,6 +2035,10 @@ def create_page_general(self):
win_height_title.pack(side=RIGHT, anchor=E, pady=5)
self.win_width_int.pack(side=RIGHT, anchor=E, padx=10, pady=5)
win_width_title.pack(side=RIGHT, anchor=E, pady=5)
# frame_cursor_blink.
frame_cursor_blink.pack(side=TOP, padx=5, pady=0, fill=X)
cursor_blink_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
self.cursor_blink_bool.pack(side=LEFT, padx=5, pady=5)
# frame_autocomplete.
frame_autocomplete.pack(side=TOP, padx=5, pady=0, fill=X)
auto_wait_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
Expand Down Expand Up @@ -2078,6 +2093,8 @@ def load_general_cfg(self):
'main', 'EditorWindow', 'width', type='int'))
self.win_height.set(idleConf.GetOption(
'main', 'EditorWindow', 'height', type='int'))
self.cursor_blink.set(idleConf.GetOption(
'main', 'EditorWindow', 'cursor-blink', type='bool'))
self.autocomplete_wait.set(idleConf.GetOption(
'extensions', 'AutoComplete', 'popupwait', type='int'))
self.paren_style.set(idleConf.GetOption(
Expand Down
16 changes: 16 additions & 0 deletions 16 Lib/idlelib/editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,12 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
self.indentwidth = self.tabwidth
self.set_notabs_indentwidth()

# Store the current value of the insertofftime now so we can restore
# it if needed.
if not hasattr(idleConf, 'blink_off_time'):
idleConf.blink_off_time = self.text['insertofftime']
self.update_cursor_blink()

# When searching backwards for a reliable place to begin parsing,
# first start num_context_lines[0] lines back, then
# num_context_lines[1] lines back if that didn't work, and so on.
Expand Down Expand Up @@ -803,6 +809,16 @@ def colorize_syntax_error(self, text, pos):
text.mark_set("insert", pos + "+1c")
text.see(pos)

def update_cursor_blink(self):
"Update the cursor blink configuration."
cursorblink = idleConf.GetOption(
'main', 'EditorWindow', 'cursor-blink', type='bool')
if not cursorblink:
self.text['insertofftime'] = 0
else:
# Restore the original value
self.text['insertofftime'] = idleConf.blink_off_time

def ResetFont(self):
"Update the text widgets' font if it is changed"
# Called from configdialog.py
Expand Down
4 changes: 4 additions & 0 deletions 4 Lib/idlelib/idle_test/test_configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -1135,6 +1135,10 @@ def test_editor_size(self):
d.win_width_int.insert(0, '11')
self.assertEqual(mainpage, {'EditorWindow': {'width': '11'}})

def test_cursor_blink(self):
self.page.cursor_blink_bool.invoke()
self.assertEqual(mainpage, {'EditorWindow': {'cursor-blink': 'False'}})

def test_autocomplete_wait(self):
self.page.auto_wait_int.delete(0, 'end')
self.page.auto_wait_int.insert(0, '11')
Expand Down
3 changes: 3 additions & 0 deletions 3 Misc/NEWS.d/next/IDLE/2019-10-28-04-48-03.bpo-4630.upgjiV.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Add an option to toggle IDLE's cursor blink for shell, editor, and output
windows. See Settings, General, Window Preferences, Cursor Blink.
Patch by Zachary Spytz.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.