Skip to content

Commit 22bceda

Browse files
committed
gh-38066: Add Shift-Tab smart-dedent in IDLE editor
1 parent d54c2d8 commit 22bceda

4 files changed

Lines changed: 25 additions & 0 deletions

File tree

‎Lib/idlelib/config-keys.def‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ goto-line=<Alt-Key-g> <Meta-Key-g> <Alt-Key-G> <Meta-Key-G>
4747
smart-backspace=<Key-BackSpace>
4848
newline-and-indent=<Key-Return> <Key-KP_Enter>
4949
smart-indent=<Key-Tab>
50+
smart-dedent=<Shift-Key-Tab>
5051
indent-region=<Control-Key-bracketright>
5152
dedent-region=<Control-Key-bracketleft>
5253
comment-region=<Alt-Key-3> <Meta-Key-3>
@@ -107,6 +108,7 @@ goto-line=<Alt-Key-g> <Meta-Key-g>
107108
smart-backspace=<Key-BackSpace>
108109
newline-and-indent=<Key-Return> <Key-KP_Enter>
109110
smart-indent=<Key-Tab>
111+
smart-dedent=<Shift-Key-Tab>
110112
indent-region=<Control-Key-bracketright>
111113
dedent-region=<Control-Key-bracketleft>
112114
comment-region=<Alt-Key-3>
@@ -167,6 +169,7 @@ goto-line = <Control-Key-g>
167169
smart-backspace = <Key-BackSpace>
168170
newline-and-indent = <Key-Return> <Key-KP_Enter>
169171
smart-indent = <Key-Tab>
172+
smart-dedent = <Shift-Key-Tab>
170173
indent-region = <Control-Key-bracketright>
171174
dedent-region = <Control-Key-bracketleft>
172175
comment-region = <Control-Key-d>
@@ -227,6 +230,7 @@ goto-line=<Command-Key-j>
227230
smart-backspace=<Key-BackSpace>
228231
newline-and-indent=<Key-Return> <Key-KP_Enter>
229232
smart-indent=<Key-Tab>
233+
smart-dedent=<Shift-Key-Tab>
230234
indent-region=<Command-Key-bracketright>
231235
dedent-region=<Command-Key-bracketleft>
232236
comment-region=<Control-Key-3>
@@ -275,6 +279,7 @@ smart-backspace = <Key-BackSpace>
275279
change-indentwidth = <Control-Key-u>
276280
do-nothing = <Control-Key-F12>
277281
smart-indent = <Key-Tab>
282+
smart-dedent = <Shift-Key-Tab>
278283
center-insert = <Control-Key-l>
279284
history-next = <Control-Key-n>
280285
del-word-right = <Option-Key-Delete>

‎Lib/idlelib/config.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ def GetCoreKeys(self, keySetName=None):
678678
'<<smart-backspace>>': ['<Key-BackSpace>'],
679679
'<<newline-and-indent>>': ['<Key-Return>', '<Key-KP_Enter>'],
680680
'<<smart-indent>>': ['<Key-Tab>'],
681+
'<<smart-dedent>>': ['<Shift-Key-Tab>', '<Shift-ISO_Left_Tab>'],
681682
'<<indent-region>>': ['<Control-Key-bracketright>'],
682683
'<<dedent-region>>': ['<Control-Key-bracketleft>'],
683684
'<<comment-region>>': ['<Alt-Key-3>'],

‎Lib/idlelib/editor.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
141141
text.bind("<<smart-backspace>>",self.smart_backspace_event)
142142
text.bind("<<newline-and-indent>>",self.newline_and_indent_event)
143143
text.bind("<<smart-indent>>",self.smart_indent_event)
144+
text.bind("<<smart-dedent>>", self.smart_dedent_event)
144145
self.fregion = fregion = self.FormatRegion(self)
145146
# self.fregion used in smart_indent_event to access indent_region.
146147
text.bind("<<indent-region>>", fregion.indent_region_event)
@@ -1426,6 +1427,23 @@ def smart_indent_event(self, event):
14261427
finally:
14271428
text.undo_block_stop()
14281429

1430+
def smart_dedent_event(self, event):
1431+
text = self.text
1432+
first, last = self.get_selection_indices()
1433+
text.undo_block_start()
1434+
try:
1435+
if first and last:
1436+
if index2line(first) != index2line(last):
1437+
return self.fregion.dedent_region_event(event)
1438+
prefix = text.get("insert linestart", "insert")
1439+
raw, effective = get_line_indent(prefix, self.tabwidth)
1440+
if raw == len(prefix) and effective > 0:
1441+
self.reindent_to(max(0, effective - self.indentwidth))
1442+
text.see("insert")
1443+
return "break"
1444+
finally:
1445+
text.undo_block_stop()
1446+
14291447
def newline_and_indent_event(self, event):
14301448
"""Insert a newline and indentation after Enter keypress event.
14311449
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add smart-dedent bound to Shift-Tab in IDLE to dedent selected lines or the current line.

0 commit comments

Comments
 (0)