Spaces:
Sleeping
Sleeping
| # The default keyboard etc configuration file for Pythonwin. | |
| # | |
| # The format of this file is very similar to a Windows INI file. | |
| # Sections are identified with [Section] lines, but comments | |
| # use the standatd Python # character. Depending on the section, | |
| # lines may not be in the standard "key=value" format. | |
| # NOTE: You should not need to modify this file. | |
| # Simply create a new .CFG file, and add an entry: | |
| # [General] | |
| # BasedOn = Default | |
| # | |
| # and add your customisations. Then select your new configuration | |
| # from the Pythonwin View/Options/Editor dialog. | |
| # This way you get to add your own customisations, | |
| # but still take advantage of changes to the default | |
| # configuration in new releases. | |
| # See IDLE.cfg for an example extension configuration. | |
| # | |
| ########################################################################## | |
| [IDLE Extensions] | |
| # The list of IDLE extensions to load. The extensions | |
| # AutoIndent, AutoFormat and possibly others are | |
| # "built-in", so do not need specifying. | |
| FormatParagraph | |
| CallTips | |
| [Keys] | |
| # The list of _default_ key definitions. | |
| # See [Keys:Interactive] and [Keys:Editor] below for further defs. | |
| #Events of the format <<event-name>> | |
| # are events defined in IDLE extensions. | |
| Alt+Q = <<format-paragraph>> | |
| Ctrl+W = ViewWhitespace | |
| Ctrl+Shift+8 = ViewWhitespace # The MSVC default key def. | |
| Ctrl+Shift+F = ViewFixedFont | |
| # Auto-complete, call-tips, etc. | |
| Alt+/ = <<expand-word>> | |
| Ctrl+Space = <<expand-word>> | |
| ( = <<paren-open>> | |
| ) = <<paren-close>> | |
| Up = <<check-calltip-cancel>> | |
| Down = <<check-calltip-cancel>> | |
| Left = <<check-calltip-cancel>> | |
| Right = <<check-calltip-cancel>> | |
| . = KeyDot | |
| # Debugger - These are the MSVC default keys, for want of a better choice. | |
| F9 = DbgBreakpointToggle | |
| F5 = DbgGo | |
| Shift+F5 = DbgClose | |
| F11 = DbgStep | |
| F10 = DbgStepOver | |
| Shift+F11 = DbgStepOut | |
| Ctrl+F3 = AutoFindNext | |
| [Keys:Editor] | |
| # Key bindings specific to the editor | |
| F2 = GotoNextBookmark | |
| Ctrl+F2 = ToggleBookmark | |
| Ctrl+G = GotoLine | |
| Alt+I = ShowInteractiveWindow | |
| Alt-B = AddBanner # A sample Event defined in this file. | |
| # Block operations | |
| Alt+3 = <<comment-region>> | |
| Shift+Alt+3 = <<uncomment-region>> | |
| Alt+4 = <<uncomment-region>> # IDLE default. | |
| Alt+5 = <<tabify-region>> | |
| Alt+6 = <<untabify-region>> | |
| # Tabs and other indent features | |
| Back = <<smart-backspace>> | |
| Ctrl+T = <<toggle-tabs>> | |
| Alt+U = <<change-indentwidth>> | |
| Enter = EnterKey | |
| Tab = TabKey | |
| Shift-Tab = <<dedent-region>> | |
| # Folding | |
| Add = FoldExpand | |
| Alt+Add = FoldExpandAll | |
| Shift+Add = FoldExpandSecondLevel | |
| Subtract = FoldCollapse | |
| Alt+Subtract = FoldCollapseAll | |
| Shift+Subtract = FoldCollapseSecondLevel | |
| Multiply = FoldTopLevel | |
| [Keys:Interactive] | |
| # Key bindings specific to the interactive window. | |
| # History for the interactive window | |
| Ctrl+Up = <<history-previous>> | |
| Ctrl+Down = <<history-next>> | |
| Enter = ProcessEnter | |
| Ctrl+Enter = ProcessEnter | |
| Shift+Enter = ProcessEnter | |
| Esc = ProcessEsc | |
| Alt+I = WindowBack # Toggle back to previous window. | |
| Home = InteractiveHome # A sample Event defined in this file. | |
| Shift+Home = InteractiveHomeExtend # A sample Event defined in this file. | |
| # When docked, the Ctrl+Tab and Shift+Ctrl+Tab keys dont work as expected. | |
| Ctrl+Tab = MDINext | |
| Ctrl+Shift+Tab = MDIPrev | |
| [Extensions] | |
| # Python event handlers specific to this config file. | |
| # All functions not starting with an "_" are assumed | |
| # to be events, and take 2 params: | |
| # * editor_window is the same object passed to IDLE | |
| # extensions. editor_window.text is a text widget | |
| # that conforms to the Tk text widget interface. | |
| # * event is the event being fired. Will always be None | |
| # in the current implementation. | |
| # Simply by defining these functions, they are available as | |
| # events. | |
| # Note that we bind keystrokes to these events in the various | |
| # [Keys] sections. | |
| # Add a simple file/class/function simple banner | |
| def AddBanner(editor_window, event): | |
| text = editor_window.text | |
| big_line = "#" * 70 | |
| banner = "%s\n## \n## \n## \n%s\n" % (big_line, big_line) | |
| # Insert at the start of the current line. | |
| pos = text.index("insert linestart") | |
| text.undo_block_start() # Allow action to be undone as a single unit. | |
| text.insert(pos, banner) | |
| text.undo_block_stop() | |
| # Now set the insert point to the middle of the banner. | |
| line, col = [int(s) for s in pos.split(".")] | |
| text.mark_set("insert", "%d.1 lineend" % (line+2, ) ) | |
| # Here is a sample event bound to the "Home" key in the | |
| # interactive window | |
| def InteractiveHome(editor_window, event): | |
| return _DoInteractiveHome(editor_window.text, 0) | |
| def InteractiveHomeExtend(editor_window, event): | |
| return _DoInteractiveHome(editor_window.text, 1) | |
| def _DoInteractiveHome(text, extend): | |
| import sys | |
| # If Scintilla has an autocomplete window open, then let Scintilla handle it. | |
| if text.edit.SCIAutoCActive(): | |
| return 1 | |
| of_interest = "insert linestart + %d c" % len(sys.ps1) | |
| if not text.compare("insert", "==", of_interest) and \ | |
| text.get("insert linestart", of_interest) in [sys.ps1, sys.ps2]: # Not sys.ps? line | |
| end = of_interest | |
| else: | |
| end = "insert linestart" | |
| if extend: start = "insert" | |
| else: start = end | |
| text.tag_add("sel", start, end) | |
| # From Niki Spahie | |
| def AutoFindNext(editor_window, event): | |
| "find selected text or word under cursor" | |
| from pywin.scintilla import find | |
| from pywin.scintilla import scintillacon | |
| try: | |
| sci = editor_window.edit | |
| word = sci.GetSelText() | |
| if word: | |
| find.lastSearch.findText = word | |
| find.lastSearch.sel = sci.GetSel() | |
| else: | |
| pos = sci.SendScintilla( scintillacon.SCI_GETCURRENTPOS ) | |
| start = sci.SendScintilla( scintillacon.SCI_WORDSTARTPOSITION, pos, 1 ) | |
| end = sci.SendScintilla( scintillacon.SCI_WORDENDPOSITION, pos, 1 ) | |
| word = sci.GetTextRange( start, end ) | |
| if word: | |
| find.lastSearch.findText = word | |
| find.lastSearch.sel = (start,end) | |
| except Exception: | |
| import traceback | |
| traceback.print_exc() | |
| find.FindNext() | |
| # A couple of generic events. | |
| def Beep(editor_window, event): | |
| editor_window.text.beep() | |
| def DoNothing(editor_window, event): | |
| pass | |
| def ContinueEvent(editor_window, event): | |
| # Almost an "unbind" - allows Pythonwin/MFC to handle the keystroke | |
| return 1 | |