cinap_lenrekadd hg and python4bb9e2215 years agoHistory
1441 lines · 50.0 KB · Python
RawDownload
            self.top.mainloop()  # nested mainloop()        finally:            self.reading = save        line = self.text.get("iomark", "end-1c")        if len(line) == 0:  # may be EOF if we quit our mainloop with Ctrl-C            line = "\n"        if isinstance(line, unicode):            import IOBinding            try:                line = line.encode(IOBinding.encoding)            except UnicodeError:                pass        self.resetoutput()        if self.canceled:            self.canceled = 0            if not use_subprocess:                raise KeyboardInterrupt        if self.endoffile:            self.endoffile = 0            line = ""        return line     def isatty(self):        return True     def cancel_callback(self, event=None):        try:            if self.text.compare("sel.first", "!=", "sel.last"):                return # Active selection -- always use default binding        except:            pass        if not (self.executing or self.reading):            self.resetoutput()            self.interp.write("KeyboardInterrupt\n")            self.showprompt()            return "break"        self.endoffile = 0        self.canceled = 1        if (self.executing and self.interp.rpcclt):            if self.interp.getdebugger():                self.interp.restart_subprocess()            else:                self.interp.interrupt_subprocess()        if self.reading:            self.top.quit()  # exit the nested mainloop() in readline()        return "break"     def eof_callback(self, event):        if self.executing and not self.reading:            return # Let the default binding (delete next char) take over        if not (self.text.compare("iomark", "==", "insert") and                self.text.compare("insert", "==", "end-1c")):            return # Let the default binding (delete next char) take over        if not self.executing:            self.resetoutput()            self.close()        else:            self.canceled = 0            self.endoffile = 1            self.top.quit()        return "break"     def home_callback(self, event):        if event.state != 0 and event.keysym == "Home":            return # <Modifier-Home>; fall back to class binding        if self.text.compare("iomark", "<=", "insert") and \           self.text.compare("insert linestart", "<=", "iomark"):            self.text.mark_set("insert", "iomark")            self.text.tag_remove("sel", "1.0", "end")            self.text.see("insert")            return "break"     def linefeed_callback(self, event):        # Insert a linefeed without entering anything (still autoindented)        if self.reading:            self.text.insert("insert", "\n")            self.text.see("insert")        else:            self.newline_and_indent_event(event)        return "break"     def enter_callback(self, event):        if self.executing and not self.reading:            return # Let the default binding (insert '\n') take over        # If some text is selected, recall the selection        # (but only if this before the I/O mark)        try:            sel = self.text.get("sel.first", "sel.last")            if sel:                if self.text.compare("sel.last", "<=", "iomark"):                    self.recall(sel, event)                    return "break"        except:            pass        # If we're strictly before the line containing iomark, recall        # the current line, less a leading prompt, less leading or        # trailing whitespace        if self.text.compare("insert", "<", "iomark linestart"):            # Check if there's a relevant stdin range -- if so, use it            prev = self.text.tag_prevrange("stdin", "insert")            if prev and self.text.compare("insert", "<", prev[1]):                self.recall(self.text.get(prev[0], prev[1]), event)                return "break"            next = self.text.tag_nextrange("stdin", "insert")            if next and self.text.compare("insert lineend", ">=", next[0]):                self.recall(self.text.get(next[0], next[1]), event)                return "break"            # No stdin mark -- just get the current line, less any prompt            indices = self.text.tag_nextrange("console", "insert linestart")            if indices and \               self.text.compare(indices[0], "<=", "insert linestart"):                self.recall(self.text.get(indices[1], "insert lineend"), event)            else:                self.recall(self.text.get("insert linestart", "insert lineend"), event)            return "break"        # If we're between the beginning of the line and the iomark, i.e.        # in the prompt area, move to the end of the prompt        if self.text.compare("insert", "<", "iomark"):            self.text.mark_set("insert", "iomark")        # If we're in the current input and there's only whitespace        # beyond the cursor, erase that whitespace first        s = self.text.get("insert", "end-1c")        if s and not s.strip():            self.text.delete("insert", "end-1c")        # If we're in the current input before its last line,        # insert a newline right at the insert point        if self.text.compare("insert", "<", "end-1c linestart"):            self.newline_and_indent_event(event)            return "break"        # We're in the last line; append a newline and submit it        self.text.mark_set("insert", "end-1c")        if self.reading:            self.text.insert("insert", "\n")            self.text.see("insert")        else:            self.newline_and_indent_event(event)        self.text.tag_add("stdin", "iomark", "end-1c")        self.text.update_idletasks()        if self.reading:            self.top.quit() # Break out of recursive mainloop() in raw_input()        else:            self.runit()        return "break"     def recall(self, s, event):        # remove leading and trailing empty or whitespace lines        s = re.sub(r'^\s*\n', '' , s)        s = re.sub(r'\n\s*$', '', s)        lines = s.split('\n')        self.text.undo_block_start()        try:            self.text.tag_remove("sel", "1.0", "end")            self.text.mark_set("insert", "end-1c")            prefix = self.text.get("insert linestart", "insert")            if prefix.rstrip().endswith(':'):                self.newline_and_indent_event(event)                prefix = self.text.get("insert linestart", "insert")            self.text.insert("insert", lines[0].strip())            if len(lines) > 1:                orig_base_indent = re.search(r'^([ \t]*)', lines[0]).group(0)                new_base_indent  = re.search(r'^([ \t]*)', prefix).group(0)                for line in lines[1:]:                    if line.startswith(orig_base_indent):                        # replace orig base indentation with new indentation                        line = new_base_indent + line[len(orig_base_indent):]                    self.text.insert('insert', '\n'+line.rstrip())        finally:            self.text.see("insert")            self.text.undo_block_stop()     def runit(self):        line = self.text.get("iomark", "end-1c")        # Strip off last newline and surrounding whitespace.        # (To allow you to hit return twice to end a statement.)        i = len(line)        while i > 0 and line[i-1] in " \t":            i = i-1        if i > 0 and line[i-1] == "\n":            i = i-1        while i > 0 and line[i-1] in " \t":            i = i-1        line = line[:i]        more = self.interp.runsource(line)     def open_stack_viewer(self, event=None):        if self.interp.rpcclt:            return self.interp.remote_stack_viewer()        try:            sys.last_traceback        except:            tkMessageBox.showerror("No stack trace",                "There is no stack trace yet.\n"                "(sys.last_traceback is not defined)",                master=self.text)            return        from StackViewer import StackBrowser        sv = StackBrowser(self.root, self.flist)     def view_restart_mark(self, event=None):        self.text.see("iomark")        self.text.see("restart")     def restart_shell(self, event=None):        self.interp.restart_subprocess()     def showprompt(self):        self.resetoutput()        try:            s = str(sys.ps1)        except:            s = ""        self.console.write(s)        self.text.mark_set("insert", "end-1c")        self.set_line_and_column()        self.io.reset_undo()     def resetoutput(self):        source = self.text.get("iomark", "end-1c")        if self.history:            self.history.history_store(source)        if self.text.get("end-2c") != "\n":            self.text.insert("end-1c", "\n")        self.text.mark_set("iomark", "end-1c")        self.set_line_and_column()        sys.stdout.softspace = 0     def write(self, s, tags=()):        try:            self.text.mark_gravity("iomark", "right")            OutputWindow.write(self, s, tags, "iomark")            self.text.mark_gravity("iomark", "left")        except:            pass        if self.canceled:            self.canceled = 0            if not use_subprocess:                raise KeyboardInterrupt class PseudoFile(object):     def __init__(self, shell, tags, encoding=None):        self.shell = shell        self.tags = tags        self.softspace = 0        self.encoding = encoding     def write(self, s):        self.shell.write(s, self.tags)     def writelines(self, l):        map(self.write, l)     def flush(self):        pass     def isatty(self):        return True  usage_msg = """\ USAGE: idle  [-deins] [-t title] [file]*       idle  [-dns] [-t title] (-c cmd | -r file) [arg]*       idle  [-dns] [-t title] - [arg]*   -h         print this help message and exit  -n         run IDLE without a subprocess (see Help/IDLE Help for details) The following options will override the IDLE 'settings' configuration:   -e         open an edit window  -i         open a shell window The following options imply -i and will open a shell:   -c cmd     run the command in a shell, or  -r file    run script from file   -d         enable the debugger  -s         run $IDLESTARTUP or $PYTHONSTARTUP before anything else  -t title   set title of shell window A default edit window will be bypassed when -c, -r, or - are used. [arg]* are passed to the command (-c) or script (-r) in sys.argv[1:]. Examples: idle        Open an edit window or shell depending on IDLE's configuration. idle foo.py foobar.py        Edit the files, also open a shell if configured to start with shell. idle -est "Baz" foo.py        Run $IDLESTARTUP or $PYTHONSTARTUP, edit foo.py, and open a shell        window with the title "Baz". idle -c "import sys; print sys.argv" "foo"        Open a shell window and run the command, passing "-c" in sys.argv[0]        and "foo" in sys.argv[1]. idle -d -s -r foo.py "Hello World"        Open a shell window, run a startup script, enable the debugger, and        run foo.py, passing "foo.py" in sys.argv[0] and "Hello World" in        sys.argv[1]. echo "import sys; print sys.argv" | idle - "foobar"        Open a shell window, run the script piped in, passing '' in sys.argv[0]        and "foobar" in sys.argv[1].""" def main():    global flist, root, use_subprocess     use_subprocess = True    enable_shell = False    enable_edit = False    debug = False    cmd = None    script = None    startup = False    try:        opts, args = getopt.getopt(sys.argv[1:], "c:deihnr:st:")    except getopt.error, msg:        sys.stderr.write("Error: %s\n" % str(msg))        sys.stderr.write(usage_msg)        sys.exit(2)    for o, a in opts:        if o == '-c':            cmd = a            enable_shell = True        if o == '-d':            debug = True            enable_shell = True        if o == '-e':            enable_edit = True        if o == '-h':            sys.stdout.write(usage_msg)            sys.exit()        if o == '-i':            enable_shell = True        if o == '-n':            use_subprocess = False        if o == '-r':            script = a            if os.path.isfile(script):                pass            else:                print "No script file: ", script                sys.exit()            enable_shell = True        if o == '-s':            startup = True            enable_shell = True        if o == '-t':            PyShell.shell_title = a            enable_shell = True    if args and args[0] == '-':        cmd = sys.stdin.read()        enable_shell = True    # process sys.argv and sys.path:    for i in range(len(sys.path)):        sys.path[i] = os.path.abspath(sys.path[i])    if args and args[0] == '-':        sys.argv = [''] + args[1:]    elif cmd:        sys.argv = ['-c'] + args    elif script:        sys.argv = [script] + args    elif args:        enable_edit = True        pathx = []        for filename in args:            pathx.append(os.path.dirname(filename))        for dir in pathx:            dir = os.path.abspath(dir)            if not dir in sys.path:                sys.path.insert(0, dir)    else:        dir = os.getcwd()        if not dir in sys.path:            sys.path.insert(0, dir)    # check the IDLE settings configuration (but command line overrides)    edit_start = idleConf.GetOption('main', 'General',                                    'editor-on-startup', type='bool')    enable_edit = enable_edit or edit_start    enable_shell = enable_shell or not edit_start    # start editor and/or shell windows:    root = Tk(className="Idle")     fixwordbreaks(root)    root.withdraw()    flist = PyShellFileList(root)    macosxSupport.setupApp(root, flist)     if enable_edit:        if not (cmd or script):            for filename in args:                flist.open(filename)            if not args:                flist.new()    if enable_shell:        shell = flist.open_shell()        if not shell:            return # couldn't open shell         if macosxSupport.runningAsOSXApp() and flist.dict:            # On OSX: when the user has double-clicked on a file that causes            # IDLE to be launched the shell window will open just in front of            # the file she wants to see. Lower the interpreter window when            # there are open files.            shell.top.lower()     shell = flist.pyshell    # handle remaining options:    if debug:        shell.open_debugger()    if startup:        filename = os.environ.get("IDLESTARTUP") or \                   os.environ.get("PYTHONSTARTUP")        if filename and os.path.isfile(filename):            shell.interp.execfile(filename)    if shell and cmd or script:        shell.interp.runcommand("""if 1:            import sys as _sys            _sys.argv = %r            del _sys            \n""" % (sys.argv,))        if cmd:            shell.interp.execsource(cmd)        elif script:            shell.interp.prepend_syspath(script)            shell.interp.execfile(script)     root.mainloop()    root.destroy() if __name__ == "__main__":    sys.modules['PyShell'] = sys.modules['__main__']    main()

Lines 1001–1441 of 1441. Previous lines