golden hour
/usr/lib64/python2.7/idlelib
⬆️ Go Up
Upload
File/Folder
Size
Actions
AutoComplete.py
8.79 KB
Del
OK
AutoComplete.pyc
7.69 KB
Del
OK
AutoComplete.pyo
7.69 KB
Del
OK
AutoCompleteWindow.py
16.8 KB
Del
OK
AutoCompleteWindow.pyc
12.15 KB
Del
OK
AutoCompleteWindow.pyo
12.09 KB
Del
OK
AutoExpand.py
2.42 KB
Del
OK
AutoExpand.pyc
2.5 KB
Del
OK
AutoExpand.pyo
2.5 KB
Del
OK
Bindings.py
3.22 KB
Del
OK
Bindings.pyc
4.76 KB
Del
OK
Bindings.pyo
4.76 KB
Del
OK
CREDITS.txt
1.82 KB
Del
OK
CallTipWindow.py
5.98 KB
Del
OK
CallTipWindow.pyc
6.14 KB
Del
OK
CallTipWindow.pyo
6.14 KB
Del
OK
CallTips.py
7.75 KB
Del
OK
CallTips.pyc
10.14 KB
Del
OK
CallTips.pyo
10.14 KB
Del
OK
ChangeLog
55.07 KB
Del
OK
ClassBrowser.py
6.22 KB
Del
OK
ClassBrowser.pyc
8.95 KB
Del
OK
ClassBrowser.pyo
8.95 KB
Del
OK
CodeContext.py
8.15 KB
Del
OK
CodeContext.pyc
6.52 KB
Del
OK
CodeContext.pyo
6.47 KB
Del
OK
ColorDelegator.py
10.13 KB
Del
OK
ColorDelegator.pyc
8.71 KB
Del
OK
ColorDelegator.pyo
8.71 KB
Del
OK
Debugger.py
15.45 KB
Del
OK
Debugger.pyc
16.55 KB
Del
OK
Debugger.pyo
16.55 KB
Del
OK
Delegator.py
831 B
Del
OK
Delegator.pyc
1.58 KB
Del
OK
Delegator.pyo
1.58 KB
Del
OK
EditorWindow.py
63.29 KB
Del
OK
EditorWindow.pyc
55.13 KB
Del
OK
EditorWindow.pyo
55.03 KB
Del
OK
FileList.py
3.57 KB
Del
OK
FileList.pyc
3.86 KB
Del
OK
FileList.pyo
3.82 KB
Del
OK
FormatParagraph.py
5.66 KB
Del
OK
FormatParagraph.pyc
4.69 KB
Del
OK
FormatParagraph.pyo
4.69 KB
Del
OK
GrepDialog.py
3.96 KB
Del
OK
GrepDialog.pyc
4.9 KB
Del
OK
GrepDialog.pyo
4.9 KB
Del
OK
HISTORY.txt
10.08 KB
Del
OK
HyperParser.py
10.31 KB
Del
OK
HyperParser.pyc
6.49 KB
Del
OK
HyperParser.pyo
6.49 KB
Del
OK
IOBinding.py
20.69 KB
Del
OK
IOBinding.pyc
17.16 KB
Del
OK
IOBinding.pyo
17.16 KB
Del
OK
Icons
-
Del
OK
IdleHistory.py
3.07 KB
Del
OK
IdleHistory.pyc
3.13 KB
Del
OK
IdleHistory.pyo
3.13 KB
Del
OK
MultiCall.py
17.07 KB
Del
OK
MultiCall.pyc
15.55 KB
Del
OK
MultiCall.pyo
15.48 KB
Del
OK
MultiStatusBar.py
783 B
Del
OK
MultiStatusBar.pyc
1.49 KB
Del
OK
MultiStatusBar.pyo
1.49 KB
Del
OK
NEWS.txt
28.32 KB
Del
OK
ObjectBrowser.py
4.05 KB
Del
OK
ObjectBrowser.pyc
6.56 KB
Del
OK
ObjectBrowser.pyo
6.56 KB
Del
OK
OutputWindow.py
4.47 KB
Del
OK
OutputWindow.pyc
5.11 KB
Del
OK
OutputWindow.pyo
5.11 KB
Del
OK
ParenMatch.py
6.47 KB
Del
OK
ParenMatch.pyc
6.82 KB
Del
OK
ParenMatch.pyo
6.82 KB
Del
OK
PathBrowser.py
2.58 KB
Del
OK
PathBrowser.pyc
4.02 KB
Del
OK
PathBrowser.pyo
4.02 KB
Del
OK
Percolator.py
2.55 KB
Del
OK
Percolator.pyc
3.55 KB
Del
OK
Percolator.pyo
3.37 KB
Del
OK
PyParse.py
19.05 KB
Del
OK
PyParse.pyc
9.77 KB
Del
OK
PyParse.pyo
9.34 KB
Del
OK
PyShell.py
54.81 KB
Del
OK
PyShell.pyc
49.14 KB
Del
OK
PyShell.pyo
49.04 KB
Del
OK
README.txt
2.56 KB
Del
OK
RemoteDebugger.py
11.38 KB
Del
OK
RemoteDebugger.pyc
15.97 KB
Del
OK
RemoteDebugger.pyo
15.82 KB
Del
OK
RemoteObjectBrowser.py
942 B
Del
OK
RemoteObjectBrowser.pyc
2.1 KB
Del
OK
RemoteObjectBrowser.pyo
2.1 KB
Del
OK
ReplaceDialog.py
5.69 KB
Del
OK
ReplaceDialog.pyc
6.32 KB
Del
OK
ReplaceDialog.pyo
6.32 KB
Del
OK
RstripExtension.py
824 B
Del
OK
RstripExtension.pyc
1.45 KB
Del
OK
RstripExtension.pyo
1.45 KB
Del
OK
ScriptBinding.py
8.22 KB
Del
OK
ScriptBinding.pyc
7.96 KB
Del
OK
ScriptBinding.pyo
7.96 KB
Del
OK
ScrolledList.py
3.9 KB
Del
OK
ScrolledList.pyc
6.03 KB
Del
OK
ScrolledList.pyo
6.03 KB
Del
OK
SearchDialog.py
1.99 KB
Del
OK
SearchDialog.pyc
2.93 KB
Del
OK
SearchDialog.pyo
2.93 KB
Del
OK
SearchDialogBase.py
4.28 KB
Del
OK
SearchDialogBase.pyc
5.37 KB
Del
OK
SearchDialogBase.pyo
5.37 KB
Del
OK
SearchEngine.py
6.57 KB
Del
OK
SearchEngine.pyc
7.02 KB
Del
OK
SearchEngine.pyo
7.02 KB
Del
OK
StackViewer.py
3.77 KB
Del
OK
StackViewer.pyc
5.79 KB
Del
OK
StackViewer.pyo
5.79 KB
Del
OK
TODO.txt
8.28 KB
Del
OK
ToolTip.py
2.67 KB
Del
OK
ToolTip.pyc
4.05 KB
Del
OK
ToolTip.pyo
4.05 KB
Del
OK
TreeWidget.py
14.87 KB
Del
OK
TreeWidget.pyc
17.48 KB
Del
OK
TreeWidget.pyo
17.48 KB
Del
OK
UndoDelegator.py
10.04 KB
Del
OK
UndoDelegator.pyc
12.27 KB
Del
OK
UndoDelegator.pyo
12.27 KB
Del
OK
WidgetRedirector.py
4.37 KB
Del
OK
WidgetRedirector.pyc
5.23 KB
Del
OK
WidgetRedirector.pyo
5.23 KB
Del
OK
WindowList.py
2.42 KB
Del
OK
WindowList.pyc
3.55 KB
Del
OK
WindowList.pyo
3.55 KB
Del
OK
ZoomHeight.py
1.28 KB
Del
OK
ZoomHeight.pyc
1.61 KB
Del
OK
ZoomHeight.pyo
1.61 KB
Del
OK
__init__.py
37 B
Del
OK
__init__.pyc
127 B
Del
OK
__init__.pyo
127 B
Del
OK
aboutDialog.py
6.42 KB
Del
OK
aboutDialog.pyc
6.63 KB
Del
OK
aboutDialog.pyo
6.63 KB
Del
OK
config-extensions.def
2.72 KB
Del
OK
config-highlight.def
1.7 KB
Del
OK
config-keys.def
7.35 KB
Del
OK
config-main.def
2.45 KB
Del
OK
configDialog.py
52.23 KB
Del
OK
configDialog.pyc
43.81 KB
Del
OK
configDialog.pyo
43.81 KB
Del
OK
configHandler.py
28.68 KB
Del
OK
configHandler.pyc
26.83 KB
Del
OK
configHandler.pyo
26.83 KB
Del
OK
configHelpSourceEdit.py
6.52 KB
Del
OK
configHelpSourceEdit.pyc
6.56 KB
Del
OK
configHelpSourceEdit.pyo
6.56 KB
Del
OK
configSectionNameDialog.py
3.63 KB
Del
OK
configSectionNameDialog.pyc
4.21 KB
Del
OK
configSectionNameDialog.pyo
4.21 KB
Del
OK
dynOptionMenuWidget.py
1.27 KB
Del
OK
dynOptionMenuWidget.pyc
1.66 KB
Del
OK
dynOptionMenuWidget.pyo
1.66 KB
Del
OK
extend.txt
3.56 KB
Del
OK
help.txt
11.72 KB
Del
OK
idle.py
400 B
Del
OK
idle.pyc
406 B
Del
OK
idle.pyo
406 B
Del
OK
idle.pyw
664 B
Del
OK
idlever.py
23 B
Del
OK
idlever.pyc
159 B
Del
OK
idlever.pyo
159 B
Del
OK
keybindingDialog.py
12.12 KB
Del
OK
keybindingDialog.pyc
12.05 KB
Del
OK
keybindingDialog.pyo
12.05 KB
Del
OK
macosxSupport.py
6.08 KB
Del
OK
macosxSupport.pyc
6.25 KB
Del
OK
macosxSupport.pyo
6.25 KB
Del
OK
rpc.py
19.75 KB
Del
OK
rpc.pyc
21.26 KB
Del
OK
rpc.pyo
21.16 KB
Del
OK
run.py
11.54 KB
Del
OK
run.pyc
12.14 KB
Del
OK
run.pyo
12.08 KB
Del
OK
tabbedpages.py
17.76 KB
Del
OK
tabbedpages.pyc
17.67 KB
Del
OK
tabbedpages.pyo
17.67 KB
Del
OK
textView.py
3.46 KB
Del
OK
textView.pyc
4.2 KB
Del
OK
textView.pyo
4.2 KB
Del
OK
Edit: AutoCompleteWindow.py
""" An auto-completion window for IDLE, used by the AutoComplete extension """ from Tkinter import * from idlelib.MultiCall import MC_SHIFT from idlelib.AutoComplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES HIDE_VIRTUAL_EVENT_NAME = "<<autocompletewindow-hide>>" HIDE_SEQUENCES = ("<FocusOut>", "<ButtonPress>") KEYPRESS_VIRTUAL_EVENT_NAME = "<<autocompletewindow-keypress>>" # We need to bind event beyond <Key> so that the function will be called # before the default specific IDLE function KEYPRESS_SEQUENCES = ("<Key>", "<Key-BackSpace>", "<Key-Return>", "<Key-Tab>", "<Key-Up>", "<Key-Down>", "<Key-Home>", "<Key-End>", "<Key-Prior>", "<Key-Next>") KEYRELEASE_VIRTUAL_EVENT_NAME = "<<autocompletewindow-keyrelease>>" KEYRELEASE_SEQUENCE = "<KeyRelease>" LISTUPDATE_SEQUENCE = "<B1-ButtonRelease>" WINCONFIG_SEQUENCE = "<Configure>" DOUBLECLICK_SEQUENCE = "<B1-Double-ButtonRelease>" class AutoCompleteWindow: def __init__(self, widget): # The widget (Text) on which we place the AutoCompleteWindow self.widget = widget # The widgets we create self.autocompletewindow = self.listbox = self.scrollbar = None # The default foreground and background of a selection. Saved because # they are changed to the regular colors of list items when the # completion start is not a prefix of the selected completion self.origselforeground = self.origselbackground = None # The list of completions self.completions = None # A list with more completions, or None self.morecompletions = None # The completion mode. Either AutoComplete.COMPLETE_ATTRIBUTES or # AutoComplete.COMPLETE_FILES self.mode = None # The current completion start, on the text box (a string) self.start = None # The index of the start of the completion self.startindex = None # The last typed start, used so that when the selection changes, # the new start will be as close as possible to the last typed one. self.lasttypedstart = None # Do we have an indication that the user wants the completion window # (for example, he clicked the list) self.userwantswindow = None # event ids self.hideid = self.keypressid = self.listupdateid = self.winconfigid \ = self.keyreleaseid = self.doubleclickid = None # Flag set if last keypress was a tab self.lastkey_was_tab = False def _change_start(self, newstart): min_len = min(len(self.start), len(newstart)) i = 0 while i < min_len and self.start[i] == newstart[i]: i += 1 if i < len(self.start): self.widget.delete("%s+%dc" % (self.startindex, i), "%s+%dc" % (self.startindex, len(self.start))) if i < len(newstart): self.widget.insert("%s+%dc" % (self.startindex, i), newstart[i:]) self.start = newstart def _binary_search(self, s): """Find the first index in self.completions where completions[i] is greater or equal to s, or the last index if there is no such one.""" i = 0; j = len(self.completions) while j > i: m = (i + j) // 2 if self.completions[m] >= s: j = m else: i = m + 1 return min(i, len(self.completions)-1) def _complete_string(self, s): """Assuming that s is the prefix of a string in self.completions, return the longest string which is a prefix of all the strings which s is a prefix of them. If s is not a prefix of a string, return s.""" first = self._binary_search(s) if self.completions[first][:len(s)] != s: # There is not even one completion which s is a prefix of. return s # Find the end of the range of completions where s is a prefix of. i = first + 1 j = len(self.completions) while j > i: m = (i + j) // 2 if self.completions[m][:len(s)] != s: j = m else: i = m + 1 last = i-1 if first == last: # only one possible completion return self.completions[first] # We should return the maximum prefix of first and last first_comp = self.completions[first] last_comp = self.completions[last] min_len = min(len(first_comp), len(last_comp)) i = len(s) while i < min_len and first_comp[i] == last_comp[i]: i += 1 return first_comp[:i] def _selection_changed(self): """Should be called when the selection of the Listbox has changed. Updates the Listbox display and calls _change_start.""" cursel = int(self.listbox.curselection()[0]) self.listbox.see(cursel) lts = self.lasttypedstart selstart = self.completions[cursel] if self._binary_search(lts) == cursel: newstart = lts else: min_len = min(len(lts), len(selstart)) i = 0 while i < min_len and lts[i] == selstart[i]: i += 1 newstart = selstart[:i] self._change_start(newstart) if self.completions[cursel][:len(self.start)] == self.start: # start is a prefix of the selected completion self.listbox.configure(selectbackground=self.origselbackground, selectforeground=self.origselforeground) else: self.listbox.configure(selectbackground=self.listbox.cget("bg"), selectforeground=self.listbox.cget("fg")) # If there are more completions, show them, and call me again. if self.morecompletions: self.completions = self.morecompletions self.morecompletions = None self.listbox.delete(0, END) for item in self.completions: self.listbox.insert(END, item) self.listbox.select_set(self._binary_search(self.start)) self._selection_changed() def show_window(self, comp_lists, index, complete, mode, userWantsWin): """Show the autocomplete list, bind events. If complete is True, complete the text, and if there is exactly one matching completion, don't open a list.""" # Handle the start we already have self.completions, self.morecompletions = comp_lists self.mode = mode self.startindex = self.widget.index(index) self.start = self.widget.get(self.startindex, "insert") if complete: completed = self._complete_string(self.start) self._change_start(completed) i = self._binary_search(completed) if self.completions[i] == completed and \ (i == len(self.completions)-1 or self.completions[i+1][:len(completed)] != completed): # There is exactly one matching completion return self.userwantswindow = userWantsWin self.lasttypedstart = self.start # Put widgets in place self.autocompletewindow = acw = Toplevel(self.widget) # Put it in a position so that it is not seen. acw.wm_geometry("+10000+10000") # Make it float acw.wm_overrideredirect(1) try: # This command is only needed and available on Tk >= 8.4.0 for OSX # Without it, call tips intrude on the typing process by grabbing # the focus. acw.tk.call("::tk::unsupported::MacWindowStyle", "style", acw._w, "help", "noActivates") except TclError: pass self.scrollbar = scrollbar = Scrollbar(acw, orient=VERTICAL) self.listbox = listbox = Listbox(acw, yscrollcommand=scrollbar.set, exportselection=False, bg="white") for item in self.completions: listbox.insert(END, item) self.origselforeground = listbox.cget("selectforeground") self.origselbackground = listbox.cget("selectbackground") scrollbar.config(command=listbox.yview) scrollbar.pack(side=RIGHT, fill=Y) listbox.pack(side=LEFT, fill=BOTH, expand=True) # Initialize the listbox selection self.listbox.select_set(self._binary_search(self.start)) self._selection_changed() # bind events self.hideid = self.widget.bind(HIDE_VIRTUAL_EVENT_NAME, self.hide_event) for seq in HIDE_SEQUENCES: self.widget.event_add(HIDE_VIRTUAL_EVENT_NAME, seq) self.keypressid = self.widget.bind(KEYPRESS_VIRTUAL_EVENT_NAME, self.keypress_event) for seq in KEYPRESS_SEQUENCES: self.widget.event_add(KEYPRESS_VIRTUAL_EVENT_NAME, seq) self.keyreleaseid = self.widget.bind(KEYRELEASE_VIRTUAL_EVENT_NAME, self.keyrelease_event) self.widget.event_add(KEYRELEASE_VIRTUAL_EVENT_NAME,KEYRELEASE_SEQUENCE) self.listupdateid = listbox.bind(LISTUPDATE_SEQUENCE, self.listselect_event) self.winconfigid = acw.bind(WINCONFIG_SEQUENCE, self.winconfig_event) self.doubleclickid = listbox.bind(DOUBLECLICK_SEQUENCE, self.doubleclick_event) def winconfig_event(self, event): if not self.is_active(): return # Position the completion list window text = self.widget text.see(self.startindex) x, y, cx, cy = text.bbox(self.startindex) acw = self.autocompletewindow acw_width, acw_height = acw.winfo_width(), acw.winfo_height() text_width, text_height = text.winfo_width(), text.winfo_height() new_x = text.winfo_rootx() + min(x, max(0, text_width - acw_width)) new_y = text.winfo_rooty() + y if (text_height - (y + cy) >= acw_height # enough height below or y < acw_height): # not enough height above # place acw below current line new_y += cy else: # place acw above current line new_y -= acw_height acw.wm_geometry("+%d+%d" % (new_x, new_y)) def hide_event(self, event): if not self.is_active(): return self.hide_window() def listselect_event(self, event): if not self.is_active(): return self.userwantswindow = True cursel = int(self.listbox.curselection()[0]) self._change_start(self.completions[cursel]) def doubleclick_event(self, event): # Put the selected completion in the text, and close the list cursel = int(self.listbox.curselection()[0]) self._change_start(self.completions[cursel]) self.hide_window() def keypress_event(self, event): if not self.is_active(): return keysym = event.keysym if hasattr(event, "mc_state"): state = event.mc_state else: state = 0 if keysym != "Tab": self.lastkey_was_tab = False if (len(keysym) == 1 or keysym in ("underscore", "BackSpace") or (self.mode == COMPLETE_FILES and keysym in ("period", "minus"))) \ and not (state & ~MC_SHIFT): # Normal editing of text if len(keysym) == 1: self._change_start(self.start + keysym) elif keysym == "underscore": self._change_start(self.start + '_') elif keysym == "period": self._change_start(self.start + '.') elif keysym == "minus": self._change_start(self.start + '-') else: # keysym == "BackSpace" if len(self.start) == 0: self.hide_window() return self._change_start(self.start[:-1]) self.lasttypedstart = self.start self.listbox.select_clear(0, int(self.listbox.curselection()[0])) self.listbox.select_set(self._binary_search(self.start)) self._selection_changed() return "break" elif keysym == "Return": self.hide_window() return elif (self.mode == COMPLETE_ATTRIBUTES and keysym in ("period", "space", "parenleft", "parenright", "bracketleft", "bracketright")) or \ (self.mode == COMPLETE_FILES and keysym in ("slash", "backslash", "quotedbl", "apostrophe")) \ and not (state & ~MC_SHIFT): # If start is a prefix of the selection, but is not '' when # completing file names, put the whole # selected completion. Anyway, close the list. cursel = int(self.listbox.curselection()[0]) if self.completions[cursel][:len(self.start)] == self.start \ and (self.mode == COMPLETE_ATTRIBUTES or self.start): self._change_start(self.completions[cursel]) self.hide_window() return elif keysym in ("Home", "End", "Prior", "Next", "Up", "Down") and \ not state: # Move the selection in the listbox self.userwantswindow = True cursel = int(self.listbox.curselection()[0]) if keysym == "Home": newsel = 0 elif keysym == "End": newsel = len(self.completions)-1 elif keysym in ("Prior", "Next"): jump = self.listbox.nearest(self.listbox.winfo_height()) - \ self.listbox.nearest(0) if keysym == "Prior": newsel = max(0, cursel-jump) else: assert keysym == "Next" newsel = min(len(self.completions)-1, cursel+jump) elif keysym == "Up": newsel = max(0, cursel-1) else: assert keysym == "Down" newsel = min(len(self.completions)-1, cursel+1) self.listbox.select_clear(cursel) self.listbox.select_set(newsel) self._selection_changed() self._change_start(self.completions[newsel]) return "break" elif (keysym == "Tab" and not state): if self.lastkey_was_tab: # two tabs in a row; insert current selection and close acw cursel = int(self.listbox.curselection()[0]) self._change_start(self.completions[cursel]) self.hide_window() return "break" else: # first tab; let AutoComplete handle the completion self.userwantswindow = True self.lastkey_was_tab = True return elif any(s in keysym for s in ("Shift", "Control", "Alt", "Meta", "Command", "Option")): # A modifier key, so ignore return else: # Unknown event, close the window and let it through. self.hide_window() return def keyrelease_event(self, event): if not self.is_active(): return if self.widget.index("insert") != \ self.widget.index("%s+%dc" % (self.startindex, len(self.start))): # If we didn't catch an event which moved the insert, close window self.hide_window() def is_active(self): return self.autocompletewindow is not None def complete(self): self._change_start(self._complete_string(self.start)) # The selection doesn't change. def hide_window(self): if not self.is_active(): return # unbind events for seq in HIDE_SEQUENCES: self.widget.event_delete(HIDE_VIRTUAL_EVENT_NAME, seq) self.widget.unbind(HIDE_VIRTUAL_EVENT_NAME, self.hideid) self.hideid = None for seq in KEYPRESS_SEQUENCES: self.widget.event_delete(KEYPRESS_VIRTUAL_EVENT_NAME, seq) self.widget.unbind(KEYPRESS_VIRTUAL_EVENT_NAME, self.keypressid) self.keypressid = None self.widget.event_delete(KEYRELEASE_VIRTUAL_EVENT_NAME, KEYRELEASE_SEQUENCE) self.widget.unbind(KEYRELEASE_VIRTUAL_EVENT_NAME, self.keyreleaseid) self.keyreleaseid = None self.listbox.unbind(LISTUPDATE_SEQUENCE, self.listupdateid) self.listupdateid = None self.autocompletewindow.unbind(WINCONFIG_SEQUENCE, self.winconfigid) self.winconfigid = None # destroy widgets self.scrollbar.destroy() self.scrollbar = None self.listbox.destroy() self.listbox = None self.autocompletewindow.destroy() self.autocompletewindow = None
Save