annotate Lib/idlelib/EditorWindow.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 64a7fae544a6
children 66643fcf6ee9 cb7421cdaec4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 import sys
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2 import os
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 import re
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
4 import string
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5 import imp
47130
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46664
diff changeset
6 from tkinter import *
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46664
diff changeset
7 import tkinter.simpledialog as tkSimpleDialog
ef4cca2d6171 Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents: 46664
diff changeset
8 import tkinter.messagebox as tkMessageBox
42324
4bbbe0c55fa2 Merged revisions 56443-56466 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
9 import traceback
18582
28818766a64c py-cvs-2000_07_13 (Rev 1.38) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 18537
diff changeset
10 import webbrowser
42324
4bbbe0c55fa2 Merged revisions 56443-56466 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
11
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
12 from idlelib.MultiCall import MultiCallCreator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
13 from idlelib import idlever
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
14 from idlelib import WindowList
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
15 from idlelib import SearchDialog
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
16 from idlelib import GrepDialog
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
17 from idlelib import ReplaceDialog
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
18 from idlelib import PyParse
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
19 from idlelib.configHandler import idleConf
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
20 from idlelib import aboutDialog, textView, configDialog
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
21 from idlelib import macosxSupport
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23 # The default tab setting for a Text widget, in average-width characters.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 TK_TABWIDTH_DEFAULT = 8
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25
53453
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
26 def _sphinx_version():
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
27 "Format sys.version_info to produce the Sphinx version string used to install the chm docs"
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
28 major, minor, micro, level, serial = sys.version_info
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
29 release = '%s%s' % (major, minor)
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
30 if micro:
54816
5cb4e51a4408 Merged revisions 73415,73417-73418 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53453
diff changeset
31 release += '%s' % (micro,)
5cb4e51a4408 Merged revisions 73415,73417-73418 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53453
diff changeset
32 if level == 'candidate':
5cb4e51a4408 Merged revisions 73415,73417-73418 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53453
diff changeset
33 release += 'rc%s' % (serial,)
5cb4e51a4408 Merged revisions 73415,73417-73418 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53453
diff changeset
34 elif level != 'final':
53453
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
35 release += '%s%s' % (level[0], serial)
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
36 return release
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
37
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
38 def _find_module(fullname, path=None):
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
39 """Version of imp.find_module() that handles hierarchical module names"""
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
40
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
41 file = None
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
42 for tgt in fullname.split('.'):
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
43 if file is not None:
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
44 file.close() # close intermediate files
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
45 (file, filename, descr) = imp.find_module(tgt, path)
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
46 if descr[2] == imp.PY_SOURCE:
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
47 break # find but not load the source file
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
48 module = imp.load_module(tgt, file, filename, descr)
27208
b0d528327c4c SF bug #652933 (for IdleFork): Open Module "math" Fails (Hettinger)
Kurt B. Kaiser <kbk@shore.net>
parents: 27196
diff changeset
49 try:
b0d528327c4c SF bug #652933 (for IdleFork): Open Module "math" Fails (Hettinger)
Kurt B. Kaiser <kbk@shore.net>
parents: 27196
diff changeset
50 path = module.__path__
b0d528327c4c SF bug #652933 (for IdleFork): Open Module "math" Fails (Hettinger)
Kurt B. Kaiser <kbk@shore.net>
parents: 27196
diff changeset
51 except AttributeError:
42722
3284307a7351 Fix raise with 2to3
Kurt B. Kaiser <kbk@shore.net>
parents: 42714
diff changeset
52 raise ImportError('No source for module ' + module.__name__)
69297
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
53 if descr[2] != imp.PY_SOURCE:
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
54 # If all of the above fails and didn't raise an exception,fallback
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
55 # to a straight import which can find __init__.py in a package.
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
56 m = __import__(fullname)
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
57 try:
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
58 filename = m.__file__
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
59 except AttributeError:
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
60 pass
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
61 else:
27eda70c25b1 Issue 11718: Teach IDLE's open module dialog to find packages.
Raymond Hettinger <python@rcn.com>
parents: 68943
diff changeset
62 file = None
69311
dfbbe4c1a7bb Fix nit.
Raymond Hettinger <python@rcn.com>
parents: 69297
diff changeset
63 descr = os.path.splitext(filename)[1], None, imp.PY_SOURCE
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
64 return file, filename, descr
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
65
74800
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
66
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
67 class HelpDialog(object):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
68
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
69 def __init__(self):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
70 self.parent = None # parent of help window
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
71 self.dlg = None # the help window iteself
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
72
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
73 def display(self, parent, near=None):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
74 """ Display the help dialog.
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
75
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
76 parent - parent widget for the help window
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
77
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
78 near - a Toplevel widget (e.g. EditorWindow or PyShell)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
79 to use as a reference for placing the help window
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
80 """
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
81 if self.dlg is None:
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
82 self.show_dialog(parent)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
83 if near:
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
84 self.nearwindow(near)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
85
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
86 def show_dialog(self, parent):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
87 self.parent = parent
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
88 fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),'help.txt')
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
89 self.dlg = dlg = textView.view_file(parent,'Help',fn, modal=False)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
90 dlg.bind('<Destroy>', self.destroy, '+')
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
91
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
92 def nearwindow(self, near):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
93 # Place the help dialog near the window specified by parent.
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
94 # Note - this may not reposition the window in Metacity
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
95 # if "/apps/metacity/general/disable_workarounds" is enabled
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
96 dlg = self.dlg
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
97 geom = (near.winfo_rootx() + 10, near.winfo_rooty() + 10)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
98 dlg.withdraw()
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
99 dlg.geometry("=+%d+%d" % geom)
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
100 dlg.deiconify()
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
101 dlg.lift()
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
102
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
103 def destroy(self, ev=None):
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
104 self.dlg = None
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
105 self.parent = None
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
106
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
107 helpDialog = HelpDialog() # singleton instance
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
108
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
109
34212
1e8b033f91dc The remote procedure call module rpc.py can now access data attributes of
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
110 class EditorWindow(object):
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
111 from idlelib.Percolator import Percolator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
112 from idlelib.ColorDelegator import ColorDelegator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
113 from idlelib.UndoDelegator import UndoDelegator
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
114 from idlelib.IOBinding import IOBinding, filesystemencoding, encoding
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
115 from idlelib import Bindings
47269
82725438453b Fixed old Tkinter import, the last apparently
Guilherme Polo <ggpolo@gmail.com>
parents: 47130
diff changeset
116 from tkinter import Toplevel
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
117 from idlelib.MultiStatusBar import MultiStatusBar
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
118
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
119 help_url = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121 def __init__(self, flist=None, filename=None, key=None, root=None):
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
122 if EditorWindow.help_url is None:
30527
fbad3efa40bb Let IDLE use the HTMLHelp docs on Windows, if found.
Thomas Heller <theller@ctypes.org>
parents: 29794
diff changeset
123 dochome = os.path.join(sys.prefix, 'Doc', 'index.html')
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
124 if sys.platform.count('linux'):
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
125 # look for html docs in a couple of standard places
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
126 pyver = 'python-docs-' + '%s.%s.%s' % sys.version_info[:3]
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
127 if os.path.isdir('/var/www/html/python/'): # "python2" rpm
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
128 dochome = '/var/www/html/python/index.html'
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
129 else:
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
130 basepath = '/usr/share/doc/' # standard location
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
131 dochome = os.path.join(basepath, pyver,
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
132 'Doc', 'index.html')
32681
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
133 elif sys.platform[:3] == 'win':
32777
13d20322787d EditorWindow.py was not finding the .chm help file on Windows. Typo
Kurt B. Kaiser <kbk@shore.net>
parents: 32681
diff changeset
134 chmfile = os.path.join(sys.prefix, 'Doc',
53453
a3a246da144b Merged revisions 71812 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 52847
diff changeset
135 'Python%s.chm' % _sphinx_version())
30527
fbad3efa40bb Let IDLE use the HTMLHelp docs on Windows, if found.
Thomas Heller <theller@ctypes.org>
parents: 29794
diff changeset
136 if os.path.isfile(chmfile):
fbad3efa40bb Let IDLE use the HTMLHelp docs on Windows, if found.
Thomas Heller <theller@ctypes.org>
parents: 29794
diff changeset
137 dochome = chmfile
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
138 elif macosxSupport.runningAsOSXApp():
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
139 # documentation is stored inside the python framework
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
140 dochome = os.path.join(sys.prefix,
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
141 'Resources/English.lproj/Documentation/index.html')
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
142 dochome = os.path.normpath(dochome)
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
143 if os.path.isfile(dochome):
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
144 EditorWindow.help_url = dochome
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
145 if sys.platform == 'darwin':
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
146 # Safari requires real file:-URLs
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
147 EditorWindow.help_url = 'file://' + EditorWindow.help_url
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
148 else:
50940
c7bb33207495 Merged revisions 68797,68801 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48541
diff changeset
149 EditorWindow.help_url = "http://docs.python.org/%d.%d" % sys.version_info[:2]
21620
7246fe5e5a28 moving to new config system
Steven M. Gava <elguavas@python.net>
parents: 21035
diff changeset
150 currentTheme=idleConf.CurrentTheme()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
151 self.flist = flist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
152 root = root or flist.root
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
153 self.root = root
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
154 try:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
155 sys.ps1
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
156 except AttributeError:
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
157 sys.ps1 = '>>> '
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
158 self.menubar = Menu(root)
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32777
diff changeset
159 self.top = top = WindowList.ListedToplevel(root, menu=self.menubar)
22600
0c5c64b75d5d further work on new config system;
Steven M. Gava <elguavas@python.net>
parents: 22363
diff changeset
160 if flist:
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
161 self.tkinter_vars = flist.vars
68488
0991b40e895d #11515: fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 67752
diff changeset
162 #self.top.instance_dict makes flist.inversedict available to
0991b40e895d #11515: fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 67752
diff changeset
163 #configDialog.py so it can access all EditorWindow instances
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
164 self.top.instance_dict = flist.inversedict
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
165 else:
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
166 self.tkinter_vars = {} # keys: Tkinter event names
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
167 # values: Tkinter variable instances
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
168 self.top.instance_dict = {}
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
169 self.recent_files_path = os.path.join(idleConf.GetUserCfgDir(),
22602
f3a913e64eb8 further work on new config system;
Steven M. Gava <elguavas@python.net>
parents: 22600
diff changeset
170 'recent-files.lst')
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
171 self.text_frame = text_frame = Frame(top)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39669
diff changeset
172 self.vbar = vbar = Scrollbar(text_frame, name='vbar')
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
173 self.width = idleConf.GetOption('main','EditorWindow','width')
52847
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
174 text_options = {
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
175 'name': 'text',
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
176 'padx': 5,
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
177 'wrap': 'none',
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
178 'width': self.width,
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
179 'height': idleConf.GetOption('main', 'EditorWindow', 'height')}
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
180 if TkVersion >= 8.5:
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
181 # Starting with tk 8.5 we have to set the new tabstyle option
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
182 # to 'wordprocessor' to achieve the same display of tabs as in
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
183 # older tk versions.
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
184 text_options['tabstyle'] = 'wordprocessor'
aacf5094a1b5 Merged revisions 70723 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents: 51551
diff changeset
185 self.text = text = MultiCallCreator(Text)(text_frame, **text_options)
33218
066c7890cd61 1. If user passes a non-existant filename on the commandline, just open
Kurt B. Kaiser <kbk@shore.net>
parents: 32777
diff changeset
186 self.top.focused_widget = self.text
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
187
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
188 self.createmenubar()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
189 self.apply_bindings()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
190
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
191 self.top.protocol("WM_DELETE_WINDOW", self.close)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
192 self.top.bind("<<close-window>>", self.close_event)
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
193 if macosxSupport.runningAsOSXApp():
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
194 # Command-W on editorwindows doesn't work without this.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
195 text.bind('<<close-window>>', self.close_event)
67022
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
196 # Some OS X systems have only one mouse button,
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
197 # so use control-click for pulldown menus there.
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
198 # (Note, AquaTk defines <2> as the right button if
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
199 # present and the Tk Text widget already binds <2>.)
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
200 text.bind("<Control-Button-1>",self.right_menu_event)
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
201 else:
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
202 # Elsewhere, use right-click for pulldown menus.
381556369caf Merged revisions 87374 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 54816
diff changeset
203 text.bind("<3>",self.right_menu_event)
25456
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
204 text.bind("<<cut>>", self.cut)
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
205 text.bind("<<copy>>", self.copy)
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
206 text.bind("<<paste>>", self.paste)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
207 text.bind("<<center-insert>>", self.center_insert_event)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
208 text.bind("<<help>>", self.help_dialog)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
209 text.bind("<<python-docs>>", self.python_docs)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
210 text.bind("<<about-idle>>", self.about_dialog)
21035
c4499596b1a4 back in harness on new config system
Steven M. Gava <elguavas@python.net>
parents: 20304
diff changeset
211 text.bind("<<open-config-dialog>>", self.config_dialog)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
212 text.bind("<<open-module>>", self.open_module)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
213 text.bind("<<do-nothing>>", lambda event: "break")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
214 text.bind("<<select-all>>", self.select_all)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
215 text.bind("<<remove-selection>>", self.remove_selection)
21626
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
216 text.bind("<<find>>", self.find_event)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
217 text.bind("<<find-again>>", self.find_again_event)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
218 text.bind("<<find-in-files>>", self.find_in_files_event)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
219 text.bind("<<find-selection>>", self.find_selection_event)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
220 text.bind("<<replace>>", self.replace_event)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
221 text.bind("<<goto-line>>", self.goto_line_event)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
222 text.bind("<<smart-backspace>>",self.smart_backspace_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
223 text.bind("<<newline-and-indent>>",self.newline_and_indent_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
224 text.bind("<<smart-indent>>",self.smart_indent_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
225 text.bind("<<indent-region>>",self.indent_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
226 text.bind("<<dedent-region>>",self.dedent_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
227 text.bind("<<comment-region>>",self.comment_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
228 text.bind("<<uncomment-region>>",self.uncomment_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
229 text.bind("<<tabify-region>>",self.tabify_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
230 text.bind("<<untabify-region>>",self.untabify_region_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
231 text.bind("<<toggle-tabs>>",self.toggle_tabs_event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
232 text.bind("<<change-indentwidth>>",self.change_indentwidth_event)
27272
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
233 text.bind("<Left>", self.move_at_edge_if_selection(0))
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
234 text.bind("<Right>", self.move_at_edge_if_selection(1))
34515
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
235 text.bind("<<del-word-left>>", self.del_word_left)
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
236 text.bind("<<del-word-right>>", self.del_word_right)
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
237 text.bind("<<beginning-of-line>>", self.home_callback)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
238
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
239 if flist:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
240 flist.inversedict[self] = key
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
241 if key:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
242 flist.dict[key] = self
29362
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
243 text.bind("<<open-new-window>>", self.new_callback)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
244 text.bind("<<close-all-windows>>", self.flist.close_all_callback)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
245 text.bind("<<open-class-browser>>", self.open_class_browser)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
246 text.bind("<<open-path-browser>>", self.open_path_browser)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
247
20304
e44cdef791ee merged status bar packing patch
Steven M. Gava <elguavas@python.net>
parents: 19170
diff changeset
248 self.set_status_bar()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
249 vbar['command'] = text.yview
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
250 vbar.pack(side=RIGHT, fill=Y)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
251 text['yscrollcommand'] = vbar.set
34520
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
252 fontWeight = 'normal'
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
253 if idleConf.GetOption('main', 'EditorWindow', 'font-bold', type='bool'):
22238
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
254 fontWeight='bold'
34520
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
255 text.config(font=(idleConf.GetOption('main', 'EditorWindow', 'font'),
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
256 idleConf.GetOption('main', 'EditorWindow', 'font-size'),
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
257 fontWeight))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
258 text_frame.pack(side=LEFT, fill=BOTH, expand=1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
259 text.pack(side=TOP, fill=BOTH, expand=1)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
260 text.focus_set()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
261
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
262 # usetabs true -> literal tab characters are used by indent and
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
263 # dedent cmds, possibly mixed with spaces if
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
264 # indentwidth is not a multiple of tabwidth,
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
265 # which will cause Tabnanny to nag!
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
266 # false -> tab characters are converted to spaces by indent
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
267 # and dedent cmds, and ditto TAB keystrokes
34520
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
268 # Although use-spaces=0 can be configured manually in config-main.def,
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
269 # configuration of tabs v. spaces is not supported in the configuration
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
270 # dialog. IDLE promotes the preferred Python indentation: use spaces!
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
271 usespaces = idleConf.GetOption('main', 'Indent', 'use-spaces', type='bool')
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
272 self.usetabs = not usespaces
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
273
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
274 # tabwidth is the display width of a literal tab character.
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
275 # CAUTION: telling Tk to use anything other than its default
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
276 # tab setting causes it to use an entirely different tabbing algorithm,
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
277 # treating tab stops as fixed distances from the left margin.
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
278 # Nobody expects this, so for now tabwidth should never be changed.
34520
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
279 self.tabwidth = 8 # must remain 8 until Tk is fixed.
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
280
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
281 # indentwidth is the number of screen characters per indent level.
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
282 # The recommended Python indentation is four spaces.
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
283 self.indentwidth = self.tabwidth
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
284 self.set_notabs_indentwidth()
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
285
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
286 # If context_use_ps1 is true, parsing searches back for a ps1 line;
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
287 # else searches for a popular (if, def, ...) Python stmt.
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
288 self.context_use_ps1 = False
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
289
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
290 # When searching backwards for a reliable place to begin parsing,
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
291 # first start num_context_lines[0] lines back, then
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
292 # num_context_lines[1] lines back if that didn't work, and so on.
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
293 # The last value should be huge (larger than the # of lines in a
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
294 # conceivable file).
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
295 # Making the initial values larger slows things down more often.
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
296 self.num_context_lines = 50, 500, 5000000
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
297 self.per = per = self.Percolator(text)
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
298 self.undo = undo = self.UndoDelegator()
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
299 per.insertfilter(undo)
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
300 text.undo_block_start = undo.undo_block_start
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
301 text.undo_block_stop = undo.undo_block_stop
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
302 undo.set_saved_change_hook(self.saved_change_hook)
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
303 # IOBinding implements file I/O and printing functionality
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
304 self.io = io = self.IOBinding(self)
24183
1723bcdc1e85 1. Prevent Undo before IOmark in PyShell.PyShell
Kurt B. Kaiser <kbk@shore.net>
parents: 24118
diff changeset
305 io.set_filename_change_hook(self.filename_change_hook)
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
306 self.good_load = False
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
307 self.set_indentation_params(False)
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
308 self.color = None # initialized below in self.ResetColorizer
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
309 if filename:
29362
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
310 if os.path.exists(filename) and not os.path.isdir(filename):
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
311 if io.loadfile(filename):
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
312 self.good_load = True
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
313 is_py_src = self.ispythonsource(filename)
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
314 self.set_indentation_params(is_py_src)
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
315 if is_py_src:
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
316 self.color = color = self.ColorDelegator()
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
317 per.insertfilter(color)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
318 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
319 io.set_filename(filename)
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
320 self.ResetColorizer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
321 self.saved_change_hook()
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
322 self.update_recent_files_list()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
323 self.load_extensions()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
324 menu = self.menudict.get('windows')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
325 if menu:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
326 end = menu.index("end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
327 if end is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
328 end = -1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
329 if end >= 0:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
330 menu.add_separator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
331 end = end + 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
332 self.wmenu_end = end
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
333 WindowList.register_callback(self.postwindowsmenu)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
334
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
335 # Some abstractions so IDLE extensions are cross-IDE
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
336 self.askyesno = tkMessageBox.askyesno
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
337 self.askinteger = tkSimpleDialog.askinteger
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
338 self.showerror = tkMessageBox.showerror
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
339
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
340 def _filename_to_unicode(self, filename):
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
341 """convert filename to unicode in order to display it in Tk"""
41575
beacf40b5960 Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
342 if isinstance(filename, str) or not filename:
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
343 return filename
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
344 else:
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
345 try:
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
346 return filename.decode(self.filesystemencoding)
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
347 except UnicodeDecodeError:
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
348 # XXX
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
349 try:
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
350 return filename.decode(self.encoding)
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
351 except UnicodeDecodeError:
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
352 # byte-to-byte conversion
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
353 return filename.decode('iso8859-1')
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
354
29362
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
355 def new_callback(self, event):
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
356 dirname, basename = self.io.defaultfilename()
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
357 self.flist.new(dirname)
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
358 return "break"
f82b6d2b73f1 SF 748973 Guido van Rossum patch
Kurt B. Kaiser <kbk@shore.net>
parents: 27272
diff changeset
359
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
360 def home_callback(self, event):
68908
a7d50a4e124e <Home> toggle non-functional when NumLock set
Kurt B. Kaiser <kbk@shore.net>
parents: 68488
diff changeset
361 if (event.state & 4) != 0 and event.keysym == "Home":
a7d50a4e124e <Home> toggle non-functional when NumLock set
Kurt B. Kaiser <kbk@shore.net>
parents: 68488
diff changeset
362 # state&4==Control. If <Control-Home>, use the Tk binding.
a7d50a4e124e <Home> toggle non-functional when NumLock set
Kurt B. Kaiser <kbk@shore.net>
parents: 68488
diff changeset
363 return
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
364 if self.text.index("iomark") and \
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
365 self.text.compare("iomark", "<=", "insert lineend") and \
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
366 self.text.compare("insert linestart", "<=", "iomark"):
68942
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
367 # In Shell on input line, go to just after prompt
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
368 insertpt = int(self.text.index("iomark").split(".")[1])
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
369 else:
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
370 line = self.text.get("insert linestart", "insert lineend")
48541
dfc37583f204 xrange -> range.
Georg Brandl <georg@python.org>
parents: 47269
diff changeset
371 for insertpt in range(len(line)):
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
372 if line[insertpt] not in (' ','\t'):
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
373 break
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
374 else:
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
375 insertpt=len(line)
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
376 lineat = int(self.text.index("insert").split('.')[1])
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
377 if insertpt == lineat:
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
378 insertpt = 0
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
379 dest = "insert linestart+"+str(insertpt)+"c"
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
380 if (event.state&1) == 0:
68942
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
381 # shift was not pressed
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
382 self.text.tag_remove("sel", "1.0", "end")
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
383 else:
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
384 if not self.text.index("sel.first"):
68942
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
385 self.text.mark_set("my_anchor", "insert") # there was no previous selection
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
386 else:
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
387 if self.text.compare(self.text.index("sel.first"), "<", self.text.index("insert")):
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
388 self.text.mark_set("my_anchor", "sel.first") # extend back
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
389 else:
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
390 self.text.mark_set("my_anchor", "sel.last") # extend forward
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
391 first = self.text.index(dest)
68942
c4d355363114 <Home> toggle failing on Tk 8.5, causing IDLE exits. Issue #4676
Kurt B. Kaiser <kbk@shore.net>
parents: 68908
diff changeset
392 last = self.text.index("my_anchor")
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
393 if self.text.compare(first,">",last):
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
394 first,last = last,first
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
395 self.text.tag_remove("sel", "1.0", "end")
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
396 self.text.tag_add("sel", first, last)
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
397 self.text.mark_set("insert", dest)
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
398 self.text.see("insert")
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
399 return "break"
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45888
diff changeset
400
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
401 def set_status_bar(self):
20304
e44cdef791ee merged status bar packing patch
Steven M. Gava <elguavas@python.net>
parents: 19170
diff changeset
402 self.status_bar = self.MultiStatusBar(self.top)
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
403 if macosxSupport.runningAsOSXApp():
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
404 # Insert some padding to avoid obscuring some of the statusbar
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
405 # by the resize widget.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
406 self.status_bar.set_label('_padding1', ' ', side=RIGHT)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
407 self.status_bar.set_label('column', 'Col: ?', side=RIGHT)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
408 self.status_bar.set_label('line', 'Ln: ?', side=RIGHT)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
409 self.status_bar.pack(side=BOTTOM, fill=X)
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
410 self.text.bind("<<set-line-and-column>>", self.set_line_and_column)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
411 self.text.event_add("<<set-line-and-column>>",
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
412 "<KeyRelease>", "<ButtonRelease>")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
413 self.text.after_idle(self.set_line_and_column)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
414
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
415 def set_line_and_column(self, event=None):
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
416 line, column = self.text.index(INSERT).split('.')
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
417 self.status_bar.set_label('column', 'Col: %s' % column)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
418 self.status_bar.set_label('line', 'Ln: %s' % line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
419
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
420 menu_specs = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
421 ("file", "_File"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
422 ("edit", "_Edit"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
423 ("format", "F_ormat"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
424 ("run", "_Run"),
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
425 ("options", "_Options"),
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
426 ("windows", "_Windows"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
427 ("help", "_Help"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
428 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
429
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
430 if macosxSupport.runningAsOSXApp():
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
431 del menu_specs[-3]
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
432 menu_specs[-2] = ("windows", "_Window")
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
433
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
434
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
435 def createmenubar(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
436 mbar = self.menubar
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
437 self.menudict = menudict = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
438 for name, label in self.menu_specs:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
439 underline, label = prepstr(label)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
440 menudict[name] = menu = Menu(mbar, name=name)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
441 mbar.add_cascade(label=label, menu=menu, underline=underline)
67041
4fafe97d0adb #6075: make idle work with both Carbon AquaTk and Cocoa AquaTk. Patch by Kevin Walzer and Ned Deily.
Georg Brandl <georg@python.org>
parents: 67021
diff changeset
442 if macosxSupport.isCarbonAquaTk(self.root):
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
443 # Insert the application menu
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
444 menudict['application'] = menu = Menu(mbar, name='apple')
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
445 mbar.add_cascade(label='IDLE', menu=menu)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
446 self.fill_menus()
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
447 self.recent_files_menu = Menu(self.menubar)
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
448 self.menudict['file'].insert_cascade(3, label='Recent Files',
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
449 underline=0,
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
450 menu=self.recent_files_menu)
27245
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
451 self.base_helpmenu_length = self.menudict['help'].index(END)
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
452 self.reset_help_menu_entries()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
453
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
454 def postwindowsmenu(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
455 # Only called when Windows menu exists
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
456 menu = self.menudict['windows']
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
457 end = menu.index("end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
458 if end is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
459 end = -1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
460 if end > self.wmenu_end:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
461 menu.delete(self.wmenu_end+1, end)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
462 WindowList.add_windows_to_menu(menu)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
463
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
464 rmenu = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
465
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
466 def right_menu_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
467 self.text.tag_remove("sel", "1.0", "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
468 self.text.mark_set("insert", "@%d,%d" % (event.x, event.y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
469 if not self.rmenu:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
470 self.make_rmenu()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
471 rmenu = self.rmenu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
472 self.event = event
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
473 iswin = sys.platform[:3] == 'win'
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
474 if iswin:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
475 self.text.config(cursor="arrow")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
476 rmenu.tk_popup(event.x_root, event.y_root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
477 if iswin:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
478 self.text.config(cursor="ibeam")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
479
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
480 rmenu_specs = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
481 # ("Label", "<<virtual-event>>"), ...
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
482 ("Close", "<<close-window>>"), # Example
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
483 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
484
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
485 def make_rmenu(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
486 rmenu = Menu(self.text, tearoff=0)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
487 for label, eventname in self.rmenu_specs:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
488 def command(text=self.text, eventname=eventname):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
489 text.event_generate(eventname)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
490 rmenu.add_command(label=label, command=command)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
491 self.rmenu = rmenu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
492
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
493 def about_dialog(self, event=None):
29421
2ba5ec6b3cda 1. Remove the Readme entry on the Help Menu, now in About dialog.
Kurt B. Kaiser <kbk@shore.net>
parents: 29368
diff changeset
494 aboutDialog.AboutDialog(self.top,'About IDLE')
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
495
21035
c4499596b1a4 back in harness on new config system
Steven M. Gava <elguavas@python.net>
parents: 20304
diff changeset
496 def config_dialog(self, event=None):
c4499596b1a4 back in harness on new config system
Steven M. Gava <elguavas@python.net>
parents: 20304
diff changeset
497 configDialog.ConfigDialog(self.top,'Settings')
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
498
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
499 def help_dialog(self, event=None):
74800
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
500 if self.root:
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
501 parent = self.root
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
502 else:
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
503 parent = self.top
a949956a80cc Issue 964437 Make IDLE help window non-modal.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 74419
diff changeset
504 helpDialog.display(parent, near=self.top)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
505
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
506 def python_docs(self, event=None):
32681
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
507 if sys.platform[:3] == 'win':
67241
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
508 try:
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
509 os.startfile(self.help_url)
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
510 except WindowsError as why:
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
511 tkMessageBox.showerror(title='Document Start Failure',
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
512 message=str(why), parent=self.text)
23208
382e37ac374d tracking python idle changes:
Steven M. Gava <elguavas@python.net>
parents: 22602
diff changeset
513 else:
27196
d4c8af9119d1 1. Make finding Python help docs more robust, including the installed
Kurt B. Kaiser <kbk@shore.net>
parents: 27074
diff changeset
514 webbrowser.open(self.help_url)
32681
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
515 return "break"
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
516
25456
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
517 def cut(self,event):
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
518 self.text.event_generate("<<Cut>>")
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
519 return "break"
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
520
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
521 def copy(self,event):
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
522 if not self.text.tag_ranges("sel"):
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
523 # There is no selection, so do nothing and maybe interrupt.
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
524 return
25456
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
525 self.text.event_generate("<<Copy>>")
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
526 return "break"
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
527
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
528 def paste(self,event):
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
529 self.text.event_generate("<<Paste>>")
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
530 self.text.see("insert")
25456
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
531 return "break"
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
532
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
533 def select_all(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
534 self.text.tag_add("sel", "1.0", "end-1c")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
535 self.text.mark_set("insert", "1.0")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
536 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
537 return "break"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
538
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
539 def remove_selection(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
540 self.text.tag_remove("sel", "1.0", "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
541 self.text.see("insert")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
542
27272
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
543 def move_at_edge_if_selection(self, edge_index):
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
544 """Cursor move begins at start or end of selection
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
545
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
546 When a left/right cursor key is pressed create and return to Tkinter a
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
547 function which causes a cursor move from the associated edge of the
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
548 selection.
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
549
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
550 """
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
551 self_text_index = self.text.index
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
552 self_text_mark_set = self.text.mark_set
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
553 edges_table = ("sel.first+1c", "sel.last-1c")
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
554 def move_at_edge(event):
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
555 if (event.state & 5) == 0: # no shift(==1) or control(==4) pressed
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
556 try:
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
557 self_text_index("sel.first")
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
558 self_text_mark_set("insert", edges_table[edge_index])
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
559 except TclError:
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
560 pass
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
561 return move_at_edge
64d3fe904a0a Patch 611069 (Christos Georgiou) IDLE TODO:left/right when selected text
Kurt B. Kaiser <kbk@shore.net>
parents: 27245
diff changeset
562
34515
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
563 def del_word_left(self, event):
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
564 self.text.event_generate('<Meta-Delete>')
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
565 return "break"
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
566
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
567 def del_word_right(self, event):
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
568 self.text.event_generate('<Meta-d>')
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
569 return "break"
e3074e94fb75 Add keybindings for del-word-left and del-word-right.
Kurt B. Kaiser <kbk@shore.net>
parents: 34443
diff changeset
570
21626
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
571 def find_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
572 SearchDialog.find(self.text)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
573 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
574
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
575 def find_again_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
576 SearchDialog.find_again(self.text)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
577 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
578
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
579 def find_selection_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
580 SearchDialog.find_selection(self.text)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
581 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
582
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
583 def find_in_files_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
584 GrepDialog.grep(self.text, self.io, self.flist)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
585 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
586
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
587 def replace_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
588 ReplaceDialog.replace(self.text)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
589 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
590
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
591 def goto_line_event(self, event):
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
592 text = self.text
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
593 lineno = tkSimpleDialog.askinteger("Goto",
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
594 "Go to line number:",parent=text)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
595 if lineno is None:
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
596 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
597 if lineno <= 0:
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
598 text.bell()
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
599 return "break"
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
600 text.mark_set("insert", "%d.0" % lineno)
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
601 text.see("insert")
de1ebcef7d31 move core functionality of SearchBindings.py into EditorWindow.py proper
Steven M. Gava <elguavas@python.net>
parents: 21620
diff changeset
602
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
603 def open_module(self, event=None):
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
604 # XXX Shouldn't this be in IOBinding?
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
605 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
606 name = self.text.get("sel.first", "sel.last")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
607 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
608 name = ""
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
609 else:
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
610 name = name.strip()
29364
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
611 name = tkSimpleDialog.askstring("Module",
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
612 "Enter the name of a Python module\n"
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
613 "to search on sys.path and open:",
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
614 parent=self.text, initialvalue=name)
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
615 if name:
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
616 name = name.strip()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
617 if not name:
29364
e0f071b476fd Change to <<open-module>>: always pop up the dialog, using the current
Guido van Rossum <guido@python.org>
parents: 29362
diff changeset
618 return
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
619 # XXX Ought to insert current file's directory in front of path
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
620 try:
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
621 (f, file, (suffix, mode, type)) = _find_module(name)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
622 except (NameError, ImportError) as msg:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
623 tkMessageBox.showerror("Import error", str(msg), parent=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
624 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
625 if type != imp.PY_SOURCE:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
626 tkMessageBox.showerror("Unsupported type",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
627 "%s is not a source module" % name, parent=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
628 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
629 if f:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
630 f.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
631 if self.flist:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
632 self.flist.open(file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
633 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
634 self.io.loadfile(file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
635
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
636 def open_class_browser(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
637 filename = self.io.filename
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
638 if not filename:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
639 tkMessageBox.showerror(
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
640 "No filename",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
641 "This buffer has no associated filename",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
642 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
643 self.text.focus_set()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
644 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
645 head, tail = os.path.split(filename)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
646 base, ext = os.path.splitext(tail)
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
647 from idlelib import ClassBrowser
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
648 ClassBrowser.ClassBrowser(self.flist, base, [head])
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
649
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
650 def open_path_browser(self, event=None):
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
651 from idlelib import PathBrowser
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
652 PathBrowser.PathBrowser(self.flist)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
653
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
654 def gotoline(self, lineno):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
655 if lineno is not None and lineno > 0:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
656 self.text.mark_set("insert", "%d.0" % lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
657 self.text.tag_remove("sel", "1.0", "end")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
658 self.text.tag_add("sel", "insert", "insert +1l")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
659 self.center()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
660
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
661 def ispythonsource(self, filename):
35064
173e90e0d2e3 1. Patch 1196895 Jeff Shute:
Kurt B. Kaiser <kbk@shore.net>
parents: 34520
diff changeset
662 if not filename or os.path.isdir(filename):
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
663 return True
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
664 base, ext = os.path.splitext(os.path.basename(filename))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
665 if os.path.normcase(ext) in (".py", ".pyw"):
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
666 return True
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
667 line = self.text.get('1.0', '1.0 lineend')
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
668 return line.startswith('#!') and 'python' in line
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
669
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
670 def close_hook(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
671 if self.flist:
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
672 self.flist.unregister_maybe_terminate(self)
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
673 self.flist = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
674
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
675 def set_close_hook(self, close_hook):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
676 self.close_hook = close_hook
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
677
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
678 def filename_change_hook(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
679 if self.flist:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
680 self.flist.filename_changed_edit(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
681 self.saved_change_hook()
29367
ca20c3cbc956 1. Update WindowList registry when filename changes so that
Kurt B. Kaiser <kbk@shore.net>
parents: 29364
diff changeset
682 self.top.update_windowlist_registry(self)
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
683 self.ResetColorizer()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
684
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
685 def _addcolorizer(self):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
686 if self.color:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
687 return
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
688 if self.ispythonsource(self.io.filename):
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
689 self.color = self.ColorDelegator()
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
690 # can add more colorizers here...
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
691 if self.color:
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
692 self.per.removefilter(self.undo)
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
693 self.per.insertfilter(self.color)
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
694 self.per.insertfilter(self.undo)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
695
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
696 def _rmcolorizer(self):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
697 if not self.color:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
698 return
35064
173e90e0d2e3 1. Patch 1196895 Jeff Shute:
Kurt B. Kaiser <kbk@shore.net>
parents: 34520
diff changeset
699 self.color.removecolors()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
700 self.per.removefilter(self.color)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
701 self.color = None
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
702
22111
c494084dc6d8 First work on making config changes dynamic,
Steven M. Gava <elguavas@python.net>
parents: 22051
diff changeset
703 def ResetColorizer(self):
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
704 "Update the colour theme"
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
705 # Called from self.filename_change_hook and from configDialog.py
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
706 self._rmcolorizer()
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
707 self._addcolorizer()
31625
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 31515
diff changeset
708 theme = idleConf.GetOption('main','Theme','name')
45371
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
709 normal_colors = idleConf.GetHighlight(theme, 'normal')
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
710 cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg')
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
711 select_colors = idleConf.GetHighlight(theme, 'hilite')
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
712 self.text.config(
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
713 foreground=normal_colors['foreground'],
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
714 background=normal_colors['background'],
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
715 insertbackground=cursor_color,
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
716 selectforeground=select_colors['foreground'],
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
717 selectbackground=select_colors['background'],
7c4c46342137 Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60845 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43734
diff changeset
718 )
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
719
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
720 IDENTCHARS = string.ascii_letters + string.digits + "_"
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
721
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
722 def colorize_syntax_error(self, text, pos):
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
723 text.tag_add("ERROR", pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
724 char = text.get(pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
725 if char and char in self.IDENTCHARS:
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
726 text.tag_add("ERROR", pos + " wordstart", pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
727 if '\n' == text.get(pos): # error at line end
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
728 text.mark_set("insert", pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
729 else:
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
730 text.mark_set("insert", pos + "+1c")
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
731 text.see(pos)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
732
22238
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
733 def ResetFont(self):
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
734 "Update the text widgets' font if it is changed"
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
735 # Called from configDialog.py
22238
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
736 fontWeight='normal'
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
737 if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
738 fontWeight='bold'
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
739 self.text.config(font=(idleConf.GetOption('main','EditorWindow','font'),
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
740 idleConf.GetOption('main','EditorWindow','font-size'),
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
741 fontWeight))
ae578c8c6ced further work on dynamic config changes;
Steven M. Gava <elguavas@python.net>
parents: 22111
diff changeset
742
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
743 def RemoveKeybindings(self):
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
744 "Remove the keybindings before they are changed."
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
745 # Called from configDialog.py
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
746 self.Bindings.default_keydefs = keydefs = idleConf.GetCurrentKeySet()
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
747 for event, keylist in keydefs.items():
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
748 self.text.event_delete(event, *keylist)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
749 for extensionName in self.get_standard_extension_names():
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
750 xkeydefs = idleConf.GetExtensionBindings(extensionName)
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
751 if xkeydefs:
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
752 for event, keylist in xkeydefs.items():
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
753 self.text.event_delete(event, *keylist)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
754
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
755 def ApplyKeybindings(self):
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
756 "Update the keybindings after they are changed"
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
757 # Called from configDialog.py
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
758 self.Bindings.default_keydefs = keydefs = idleConf.GetCurrentKeySet()
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
759 self.apply_bindings()
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
760 for extensionName in self.get_standard_extension_names():
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
761 xkeydefs = idleConf.GetExtensionBindings(extensionName)
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
762 if xkeydefs:
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
763 self.apply_bindings(xkeydefs)
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
764 #update menu accelerators
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
765 menuEventDict = {}
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
766 for menu in self.Bindings.menudefs:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
767 menuEventDict[menu[0]] = {}
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
768 for item in menu[1]:
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
769 if item:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
770 menuEventDict[menu[0]][prepstr(item[0])[1]] = item[1]
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 42722
diff changeset
771 for menubarItem in self.menudict:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
772 menu = self.menudict[menubarItem]
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
773 end = menu.index(END) + 1
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
774 for index in range(0, end):
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
775 if menu.type(index) == 'command':
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
776 accel = menu.entrycget(index, 'accelerator')
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
777 if accel:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
778 itemName = menu.entrycget(index, 'label')
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
779 event = ''
39634
d91585b2cdc1 Remove has_key() references from idlelib. IDLE still doesn't run due
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
780 if menubarItem in menuEventDict:
d91585b2cdc1 Remove has_key() references from idlelib. IDLE still doesn't run due
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
781 if itemName in menuEventDict[menubarItem]:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
782 event = menuEventDict[menubarItem][itemName]
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
783 if event:
35903
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
784 accel = get_accelerator(keydefs, event)
800f48a14a8a Following 'syntax' patch, accelerator keys in menus weren't being
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
785 menu.entryconfig(index, accelerator=accel)
22363
6ac4150c4e88 further work on dynamic reconfiguration;
Steven M. Gava <elguavas@python.net>
parents: 22238
diff changeset
786
34520
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
787 def set_notabs_indentwidth(self):
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
788 "Update the indentwidth if changed and not using tabs in this window"
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
789 # Called from configDialog.py
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
790 if not self.usetabs:
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
791 self.indentwidth = idleConf.GetOption('main', 'Indent','num-spaces',
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
792 type='int')
5fd506516361 Removed ability to configure tabs indent from Options dialog. This 'feature'
Kurt B. Kaiser <kbk@shore.net>
parents: 34515
diff changeset
793
27245
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
794 def reset_help_menu_entries(self):
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
795 "Update the additional help entries on the Help menu"
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
796 help_list = idleConf.GetAllExtraHelpSourcesList()
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
797 helpmenu = self.menudict['help']
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
798 # first delete the extra help entries, if any
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
799 helpmenu_length = helpmenu.index(END)
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
800 if helpmenu_length > self.base_helpmenu_length:
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
801 helpmenu.delete((self.base_helpmenu_length + 1), helpmenu_length)
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
802 # then rebuild them
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
803 if help_list:
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
804 helpmenu.add_separator()
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
805 for entry in help_list:
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
806 cmd = self.__extra_help_callback(entry[1])
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
807 helpmenu.add_command(label=entry[0], command=cmd)
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
808 # and update the menu dictionary
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
809 self.menudict['help'] = helpmenu
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
810
27245
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
811 def __extra_help_callback(self, helpfile):
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
812 "Create a callback with the helpfile value frozen at definition time"
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
813 def display_extra_help(helpfile=helpfile):
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
814 if not helpfile.startswith(('www', 'http')):
67241
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
815 helpfile = os.path.normpath(helpfile)
32681
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
816 if sys.platform[:3] == 'win':
67241
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
817 try:
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
818 os.startfile(helpfile)
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
819 except WindowsError as why:
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
820 tkMessageBox.showerror(title='Document Start Failure',
eca25f1deae7 Issue 6285: catch missing IDLE help file.
Terry Reedy <tjreedy@udel.edu>
parents: 67022
diff changeset
821 message=str(why), parent=self.text)
32681
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
822 else:
104a7fc06bdf Checking sys.platform for substring 'win' was breaking IDLE docs on Mac
Kurt B. Kaiser <kbk@shore.net>
parents: 32272
diff changeset
823 webbrowser.open(helpfile)
27245
d3ab532b3b6d M Bindings.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27208
diff changeset
824 return display_extra_help
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
825
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
826 def update_recent_files_list(self, new_file=None):
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
827 "Load and update the recent files list and menus"
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
828 rf_list = []
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
829 if os.path.exists(self.recent_files_path):
67752
eb4ba03d7c4d Merged revisions 88174 via svnmerge from
Ned Deily <nad@acm.org>
parents: 67241
diff changeset
830 rf_list_file = open(self.recent_files_path,'r',
eb4ba03d7c4d Merged revisions 88174 via svnmerge from
Ned Deily <nad@acm.org>
parents: 67241
diff changeset
831 encoding='utf_8', errors='replace')
22602
f3a913e64eb8 further work on new config system;
Steven M. Gava <elguavas@python.net>
parents: 22600
diff changeset
832 try:
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
833 rf_list = rf_list_file.readlines()
22602
f3a913e64eb8 further work on new config system;
Steven M. Gava <elguavas@python.net>
parents: 22600
diff changeset
834 finally:
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
835 rf_list_file.close()
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
836 if new_file:
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
837 new_file = os.path.abspath(new_file) + '\n'
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
838 if new_file in rf_list:
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
839 rf_list.remove(new_file) # move to top
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
840 rf_list.insert(0, new_file)
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
841 # clean and save the recent files list
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
842 bad_paths = []
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
843 for path in rf_list:
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
844 if '\0' in path or not os.path.exists(path[0:-1]):
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
845 bad_paths.append(path)
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
846 rf_list = [path for path in rf_list if path not in bad_paths]
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
847 ulchars = "1234567890ABCDEFGHIJK"
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
848 rf_list = rf_list[0:len(ulchars)]
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
849 try:
73968
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
850 with open(self.recent_files_path, 'w',
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
851 encoding='utf_8', errors='replace') as rf_file:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
852 rf_file.writelines(rf_list)
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
853 except IOError as err:
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
854 if not getattr(self.root, "recentfilelist_error_displayed", False):
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
855 self.root.recentfilelist_error_displayed = True
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
856 tkMessageBox.showerror(title='IDLE Error',
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
857 message='Unable to update Recent Files list:\n%s'
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
858 % str(err),
26e3e542d20d Issue #4625: If IDLE cannot write to its recent file or breakpoint
Ned Deily <nad@acm.org>
parents: 69311
diff changeset
859 parent=self.text)
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
860 # for each edit window instance, construct the recent files menu
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 42722
diff changeset
861 for instance in self.top.instance_dict:
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
862 menu = instance.recent_files_menu
77234
64a7fae544a6 Issue #10997: Prevent a duplicate entry in IDLE's "Recent Files" menu.
Ned Deily <nad@acm.org>
parents: 74800
diff changeset
863 menu.delete(0, END) # clear, and rebuild:
55642
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 54816
diff changeset
864 for i, file_name in enumerate(rf_list):
e4a83e91521a Merged revisions 74446-74449 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents: 54816
diff changeset
865 file_name = file_name.rstrip() # zap \n
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
866 # make unicode string to display non-ASCII chars correctly
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
867 ufile_name = self._filename_to_unicode(file_name)
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
868 callback = instance.__recent_file_callback(file_name)
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
869 menu.add_command(label=ulchars[i] + " " + ufile_name,
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
870 command=callback,
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
871 underline=0)
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
872
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
873 def __recent_file_callback(self, file_name):
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
874 def open_recent_file(fn_closure=file_name):
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
875 self.io.open(editFile=fn_closure)
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
876 return open_recent_file
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
877
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
878 def saved_change_hook(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
879 short = self.short_title()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
880 long = self.long_title()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
881 if short and long:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
882 title = short + " - " + long
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
883 elif short:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
884 title = short
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
885 elif long:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
886 title = long
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
887 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
888 title = "Untitled"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
889 icon = short or long or title
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
890 if not self.get_saved():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
891 title = "*%s*" % title
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
892 icon = "*%s" % icon
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
893 self.top.wm_title(title)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
894 self.top.wm_iconname(icon)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
895
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
896 def get_saved(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
897 return self.undo.get_saved()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
898
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
899 def set_saved(self, flag):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
900 self.undo.set_saved(flag)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
901
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
902 def reset_undo(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
903 self.undo.reset_undo()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
904
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
905 def short_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
906 filename = self.io.filename
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
907 if filename:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
908 filename = os.path.basename(filename)
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
909 # return unicode string to display non-ASCII chars correctly
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
910 return self._filename_to_unicode(filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
911
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
912 def long_title(self):
35958
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
913 # return unicode string to display non-ASCII chars correctly
1d8effde82f1 Patch #1162825: Support non-ASCII characters in IDLE window titles.
Martin v. Löwis <martin@v.loewis.de>
parents: 35903
diff changeset
914 return self._filename_to_unicode(self.io.filename or "")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
915
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
916 def center_insert_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
917 self.center()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
918
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
919 def center(self, mark="insert"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
920 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
921 top, bot = self.getwindowlines()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
922 lineno = self.getlineno(mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
923 height = bot - top
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
924 newtop = max(1, lineno - height//2)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
925 text.yview(float(newtop))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
926
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
927 def getwindowlines(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
928 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
929 top = self.getlineno("@0,0")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
930 bot = self.getlineno("@0,65535")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
931 if top == bot and text.winfo_height() == 1:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
932 # Geometry manager hasn't run yet
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
933 height = int(text['height'])
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
934 bot = top + height - 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
935 return top, bot
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
936
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
937 def getlineno(self, mark="insert"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
938 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
939 return int(float(text.index(mark)))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
940
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
941 def get_geometry(self):
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
942 "Return (width, height, x, y)"
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
943 geom = self.top.wm_geometry()
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
944 m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)
42507
df4cd9297098 Fix remaining map() issues.
Kurt B. Kaiser <kbk@shore.net>
parents: 42455
diff changeset
945 return list(map(int, m.groups()))
27074
b865925ef68a M AutoExpand.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
946
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
947 def close_event(self, event):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
948 self.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
949
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
950 def maybesave(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
951 if self.io:
22051
e31ad4dd30d9 bugfix for the problem where EditorWindow instances
Steven M. Gava <elguavas@python.net>
parents: 21976
diff changeset
952 if not self.get_saved():
26959
b8c72e86a12d Whitespace Normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 26828
diff changeset
953 if self.top.state()!='normal':
22051
e31ad4dd30d9 bugfix for the problem where EditorWindow instances
Steven M. Gava <elguavas@python.net>
parents: 21976
diff changeset
954 self.top.deiconify()
e31ad4dd30d9 bugfix for the problem where EditorWindow instances
Steven M. Gava <elguavas@python.net>
parents: 21976
diff changeset
955 self.top.lower()
e31ad4dd30d9 bugfix for the problem where EditorWindow instances
Steven M. Gava <elguavas@python.net>
parents: 21976
diff changeset
956 self.top.lift()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
957 return self.io.maybesave()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
958
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
959 def close(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
960 reply = self.maybesave()
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
961 if str(reply) != "cancel":
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
962 self._close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
963 return reply
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
964
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
965 def _close(self):
22602
f3a913e64eb8 further work on new config system;
Steven M. Gava <elguavas@python.net>
parents: 22600
diff changeset
966 if self.io.filename:
31895
c56ea60cb3bf M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 31625
diff changeset
967 self.update_recent_files_list(new_file=self.io.filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
968 WindowList.unregister_callback(self.postwindowsmenu)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
969 self.unload_extensions()
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
970 self.io.close()
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
971 self.io = None
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
972 self.undo = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
973 if self.color:
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
974 self.color.close(False)
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
975 self.color = None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
976 self.text = None
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
977 self.tkinter_vars = None
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
978 self.per.close()
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
979 self.per = None
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
980 self.top.destroy()
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
981 if self.close_hook:
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
982 # unless override: unregister from flist, terminate if last window
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
983 self.close_hook()
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
984
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
985 def load_extensions(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
986 self.extensions = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
987 self.load_standard_extensions()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
988
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
989 def unload_extensions(self):
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 42722
diff changeset
990 for ins in list(self.extensions.values()):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
991 if hasattr(ins, "close"):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
992 ins.close()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
993 self.extensions = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
994
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
995 def load_standard_extensions(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
996 for name in self.get_standard_extension_names():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
997 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
998 self.load_extension(name)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
999 except:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40643
diff changeset
1000 print("Failed to load extension", repr(name))
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1001 traceback.print_exc()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1002
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1003 def get_standard_extension_names(self):
32272
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31946
diff changeset
1004 return idleConf.GetExtensions(editor_only=True)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1005
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1006 def load_extension(self, name):
34439
775a72b9d52c If an extension can't be loaded, print warning and skip it instead of
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1007 try:
775a72b9d52c If an extension can't be loaded, print warning and skip it instead of
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1008 mod = __import__(name, globals(), locals(), [])
775a72b9d52c If an extension can't be loaded, print warning and skip it instead of
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
1009 except ImportError:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40643
diff changeset
1010 print("\nFailed to import extension: ", name)
42324
4bbbe0c55fa2 Merged revisions 56443-56466 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
1011 raise
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1012 cls = getattr(mod, name)
32272
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31946
diff changeset
1013 keydefs = idleConf.GetExtensionBindings(name)
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31946
diff changeset
1014 if hasattr(cls, "menudefs"):
014b0d84422f Noam Raphel: Further developemt of CodeContext feature.
Kurt B. Kaiser <kbk@shore.net>
parents: 31946
diff changeset
1015 self.fill_menus(cls.menudefs, keydefs)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1016 ins = cls(self)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1017 self.extensions[name] = ins
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1018 if keydefs:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1019 self.apply_bindings(keydefs)
42725
fa9a40ef0780 Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents: 42722
diff changeset
1020 for vevent in keydefs:
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
1021 methodname = vevent.replace("-", "_")
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1022 while methodname[:1] == '<':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1023 methodname = methodname[1:]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1024 while methodname[-1:] == '>':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1025 methodname = methodname[:-1]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1026 methodname = methodname + "_event"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1027 if hasattr(ins, methodname):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1028 self.text.bind(vevent, getattr(ins, methodname))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1029
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1030 def apply_bindings(self, keydefs=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1031 if keydefs is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1032 keydefs = self.Bindings.default_keydefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1033 text = self.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1034 text.keydefs = keydefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1035 for event, keylist in keydefs.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1036 if keylist:
29794
94e5d1b8f696 SF patch #768187: replace apply(f, args, kwds) with f(*args, **kwds)
Raymond Hettinger <python@rcn.com>
parents: 29421
diff changeset
1037 text.event_add(event, *keylist)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1038
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1039 def fill_menus(self, menudefs=None, keydefs=None):
23969
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
1040 """Add appropriate entries to the menus and submenus
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
1041
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
1042 Menus that are absent or None in self.menudict are ignored.
edd7c0146ac8 Clear associated breakpoints when closing an edit window.
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
1043 """
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1044 if menudefs is None:
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1045 menudefs = self.Bindings.menudefs
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1046 if keydefs is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1047 keydefs = self.Bindings.default_keydefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1048 menudict = self.menudict
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1049 text = self.text
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1050 for mname, entrylist in menudefs:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1051 menu = menudict.get(mname)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1052 if not menu:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1053 continue
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1054 for entry in entrylist:
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1055 if not entry:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1056 menu.add_separator()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1057 else:
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1058 label, eventname = entry
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1059 checkbutton = (label[:1] == '!')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1060 if checkbutton:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1061 label = label[1:]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1062 underline, label = prepstr(label)
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1063 accelerator = get_accelerator(keydefs, eventname)
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1064 def command(text=text, eventname=eventname):
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1065 text.event_generate(eventname)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1066 if checkbutton:
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1067 var = self.get_var_obj(eventname, BooleanVar)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1068 menu.add_checkbutton(label=label, underline=underline,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1069 command=command, accelerator=accelerator,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1070 variable=var)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1071 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1072 menu.add_command(label=label, underline=underline,
25456
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
1073 command=command,
41eb24b747c0 Fix Bug 612886 copy/paste menu items fail
Kurt B. Kaiser <kbk@shore.net>
parents: 25286
diff changeset
1074 accelerator=accelerator)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1075
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1076 def getvar(self, name):
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1077 var = self.get_var_obj(name)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1078 if var:
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1079 value = var.get()
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1080 return value
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1081 else:
42722
3284307a7351 Fix raise with 2to3
Kurt B. Kaiser <kbk@shore.net>
parents: 42714
diff changeset
1082 raise NameError(name)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1083
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1084 def setvar(self, name, value, vartype=None):
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1085 var = self.get_var_obj(name, vartype)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1086 if var:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1087 var.set(value)
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1088 else:
42722
3284307a7351 Fix raise with 2to3
Kurt B. Kaiser <kbk@shore.net>
parents: 42714
diff changeset
1089 raise NameError(name)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1090
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1091 def get_var_obj(self, name, vartype=None):
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1092 var = self.tkinter_vars.get(name)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1093 if not var and vartype:
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1094 # create a Tkinter variable object with self.text as master:
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1095 self.tkinter_vars[name] = var = vartype(self.text)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1096 return var
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1097
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1098 # Tk implementations of "virtual text methods" -- each platform
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1099 # reusing IDLE's support code needs to define these for its GUI's
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1100 # flavor of widget.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1101
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1102 # Is character at text_index in a Python string? Return 0 for
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1103 # "guaranteed no", true for anything else. This info is expensive
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1104 # to compute ab initio, but is probably already known by the
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1105 # platform's colorizer.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1106
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1107 def is_char_in_string(self, text_index):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1108 if self.color:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1109 # Return true iff colorizer hasn't (re)gotten this far
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1110 # yet, or the character is tagged as being in a string
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1111 return self.text.tag_prevrange("TODO", text_index) or \
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1112 "STRING" in self.text.tag_names(text_index)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1113 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1114 # The colorizer is missing: assume the worst
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1115 return 1
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1116
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1117 # If a selection is defined in the text widget, return (start,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1118 # end) as Tkinter text indices, otherwise return (None, None)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1119 def get_selection_indices(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1120 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1121 first = self.text.index("sel.first")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1122 last = self.text.index("sel.last")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1123 return first, last
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1124 except TclError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1125 return None, None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1126
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1127 # Return the text widget's current view of what a tab stop means
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1128 # (equivalent width in spaces).
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1129
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1130 def get_tk_tabwidth(self):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1131 current = self.text['tabs'] or TK_TABWIDTH_DEFAULT
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1132 return int(current)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1133
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1134 # Set the text widget's current view of what a tab stop means.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1135
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1136 def set_tk_tabwidth(self, newtabwidth):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1137 text = self.text
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1138 if self.get_tk_tabwidth() != newtabwidth:
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1139 # Set text widget tab width
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1140 pixels = text.tk.call("font", "measure", text["font"],
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1141 "-displayof", text.master,
18537
3fcf98ca6c4a py-cvs-rel2_1 (Rev 1.33 - 1.37) merge
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
1142 "n" * newtabwidth)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1143 text.configure(tabs=pixels)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1144
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
1145 ### begin autoindent code ### (configuration was moved to beginning of class)
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 42324
diff changeset
1146
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1147 def set_indentation_params(self, is_py_src, guess=True):
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1148 if is_py_src and guess:
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1149 i = self.guess_indent()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1150 if 2 <= i <= 8:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1151 self.indentwidth = i
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1152 if self.indentwidth != self.tabwidth:
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1153 self.usetabs = False
43257
a4bd8a4805a8 1. Fail gracefully if the file fails to decode when loaded.
Kurt B. Kaiser <kbk@shore.net>
parents: 43164
diff changeset
1154 self.set_tk_tabwidth(self.tabwidth)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1155
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1156 def smart_backspace_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1157 text = self.text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1158 first, last = self.get_selection_indices()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1159 if first and last:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1160 text.delete(first, last)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1161 text.mark_set("insert", first)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1162 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1163 # Delete whitespace left, until hitting a real char or closest
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1164 # preceding virtual tab stop.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1165 chars = text.get("insert linestart", "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1166 if chars == '':
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1167 if text.compare("insert", ">", "1.0"):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1168 # easy: delete preceding newline
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1169 text.delete("insert-1c")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1170 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1171 text.bell() # at start of buffer
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1172 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1173 if chars[-1] not in " \t":
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1174 # easy: delete preceding real char
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1175 text.delete("insert-1c")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1176 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1177 # Ick. It may require *inserting* spaces if we back up over a
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1178 # tab character! This is written to be clear, not fast.
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1179 tabwidth = self.tabwidth
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1180 have = len(chars.expandtabs(tabwidth))
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1181 assert have > 0
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1182 want = ((have - 1) // self.indentwidth) * self.indentwidth
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1183 # Debug prompt is multilined....
74419
c6e7473b1fb5 #13039 allow proper deletion of '>>> ' in IDLE editor windows.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1184 if self.context_use_ps1:
c6e7473b1fb5 #13039 allow proper deletion of '>>> ' in IDLE editor windows.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1185 last_line_of_prompt = sys.ps1.split('\n')[-1]
c6e7473b1fb5 #13039 allow proper deletion of '>>> ' in IDLE editor windows.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1186 else:
c6e7473b1fb5 #13039 allow proper deletion of '>>> ' in IDLE editor windows.
Terry Jan Reedy <tjreedy@udel.edu>
parents: 73968
diff changeset
1187 last_line_of_prompt = ''
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1188 ncharsdeleted = 0
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1189 while 1:
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1190 if chars == last_line_of_prompt:
26678
78d872cd064c In Shell:
Kurt B. Kaiser <kbk@shore.net>
parents: 26667
diff changeset
1191 break
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1192 chars = chars[:-1]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1193 ncharsdeleted = ncharsdeleted + 1
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1194 have = len(chars.expandtabs(tabwidth))
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1195 if have <= want or chars[-1] not in " \t":
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1196 break
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1197 text.undo_block_start()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1198 text.delete("insert-%dc" % ncharsdeleted, "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1199 if have < want:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1200 text.insert("insert", ' ' * (want - have))
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1201 text.undo_block_stop()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1202 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1203
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1204 def smart_indent_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1205 # if intraline selection:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1206 # delete it
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1207 # elif multiline selection:
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1208 # do indent-region
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1209 # else:
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1210 # indent one level
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1211 text = self.text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1212 first, last = self.get_selection_indices()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1213 text.undo_block_start()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1214 try:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1215 if first and last:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1216 if index2line(first) != index2line(last):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1217 return self.indent_region_event(event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1218 text.delete(first, last)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1219 text.mark_set("insert", first)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1220 prefix = text.get("insert linestart", "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1221 raw, effective = classifyws(prefix, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1222 if raw == len(prefix):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1223 # only whitespace to the left
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1224 self.reindent_to(effective + self.indentwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1225 else:
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1226 # tab to the next 'stop' within or to right of line's text:
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1227 if self.usetabs:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1228 pad = '\t'
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1229 else:
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1230 effective = len(prefix.expandtabs(self.tabwidth))
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1231 n = self.indentwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1232 pad = ' ' * (n - effective % n)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1233 text.insert("insert", pad)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1234 text.see("insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1235 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1236 finally:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1237 text.undo_block_stop()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1238
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1239 def newline_and_indent_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1240 text = self.text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1241 first, last = self.get_selection_indices()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1242 text.undo_block_start()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1243 try:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1244 if first and last:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1245 text.delete(first, last)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1246 text.mark_set("insert", first)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1247 line = text.get("insert linestart", "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1248 i, n = 0, len(line)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1249 while i < n and line[i] in " \t":
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1250 i = i+1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1251 if i == n:
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1252 # the cursor is in or at leading indentation in a continuation
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1253 # line; just inject an empty line at the start
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1254 text.insert("insert linestart", '\n')
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1255 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1256 indent = line[:i]
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1257 # strip whitespace before insert point unless it's in the prompt
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1258 i = 0
26827
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1259 last_line_of_prompt = sys.ps1.split('\n')[-1]
13d59dbfb8d4 M EditorWindow.py
Kurt B. Kaiser <kbk@shore.net>
parents: 26734
diff changeset
1260 while line and line[-1] in " \t" and line != last_line_of_prompt:
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1261 line = line[:-1]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1262 i = i+1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1263 if i:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1264 text.delete("insert - %d chars" % i, "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1265 # strip whitespace after insert point
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1266 while text.get("insert") in " \t":
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1267 text.delete("insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1268 # start new line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1269 text.insert("insert", '\n')
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1270
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1271 # adjust indentation for continuations and block
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1272 # open/close first need to find the last stmt
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1273 lno = index2line(text.index('insert'))
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1274 y = PyParse.Parser(self.indentwidth, self.tabwidth)
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1275 if not self.context_use_ps1:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1276 for context in self.num_context_lines:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1277 startat = max(lno - context, 1)
39669
e076cca4d9d7 Remove usage of backticks.
Brett Cannon <bcannon@gmail.com>
parents: 39634
diff changeset
1278 startatindex = repr(startat) + ".0"
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1279 rawtext = text.get(startatindex, "insert")
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1280 y.set_str(rawtext)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1281 bod = y.find_good_parse_start(
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1282 self.context_use_ps1,
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1283 self._build_char_in_string_func(startatindex))
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1284 if bod is not None or startat == 1:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1285 break
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1286 y.set_lo(bod or 0)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1287 else:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1288 r = text.tag_prevrange("console", "insert")
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1289 if r:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1290 startatindex = r[1]
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1291 else:
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1292 startatindex = "1.0"
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1293 rawtext = text.get(startatindex, "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1294 y.set_str(rawtext)
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1295 y.set_lo(0)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 35876
diff changeset
1296
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1297 c = y.get_continuation_type()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1298 if c != PyParse.C_NONE:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1299 # The current stmt hasn't ended yet.
35876
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1300 if c == PyParse.C_STRING_FIRST_LINE:
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1301 # after the first line of a string; do not indent at all
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1302 pass
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1303 elif c == PyParse.C_STRING_NEXT_LINES:
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1304 # inside a string which started before this line;
f334efe76f6a Better indentation after first line of string continuation.
Kurt B. Kaiser <kbk@shore.net>
parents: 35065
diff changeset
1305 # just mimic the current indent
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1306 text.insert("insert", indent)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1307 elif c == PyParse.C_BRACKET:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1308 # line up with the first (if any) element of the
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1309 # last open bracket structure; else indent one
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1310 # level beyond the indent of the line with the
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1311 # last open bracket
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1312 self.reindent_to(y.compute_bracket_indent())
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1313 elif c == PyParse.C_BACKSLASH:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1314 # if more than one line in this stmt already, just
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1315 # mimic the current indent; else if initial line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1316 # has a start on an assignment stmt, indent to
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1317 # beyond leftmost =; else to beyond first chunk of
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1318 # non-whitespace on initial line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1319 if y.get_num_lines_in_stmt() > 1:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1320 text.insert("insert", indent)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1321 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1322 self.reindent_to(y.compute_backslash_indent())
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1323 else:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 30527
diff changeset
1324 assert 0, "bogus continuation type %r" % (c,)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1325 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1326
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1327 # This line starts a brand new stmt; indent relative to
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1328 # indentation of initial line of closest preceding
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1329 # interesting stmt.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1330 indent = y.get_base_indent_string()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1331 text.insert("insert", indent)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1332 if y.is_block_opener():
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1333 self.smart_indent_event(event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1334 elif indent and y.is_block_closer():
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1335 self.smart_backspace_event(event)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1336 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1337 finally:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1338 text.see("insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1339 text.undo_block_stop()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1340
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1341 # Our editwin provides a is_char_in_string function that works
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1342 # with a Tk text index, but PyParse only knows about offsets into
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1343 # a string. This builds a function for PyParse that accepts an
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1344 # offset.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1345
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1346 def _build_char_in_string_func(self, startindex):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1347 def inner(offset, _startindex=startindex,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1348 _icis=self.is_char_in_string):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1349 return _icis(_startindex + "+%dc" % offset)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1350 return inner
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1351
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1352 def indent_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1353 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1354 for pos in range(len(lines)):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1355 line = lines[pos]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1356 if line:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1357 raw, effective = classifyws(line, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1358 effective = effective + self.indentwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1359 lines[pos] = self._make_blanks(effective) + line[raw:]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1360 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1361 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1362
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1363 def dedent_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1364 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1365 for pos in range(len(lines)):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1366 line = lines[pos]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1367 if line:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1368 raw, effective = classifyws(line, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1369 effective = max(effective - self.indentwidth, 0)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1370 lines[pos] = self._make_blanks(effective) + line[raw:]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1371 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1372 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1373
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1374 def comment_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1375 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1376 for pos in range(len(lines) - 1):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1377 line = lines[pos]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1378 lines[pos] = '##' + line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1379 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1380
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1381 def uncomment_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1382 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1383 for pos in range(len(lines)):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1384 line = lines[pos]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1385 if not line:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1386 continue
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1387 if line[:2] == '##':
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1388 line = line[2:]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1389 elif line[:1] == '#':
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1390 line = line[1:]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1391 lines[pos] = line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1392 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1393
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1394 def tabify_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1395 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1396 tabwidth = self._asktabwidth()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1397 for pos in range(len(lines)):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1398 line = lines[pos]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1399 if line:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1400 raw, effective = classifyws(line, tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1401 ntabs, nspaces = divmod(effective, tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1402 lines[pos] = '\t' * ntabs + ' ' * nspaces + line[raw:]
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1403 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1404
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1405 def untabify_region_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1406 head, tail, chars, lines = self.get_region()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1407 tabwidth = self._asktabwidth()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1408 for pos in range(len(lines)):
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1409 lines[pos] = lines[pos].expandtabs(tabwidth)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1410 self.set_region(head, tail, chars, lines)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1411
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1412 def toggle_tabs_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1413 if self.askyesno(
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1414 "Toggle tabs",
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1415 "Turn tabs " + ("on", "off")[self.usetabs] +
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1416 "?\nIndent width " +
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
1417 ("will be", "remains at")[self.usetabs] + " 8." +
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
1418 "\n Note: a tab is always 8 columns",
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1419 parent=self.text):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1420 self.usetabs = not self.usetabs
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
1421 # Try to prevent inconsistent indentation.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
1422 # User must change indent width manually after using tabs.
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 35958
diff changeset
1423 self.indentwidth = 8
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1424 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1425
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1426 # XXX this isn't bound to anything -- see tabwidth comments
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1427 ## def change_tabwidth_event(self, event):
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1428 ## new = self._asktabwidth()
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1429 ## if new != self.tabwidth:
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1430 ## self.tabwidth = new
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1431 ## self.set_indentation_params(0, guess=0)
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1432 ## return "break"
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1433
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1434 def change_indentwidth_event(self, event):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1435 new = self.askinteger(
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1436 "Indent width",
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1437 "New indent width (2-16)\n(Always use 8 when using tabs)",
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1438 parent=self.text,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1439 initialvalue=self.indentwidth,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1440 minvalue=2,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1441 maxvalue=16)
34443
cd6b54ba272f 1. Polish tabbing code.
Kurt B. Kaiser <kbk@shore.net>
parents: 34439
diff changeset
1442 if new and new != self.indentwidth and not self.usetabs:
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1443 self.indentwidth = new
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1444 return "break"
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1445
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1446 def get_region(self):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1447 text = self.text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1448 first, last = self.get_selection_indices()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1449 if first and last:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1450 head = text.index(first + " linestart")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1451 tail = text.index(last + "-1c lineend +1c")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1452 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1453 head = text.index("insert linestart")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1454 tail = text.index("insert lineend +1c")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1455 chars = text.get(head, tail)
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1456 lines = chars.split("\n")
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1457 return head, tail, chars, lines
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1458
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1459 def set_region(self, head, tail, chars, lines):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1460 text = self.text
25279
4692c487ee91 Merge Py Idle's changes to AutoIndent.py into EditorWindow.py since
Kurt B. Kaiser <kbk@shore.net>
parents: 25259
diff changeset
1461 newchars = "\n".join(lines)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1462 if newchars == chars:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1463 text.bell()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1464 return
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1465 text.tag_remove("sel", "1.0", "end")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1466 text.mark_set("insert", head)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1467 text.undo_block_start()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1468 text.delete(head, tail)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1469 text.insert(head, newchars)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1470 text.undo_block_stop()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1471 text.tag_add("sel", head, "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1472
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1473 # Make string that displays as n leading blanks.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1474
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1475 def _make_blanks(self, n):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1476 if self.usetabs:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1477 ntabs, nspaces = divmod(n, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1478 return '\t' * ntabs + ' ' * nspaces
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1479 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1480 return ' ' * n
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1481
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1482 # Delete from beginning of line to insert point, then reinsert
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1483 # column logical (meaning use tabs if appropriate) spaces.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1484
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1485 def reindent_to(self, column):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1486 text = self.text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1487 text.undo_block_start()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1488 if text.compare("insert linestart", "!=", "insert"):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1489 text.delete("insert linestart", "insert")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1490 if column:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1491 text.insert("insert", self._make_blanks(column))
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1492 text.undo_block_stop()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1493
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1494 def _asktabwidth(self):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1495 return self.askinteger(
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1496 "Tab width",
35065
aa1c5366607d 1. Clarify "tab/space" Error Dialog and "Tab Width" Dialog associated with
Kurt B. Kaiser <kbk@shore.net>
parents: 35064
diff changeset
1497 "Columns per tab? (2-16)",
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1498 parent=self.text,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1499 initialvalue=self.indentwidth,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1500 minvalue=2,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1501 maxvalue=16) or self.tabwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1502
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1503 # Guess indentwidth from text content.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1504 # Return guessed indentwidth. This should not be believed unless
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1505 # it's in a reasonable range (e.g., it will be 0 if no indented
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1506 # blocks are found).
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1507
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1508 def guess_indent(self):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1509 opener, indented = IndentSearcher(self.text, self.tabwidth).run()
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1510 if opener and indented:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1511 raw, indentsmall = classifyws(opener, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1512 raw, indentlarge = classifyws(indented, self.tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1513 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1514 indentsmall = indentlarge = 0
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1515 return indentlarge - indentsmall
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1516
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1517 # "line.col" -> line, as an int
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1518 def index2line(index):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1519 return int(float(index))
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1520
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1521 # Look at the leading whitespace in s.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1522 # Return pair (# of leading ws characters,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1523 # effective # of leading blanks after expanding
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1524 # tabs to width tabwidth)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1525
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1526 def classifyws(s, tabwidth):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1527 raw = effective = 0
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1528 for ch in s:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1529 if ch == ' ':
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1530 raw = raw + 1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1531 effective = effective + 1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1532 elif ch == '\t':
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1533 raw = raw + 1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1534 effective = (effective // tabwidth + 1) * tabwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1535 else:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1536 break
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1537 return raw, effective
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1538
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1539 import tokenize
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1540 _tokenize = tokenize
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1541 del tokenize
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1542
34212
1e8b033f91dc The remote procedure call module rpc.py can now access data attributes of
Kurt B. Kaiser <kbk@shore.net>
parents: 33218
diff changeset
1543 class IndentSearcher(object):
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1544
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1545 # .run() chews over the Text widget, looking for a block opener
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1546 # and the stmt following it. Returns a pair,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1547 # (line containing block opener, line containing stmt)
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1548 # Either or both may be None.
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1549
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1550 def __init__(self, text, tabwidth):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1551 self.text = text
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1552 self.tabwidth = tabwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1553 self.i = self.finished = 0
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1554 self.blkopenline = self.indentedline = None
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1555
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1556 def readline(self):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1557 if self.finished:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1558 return ""
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1559 i = self.i = self.i + 1
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 30527
diff changeset
1560 mark = repr(i) + ".0"
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1561 if self.text.compare(mark, ">=", "end"):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1562 return ""
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1563 return self.text.get(mark, mark + " lineend+1c")
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1564
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1565 def tokeneater(self, type, token, start, end, line,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1566 INDENT=_tokenize.INDENT,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1567 NAME=_tokenize.NAME,
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1568 OPENERS=('class', 'def', 'for', 'if', 'try', 'while')):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1569 if self.finished:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1570 pass
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1571 elif type == NAME and token in OPENERS:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1572 self.blkopenline = line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1573 elif type == INDENT and self.blkopenline:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1574 self.indentedline = line
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1575 self.finished = 1
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1576
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1577 def run(self):
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1578 save_tabsize = _tokenize.tabsize
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1579 _tokenize.tabsize = self.tabwidth
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1580 try:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1581 try:
45888
51e24512e305 - Issue #719888: Updated tokenize to use a bytes API. generate_tokens has been
Trent Nelson <trent.nelson@snakebite.org>
parents: 45371
diff changeset
1582 tokens = _tokenize.generate_tokens(self.readline)
51e24512e305 - Issue #719888: Updated tokenize to use a bytes API. generate_tokens has been
Trent Nelson <trent.nelson@snakebite.org>
parents: 45371
diff changeset
1583 for token in tokens:
51e24512e305 - Issue #719888: Updated tokenize to use a bytes API. generate_tokens has been
Trent Nelson <trent.nelson@snakebite.org>
parents: 45371
diff changeset
1584 self.tokeneater(*token)
25258
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1585 except _tokenize.TokenError:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1586 # since we cut off the tokenizer early, we can trigger
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1587 # spurious errors
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1588 pass
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1589 finally:
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1590 _tokenize.tabsize = save_tabsize
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1591 return self.blkopenline, self.indentedline
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1592
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1593 ### end autoindent code ###
0ec4753ccb0f MERGE DS_RPC_BRANCH into MAIN
Kurt B. Kaiser <kbk@shore.net>
parents: 24183
diff changeset
1594
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1595 def prepstr(s):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1596 # Helper to extract the underscore from a string, e.g.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1597 # prepstr("Co_py") returns (2, "Copy").
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
1598 i = s.find('_')
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1599 if i >= 0:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1600 s = s[:i] + s[i+1:]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1601 return i, s
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1602
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1603
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1604 keynames = {
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1605 'bracketleft': '[',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1606 'bracketright': ']',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1607 'slash': '/',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1608 }
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1609
31946
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1610 def get_accelerator(keydefs, eventname):
5465a2cb0aea 1. Polish variables in EditorWindow extension loading and Tkinter variable code.
Kurt B. Kaiser <kbk@shore.net>
parents: 31895
diff changeset
1611 keylist = keydefs.get(eventname)
67796
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1612 # issue10940: temporary workaround to prevent hang with OS X Cocoa Tk 8.5
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1613 # if not keylist:
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1614 if (not keylist) or (macosxSupport.runningAsOSXApp() and eventname in {
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1615 "<<open-module>>",
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1616 "<<goto-line>>",
5c51724bf411 Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
Ned Deily <nad@acm.org>
parents: 67749
diff changeset
1617 "<<change-indentwidth>>"}):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1618 return ""
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1619 s = keylist[0]
25286
b64fc6a1049e Merge Py Idle changes:
Kurt B. Kaiser <kbk@shore.net>
parents: 25279
diff changeset
1620 s = re.sub(r"-[a-z]\b", lambda m: m.group().upper(), s)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1621 s = re.sub(r"\b\w+\b", lambda m: keynames.get(m.group(), m.group()), s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1622 s = re.sub("Key-", "", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1623 s = re.sub("Cancel","Ctrl-Break",s) # dscherer@cmu.edu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1624 s = re.sub("Control-", "Ctrl-", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1625 s = re.sub("-", "+", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1626 s = re.sub("><", " ", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1627 s = re.sub("<", "", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1628 s = re.sub(">", "", s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1629 return s
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1630
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1631
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1632 def fixwordbreaks(root):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1633 # Make sure that Tk's double-click and next/previous word
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1634 # operations use our definition of a word (i.e. an identifier)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1635 tk = root.tk
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1636 tk.call('tcl_wordBreakAfter', 'a b', 0) # make sure word.tcl is loaded
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1637 tk.call('set', 'tcl_wordchars', '[a-zA-Z0-9_]')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1638 tk.call('set', 'tcl_nonwordchars', '[^a-zA-Z0-9_]')
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1639
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1640
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1641 def test():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1642 root = Tk()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1643 fixwordbreaks(root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1644 root.withdraw()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1645 if sys.argv[1:]:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1646 filename = sys.argv[1]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1647 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1648 filename = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1649 edit = EditorWindow(root=root, filename=filename)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1650 edit.set_close_hook(root.quit)
43734
3e5edf19d5f0 Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43257
diff changeset
1651 edit.text.bind("<<close-all-windows>>", edit.close_event)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1652 root.mainloop()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1653 root.destroy()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1654
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1655 if __name__ == '__main__':
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1656 test()