summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/codecontext.py
diff options
context:
space:
mode:
authorCheryl Sabella <cheryl.sabella@gmail.com>2018-06-08 05:21:15 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2018-06-08 05:21:15 (GMT)
commit041272b657867f5bec925b19aabf23944125d49b (patch)
tree37076943947e50fa8d30193e208b94d12a2cfa59 /Lib/idlelib/codecontext.py
parent4aa3006619392438b0775a2f488bbe9e7a22c468 (diff)
downloadcpython-041272b657867f5bec925b19aabf23944125d49b.zip
cpython-041272b657867f5bec925b19aabf23944125d49b.tar.gz
cpython-041272b657867f5bec925b19aabf23944125d49b.tar.bz2
bpo-33768: IDLE: Clicking on code context line moves it to top of editor (GH-7411)
Diffstat (limited to 'Lib/idlelib/codecontext.py')
-rw-r--r--Lib/idlelib/codecontext.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py
index 73d3ba6..8b378bc 100644
--- a/Lib/idlelib/codecontext.py
+++ b/Lib/idlelib/codecontext.py
@@ -117,6 +117,7 @@ class CodeContext:
height=1,
width=1, # Don't request more than we get.
padx=padx, border=border, relief=SUNKEN, state='disabled')
+ self.context.bind('<ButtonRelease-1>', self.jumptoline)
# Pack the context widget before and above the text_frame widget,
# thus ensuring that it will appear directly above text_frame.
self.context.pack(side=TOP, fill=X, expand=False,
@@ -196,6 +197,20 @@ class CodeContext:
self.context.insert('end', '\n'.join(context_strings[showfirst:]))
self.context['state'] = 'disabled'
+ def jumptoline(self, event=None):
+ "Show clicked context line at top of editor."
+ lines = len(self.info)
+ if lines == 1: # No context lines are showing.
+ newtop = 1
+ else:
+ # Line number clicked.
+ contextline = int(float(self.context.index('insert')))
+ # Lines not displayed due to maxlines.
+ offset = max(1, lines - self.context_depth) - 1
+ newtop = self.info[offset + contextline][0]
+ self.text.yview(f'{newtop}.0')
+ self.update_code_context()
+
def timer_event(self):
"Event on editor text widget triggered every UPDATEINTERVAL ms."
if self.context: