Yf @s_ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZyddlTWn2ek reddejejdYnXddljZddlmZmZdd lmZdd lmZdd l m!Z!dd l"m#Z#dd l$m%Z%ddl&m'Z'ddl&m(Z(ddl&m)Z)ddl&m*Z*dZ+dZ,eja-ddl.Z.dddZ/ddddZ0da1ddZ2e2dde j3ddZ4e4e _3GdddeZ5GdddeZ6Gd d!d!eZ7Gd"d#d#e!Z8Gd$d%d%e'j9Z:Gd&d'd'e Z;Gd(d)d)e#Z<Gd*d+d+e j=Z>Gd,d-d-e>Z?Gd.d/d/e>Z@d0d1ZAd2ZBd3d4ZCeDd5krQejEd5ejEd)>> )warning_streamwriterAttributeErrorOSError)rrrrrrrrridle_showwarning=s  r$cCsF|r'tdkrBtjatt_ntdk rBtt_dadS)z>Replace warning.showwarning with idle_showwarning, or reverse.N)_warnings_showwarningwarnings showwarningr$)Zcapturerrrcapture_warningsPs     r(TcCsxtj}i}xKt|D]=}|dd|dddkr|j||| entries Rather than repeating the linecache code, patch it to save the entries, call the original linecache.checkcache() (skipping them), and then restore the saved entries. orig_checkcache is bound at definition time to the original method, allowing it to be patched. Nrz<>)rcachelistpopupdate)rZorig_checkcacher*savekeyrrrextended_linecache_checkcache_s $ r0c@seZdZdZddZd'd(d)d*d+d,gZdddZddZd ddZd ddZ ddZ ddZ dd Z d!d"Z d#d$Zd%d&Zd S)-PyShellEditorWindowz6Regular text edit window in IDLE, supports breakpointscGsg|_tj|||jjd|j|jjd|j|jjd|jjt j j t j d|_|jj|dd}|jj||jjr|j|jdS)Nz<>z<>z<>zbreakpoints.lstcSs|j|dS)N)restore_file_breaks)Zold_hookselfrrrfilename_changed_hooks z;PyShellEditorWindow.__init__..filename_changed_hook) breakpointsr__init__textbindset_breakpoint_hereclear_breakpoint_hereflist open_shellospathjoinrZ GetUserCfgDirbreakpointPathioZfilename_change_hookZset_filename_change_hookrr2color_breakpoint_text)r3argsr4rrrr6ys     zPyShellEditorWindow.__init__Cut<>rmenu_check_cutCopy<>rmenu_check_copyPaste <>rmenu_check_pasteNSet Breakpoint<>Clear Breakpoint<>TcCsc|jdkrdS|r:tj}tj|d}nddddi}|jjd|dS)z,Turn colorizing of breakpoint text on or offNbreak foreground backgroundBREAK)rAr CurrentTheme GetHighlightr7Z tag_config)r3ZcolorthemeZcfgrrrrBs z)PyShellEditorWindow.color_breakpoint_textcCs|j}|jj}|jdd|d|dy|jj|Wn"tk rl|jj|YnXy&|jj j j }|j ||WnYnXdS)NrUz%d.0r) r7rArtag_addr5index ValueErrorappendr;pyshellinterpdebuggerr9)r3rr7rdebugrrrset_breakpoints   z"PyShellEditorWindow.set_breakpointcCsU|j}|jj}|s)|jdStt|jd}|j|dS)Ninsert)r7rArbellintfloatrZra)r3eventr7rrrrrr9s   z'PyShellEditorWindow.set_breakpoint_herecCs|j}|jj}|s)|jdStt|jd}y|jj|WnYnX|j dddy&|j j j j }|j||WnYnXdS)NrbrUzinsert linestartzinsert lineend +1char)r7rArrcrdrerZr5remove tag_remover;r]r^r_r:)r3rfr7rrr`rrrr:s"    z)PyShellEditorWindow.clear_breakpoint_herec Cs|jr||j}|jj}|s2|jdSg|_|jddty#|jjj j }|j |WnYnXdS)NrUz1.0) r5r7rArrcrhZENDr;r]r^r_clear_file_breaks)r3r7rr`rrrris     z%PyShellEditorWindow.clear_file_breaksc Cs[|j}|jj}y,t|jd}|j}WdQRXWntk r[g}YnXyt|jdp}x.|D]&}|j|ds{|j|q{W|j |j}|r|j|dt |dWdQRXWnotk rV}zOt |j ddsDd|j _ tjd d d d t |d |jWYdd}~XnXdS)z#Save breakpoints when file is savedrNw= breakpoint_error_displayedFTtitlez IDLE Errorrz$Unable to update breakpoint list: %sparent)r5rAropenr@ readlinesr# startswithr!update_breakpointsstrgetattrrootrn tkMessageBox showerrorr7)r3ZbreaksrfplinesZnew_filererrrrrstore_file_breakss.       *  z%PyShellEditorWindow.store_file_breaksc Cs|jj|jdkr dS|jj}|dkr<dStjj|jrt|jd}|j }WdQRXx_|D]W}|j |drt |t |dd}x|D]}|j |qWqWdS)Nrjrlr)r7r-rArr=r>isfiler@rqrrrsevallenra)r3rrzr{rZbreakpoint_linenumbersZbreakpoint_linenumberrrrr2s      z'PyShellEditorWindow.restore_file_breakscCs4|j}|jd}|j|}||_dS)z3Retrieves all the breakpoints in the current windowrUN)r7Z tag_rangesranges_to_linenumbersr5)r3r7rangesZlinenumber_listrrrrts z&PyShellEditorWindow.update_breakpointscCsg}xtdt|dD]f}tt||j}tt||dj}x'||kr|j||d7}q^WqW|S)Nrr)rangerrdrestringr\)r3rr{rZrendrrrrs z)PyShellEditorWindow.ranges_to_linenumberscCs|jtj|dS)z7Extend base method - clear breaks when module is closedN)rir_close)r3rrrr-s zPyShellEditorWindow._close)rDrErF)rGrHrI)rJrKrL)NNN)rMrNN)rOrPN)r __module__ __qualname____doc__r6Z rmenu_specsrBrar9r:rir}r2rtrrrrrrr1vs$       *   r1c@s1eZdZdZeZdZdddZdS)PyShellFileListz8Extend base class: IDLE supports a shell and breakpointsNcCsN|jr|jjjn+t||_|jrG|jjsGdS|jS)N)r]topwakeupPyShellbegin)r3rfrrrr<<s  zPyShellFileList.open_shell)rrrrr1rr]r<rrrrr3s rc@sFeZdZdZddZddZddZdd Zd S) ModifiedColorDelegatorz8Extend base class: colorizer for the shell window itselfcCstj||jdS)N)r r6 LoadTagDefs)r3rrrr6Js zModifiedColorDelegator.__init__cCs7|jddd|jdddtj|dS)NZTODOz1.0iomarkZSYNC)rhrYr recolorize_main)r3rrrrNsz&ModifiedColorDelegator.recolorize_mainc Csutj|tj}|jjdddddidtj|ddtj|ddtj|didS)NstdinrTrRstdoutstderrconsole)r rrrVtagdefsr-rW)r3rXrrrrSs   z"ModifiedColorDelegator.LoadTagDefscCs+x$|jD]}|j|ddq WdS)Nrr)rrh)r3tagrrr removecolors]sz#ModifiedColorDelegator.removecolorsN)rrrrr6rrrrrrrrGs    rc@s4eZdZdZdddZdddZdS)ModifiedUndoDelegatorz;Extend base class: forbid insert/delete before the I/O markNc Cs\y-|jj|ddr,|jjdSWntk rAYnXtj||||dS)NZ%dS)?ModifiedInterpretercCsf||_tjdj}tj|d|d|_d|_d|_t |_ |j j j |_dS)N__main__localsF) tkconsolesysmodules__dict__rr6save_warnings_filters restartingsubprocess_arglistPORTportcompilecompilerflagsoriginal_compiler_flags)r3rrrrrr6s     zModifiedInterpreter.__init__NcCs7|jdkr|j|_tj|j|_dS)N)rbuild_subprocess_arglist subprocessPopen rpcsubproc)r3rrrspawn_subprocesssz$ModifiedInterpreter.spawn_subprocesscCs|jdkstdddtjD}tjddddd d d }td krnd |f}n d|f}tjg|d|t|jgS)Nrz/Socket should have been assigned a port number.cSsg|]}d|qS)z-Wr).0rrrr s z@ModifiedInterpreter.build_subprocess_arglist..mainGeneralzdelete-exitfuncdefaultFtypeboolzidlelib.PyShellz&__import__('idlelib.run').run.main(%r)z__import__('run').main(%r)z-c) rAssertionErrorr warnoptionsr GetOptionr executableru)r3rkZ del_exitfZcommandrrrrs   z,ModifiedInterpreter.build_subprocess_arglistc Cst|jf}xXtdD]<}tj|yt||_PWqtk rWYqXqW|jdS|jj j d|_t dkr|jj j t jt jd|j|jj jdy|jjWn#t jk r|jdSYnX|jjd|j|jjd|jj|jjd|jj|jjd|jj|jjd |jj|jjd t|jjd ||jd d |j|jS)Nrr rrrrr;rr^with_cwdT)HOSTrrtimeZsleeprrpccltr#display_port_binding_errorlistening_sockZ getsocknamerZ setsockoptsocketZ SOL_SOCKETZ SO_REUSEADDRrZ settimeoutaccepttimeoutdisplay_no_subprocess_errorregisterrrrrr;r transfer_pathpoll_subprocess)r3Zaddrirrrstart_subprocesss>          z$ModifiedInterpreter.start_subprocessFrScCs|jr|jSd|_|j}|rJytj|jWnYnX|jj|j|j}|j}d|_|j y|jj Wn#t j k r|j dSYnX|jd||j|jjddd|r|nd}t|jt|dd d }|jd j|||jjd d|jjd d |st|j|rtj|j|j|j|jj_d|_|jS)NTFrrzend-1cz RESTART: ZShellrrlz {0} {1} {0}restartleft) rr getdebuggerrZclose_subprocess_debuggercloseterminate_subprocessr executingrrrrrr stop_readliner7rrdwidthrr!formatmark_set mark_gravity showpromptZrestart_subprocess_debuggerload_breakpointsrrrr)r3rrr`rZ was_executingrZhalfbarrrrrestart_subprocesssH            %   z&ModifiedInterpreter.restart_subprocesscCs|jjddfidS)NexecZinterrupt_the_server)rZ remotecall)r3rrrZ__request_interruptsz'ModifiedInterpreter.__request_interruptcCstjd|jjdS)Ntarget) threadingZThread'_ModifiedInterpreter__request_interruptstart)r3rrrinterrupt_subprocesssz(ModifiedInterpreter.interrupt_subprocesscCs|jdk r%|jjj|jy|jjjWntk rMYnXy|jjWntk rsYnX|jd|j_ d|_dS)NF) _afteridrr7Z after_cancelrrrr"rr)r3rrrkill_subprocesss    z#ModifiedInterpreter.kill_subprocesscCsXy|jjWntk r)dSYn+Xy|jjWntk rSdSYnXdS)z"Make sure subprocess is terminatedN)rkillr#wait)r3rrrrs   z(ModifiedInterpreter.terminate_subprocesscCsC|r"dg}|jtjn tj}|jd|fdS)NrSzRif 1: import sys as _sys _sys.path = %r del _sys )extendrr> runcommand)r3rr>rrrrs   z!ModifiedInterpreter.transfer_pathcCs|j}|dkrdSy|j|jdd}Wn;tttfk rr|jjr^dSd}|jYnX|rd|jj d|_|\}}|jj }|dkr|dk r>t t |d|nf|dkr|jj dr>|jn;|dkr>d}t ||dtjt ||d|y|jjWntk rcYnX|jjs|jjj|jj|j|_dS) Nrg?ZOKrZ EXCEPTIONz<>ERRORz/PyShell.ModifiedInterpreter: Subprocess ERROR: )rZ pollresponse active_seqrr#KeyboardInterruptrclosingr resetoutputrprintreprgetvarremote_stack_viewerr __stderr__ endexecutingr"r7after pollintervalrr)r3ZcltresponseZhowZwhatrerrmsgrrrr,s@               z#ModifiedInterpreter.poll_subprocesscCs ||_dS)N)r_)r3r_rrr setdebuggerTszModifiedInterpreter.setdebuggercCs|jS)N)r_)r3rrrrWszModifiedInterpreter.getdebuggercCs|jjjd|jdS)aInitiate the remote stack viewer from a separate thread. This method is called from the subprocess, and by returning from this method we allow the subprocess to unblock. After a bit the shell requests the subprocess to open the remote stack viewer which returns a static object looking at the last exception. It is queried through the RPC mechanism. i,N)rr7rr)r3rrropen_remote_stack_viewerZs z,ModifiedInterpreter.open_remote_stack_viewerc Csddlm}|jjdddi}|dkrK|jjjdS|j|j|}ddlm }m }t |jj}t j }t j|dd}||d |d d} | jjd d d d|| jd|} | jdS)Nr)RemoteObjectBrowserrZ stackviewerr;)ScrolledCanvasTreeNodeZnormalrTZbgZhighlightthicknessexpandrZfillZboth)r;)idlelibrr remotequeuerrwrcZStubObjectTreeItemZidlelib.TreeWidgetrrZToplevelrrVrWframeZpackZcanvasr) r3rZoiditemrrrrXrTZscZnoderrrrgs  z'ModifiedInterpreter.remote_stack_viewerrcCs#|j|}|j||dS)z1Like runsource() but assumes complete exec sourceN) stuffsourceexecfile)r3sourcerrrr execsourcezszModifiedInterpreter.execsourcecCs|dkr1tj|}|j}WdQRXyt||d}WnXttfk r|jjtdd|jj t j |||jj YnX|j |dS)zExecute an existing fileNrzB*** Error in script or command! Traceback (most recent call last):r)tokenizerqreadr OverflowError SyntaxErrorrrrrrshowsyntaxerrorrruncode)r3rr rzcoderrrr s    zModifiedInterpreter.execfilec Cs|j|}d|_tjdd|_tjdddtt|tsYt zt j |||SWd|jdk r|jtjddrrmr)gidsplitrrr*)r3r rr{rrrr s  #zModifiedInterpreter.stuffsourcecCs|jd|fdS)z>Prepend sys.path with file's directory if not already includeda(if 1: _filename = %r import sys as _sys from os.path import dirname as _dirname _dir = _dirname(_filename) if not _dir in _sys.path: _sys.path.insert(0, _dir) del _filename, _sys, _dirname, _dir N)r)r3rrrrprepend_syspathsz#ModifiedInterpreter.prepend_syspathc Cs |j}|j}|jdddtj\}}}t|ddpU|pUd}t|ddpmd}t|d dpd } | d kr|d7}|dkrd | d} nd |d| df} |j|| |j|jd ||j dS)zOverride Interactive Interpreter method: Use Colorizing Color the offending position instead of printing it and pointing at it with a caret. rz1.0rmsgrSzrroffsetrziomark + %d charsz&iomark linestart + %d lines + %d charszSyntaxError: %s N) rr7rhrexc_inforvZcolorize_syntax_errorrr!r) r3rrr7rvaluetbr rr!posrrrrs"      z#ModifiedInterpreter.showsyntaxerrorcCsG|jj|jtj||jjdrC|jjdS)z1Extend base class method to reset output properlyz<>N)rrchecklinecacher showtracebackropen_stack_viewer)r3rrrr's    z!ModifiedInterpreter.showtracebackcCsUtj}xEt|jD]1}|dd|dddkr||=qWdS)Nrz<>r))rr*r+keys)r3cr/rrrr&s $z"ModifiedInterpreter.checklinecachecCsV|jjr|jdS|jrB|jjdd|fint||jdS)z*Run the code without invoking the debuggerrrrr)rrdisplay_executing_dialogrrrr)r3rrrrrs   zModifiedInterpreter.runcommandcCs|jjr|jj|j|jdk rQ|jtjddd?Z(d@dAZ)dBdCZ*dDdEZ+ddFdGZ,ddHdIZ-ddJdKZ.dLdMZ/dNdOZ0fdPdQZ1fdRdSZ2fdTdUZ3S)\rzPython z Shellr_Fileedit_Editr`_Debugoptions_Optionswindows_Windowhelp_Helpr)HistoryNc Cstr3|j}|dddkr3|jddt||_|dkrwt}t||jt|}t j ||ddd|_ d|_ d|_ |j}|jdd|jd |j|jd |j|jd |j|jd |j|jd |j|jd|j|jd|jtrr|jd|j|jd|jtj|_tj|_tj|_ ddl!m"}t#|d|j$|_t%|d|j$|_t%|d|j$|_t%|d|j$|_&ts0|jt_|jt_|jt_yddl'}|j(|_)Wntj*t_YnX|j+|j|_,d|_-dS)NrrshellShe_llTZwrapcharz<>z<>z<>z<>z<>z<>z<>z<>z<>) IOBindingrrrr2)r<r=).r/ menu_specsrbrr^Tkr withdrawrr r6ZusetabsZ indentwidthZcontext_use_ps1r7Z configurer8enter_callbacklinefeed_callbackcancel_callback eof_callbackr(toggle_debuggertoggle_jit_stack_viewerview_restart_mark restart_shellrr save_stdoutr save_stderrr save_stdinrr@PseudoInputFileencodingPseudoOutputFilerpydocZ plainpagerZpagerrr;historyr)r3r;Zmsrwr7r@rSrrrr6Ws\                  zPyShell.__init__cCstjddS)NZ shell_onlyT)rZ GetExtensions)r3rrrget_standard_extension_namessz$PyShell.get_standard_extension_namesFcCs |adS)N)r )r3streamrrrset_warning_streamszPyShell.set_warning_streamcCstS)N)r )r3rrrget_warning_streamszPyShell.get_warning_streamcCs`|jr0tjddd|j|jdS|jj}|rR|jn |jdS)NzDon't debug nowz*You can only toggle the debugger when idlerprQ) rrxryr7set_debugger_indicatorr^rclose_debugger open_debugger)r3rfdbrrrrIs     zPyShell.toggle_debuggercCs%|jj}|jd| dS)Nz<>)r^rZsetvar)r3r\rrrrYszPyShell.set_debugger_indicatorcCsdS)Nr)r3rfrrrrJszPyShell.toggle_jit_stack_viewercCs|jj}|r{|jjd|j|jjrNtj|jj|j|jj ddt _ |j |j dS)Nz [DEBUG OFF] z>>> )r^rrrrrZclose_remote_debuggerrrr!rps1rrY)r3r\rrrrZs     zPyShell.close_debuggercCsq|jjr'tj|jj|}ntj|}|jj||jdt_|j |j dS)Nz[DEBUG ON] >>> ) r^rrZstart_remote_debuggerrrrrr]rrY)r3Zdbg_guirrrr[s     zPyShell.open_debuggercCs|jd|_dS)zHelper for ModifiedInterpreterrN)rr)r3rrrr-s zPyShell.beginexecutingcCs d|_d|_|jdS)zHelper for ModifiedInterpreterrN)rr0r)r3rrrrs  zPyShell.endexecutingcCsc|jr:tjddddd|j}|dkr:dS|jd|_d|_tj|S) zExtend EditorWindow.close()zKill?z7Your program is still running! Do you want to kill it?rokrpFZcancelT) rrxZ askokcancelr7rr0rrr)r3rrrrrs      z PyShell.closecCsy|jtr|jj|jt_|jt_|j t_ d|_d|_ d|j _ d|_tj|dS)zEExtend EditorWindow._close(), shut down debugger and execution serverN)rZr/r^rrMrrrNrrOrrr;r]rTrr)r3rrrrs         zPyShell._closecCsdS)z8Override EditorWindow method: never remove the colorizerTr)r3rrrrispythonsourceszPyShell.ispythonsourcecCs|jS)N) shell_title)r3rrr short_titleszPyShell.short_titlez@Type "copyright", "credits" or "license()" for more information.cCs|jjdd|jtrOd}|jj}|sm|jdSndddd}tjt _|j d t j t j |j |f|jj|jd dl}d|_d S) NrrbrSFz==== No Subprocess ==== z9WARNING: Running IDLE without a Subprocess is deprecated z;and will be removed in a later version. See Help/IDLE Help zfor details. zPython %s on %s %s %srT)r7rrr/r^rrr displayhookrr!versionplatform COPYRIGHTZ focus_forcertkinterZ _default_root)r3ZnosubZclientrfrrrrs$         z PyShell.begincCs'|js dSd|_|jjdS)NT)reading_stop_readline_flagrquit)r3rrrrs  zPyShell.stop_readlinec Cs|j}zd|_|jjWd||_X|jrFd|_dS|jjdd}t|dkrsd}|j|jrd|_t st |j rd|_ d}|S)NrFrSrzend-1crrm) rgrmainlooprhr7getrrr0r/r endoffile)r3r.rrrrreadline"s(          zPyShell.readlinecCsdS)NTr)r3rrrisatty9szPyShell.isattyc Csy |jjdddrdSWnYnX|jp:|jse|j|jjd|jdSd|_d|_ |jr|jj r|jj r|jj n |jj |jr|jjdS)Nz sel.firstz!=zsel.lastzKeyboardInterrupt rQrr)r7rrrgrr^r!rrlr0rrrrrri)r3rfrrrrG<s&       zPyShell.cancel_callbackcCs|jr|j rdS|jjdddoD|jjdddsKdS|jsk|j|jnd|_d|_|jj dS)Nrz==rbzend-1crrrQ) rrgr7rrrr0rlrri)r3rfrrrrHRs      zPyShell.eof_callbackcCs@|jr/|jjdd|jjdn |j|dS)NrbrmrQ)rgr7rbseenewline_and_indent_event)r3rfrrrrFas   zPyShell.linefeed_callbackc Cs|jr|j rdSyK|jjdd}|ra|jjdddra|j||dSWnYnX|jjdddr|jjd d}|r|jjdd|d r|j|jj|d |d |dS|jjd d}|rI|jjd d |d rI|j|jj|d |d |dS|jjdd}|r|jj|d ddr|j|jj|d d |n|j|jjdd |dS|jjdddr|jjdd|jjdd}|r/|j r/|jj dd|jjdddrX|j |dS|jjdd|jr|jj dd|jj dn |j ||jjd dd|jj|jr|jjn |jdS)Nz sel.firstzsel.lastz<=rrQrbrziomark linestartrrrzinsert lineendz>=rzinsert linestartzend-1czend-1c linestartrm)rrgr7rkrrecallZ tag_prevrangeZ tag_nextrangerrrrprbrorYZupdate_idletasksrrirunit)r3rfselprevnextindicesrrrrrEjsX"'"'&      zPyShell.enter_callbackc Cstjdd|}tjdd|}|jd}|jjzC|jjddd|jjdd |jjd d}|jj d r|j ||jjd d}|jj d|d j t |d krtjd|d jd }tjd|jd }x^|d dD]L}|j|rg||t |d}|jj dd|jq8WWd|jjd|jjXdS)Nz^\s*\nrSz\n\s*$rmrsz1.0rrbzend-1czinsert linestart:rrz ^([ \t]*))resubrr7Zundo_block_startrhrrkrstripendswithrprbrrsearchgrouprsroZundo_block_stop)r3rrfr{prefixZorig_base_indentZnew_base_indentrrrrrqs*  %zPyShell.recallcCs|jjdd}t|}x.|dkrQ||ddkrQ|d}q$W|dkr|||ddkr||d}x.|dkr||ddkr|d}qW|d|}|jj|dS)Nrzend-1crrz rm)r7rkrr^r)r3rrrrrrrs #  #z PyShell.runitc Css|jjr|jjSy tjWn%tjddd|jdSYnXddlm }||j |j dS)NzNo stack tracez@There is no stack trace yet. (sys.last_traceback is not defined)rpr) StackBrowser) r^rrrlast_tracebackrxryr7Zidlelib.StackViewerrrwr;)r3rfrrrrr(s      zPyShell.open_stack_viewercCs$|jjd|jjddS)Nrr)r7ro)r3rfrrrrKszPyShell.view_restart_markcCs|jjdddS)z&Callback for Run/Restart Shell Cntl-F6rTN)r^r)r3rfrrrrLszPyShell.restart_shellc Csl|jyttj}Wnd}YnX|jj||jjdd|j|j j dS)NrSrbzend-1c) rrurr]rr!r7rset_line_and_columnrAZ reset_undo)r3rrrrrs   zPyShell.showpromptcCsz|jjdd}|jr.|jj||jjddkrY|jjdd|jjdd|jdS)Nrzend-1czend-2crm)r7rkrTZstorerbrr)r3r rrrrs zPyShell.resetoutputc Cst|trst|rst|dkrsx't|D]\}}|dkr:Pq:Wtd|||ddyB|jjddtj |||d}|jjddWn YnX|j rd|_ t st |S) Nu￿zUCS-2rz%Non-BMP character not supported in Tkrrightrr) rrurmax enumerateUnicodeEncodeErrorr7rr r!r0r/r)r3rrrr?countrrrr!s"-    z PyShell.writec sFy |jjdddrdSWntk r8dSYnXtjS)Nz sel.firstrrdisabled)r7rrsuperrF)r3) __class__rrrFs   zPyShell.rmenu_check_cutcs)|jjdddrdStjS)Nrbrrr)r7rrrL)r3)rrrrLszPyShell.rmenu_check_paste)rr1)r2r3)r`r4)r5r6)r7r8)r9r:)4rrrrr`rr rr rBZidlelib.IdleHistoryr;r6rUrgrr0rlrrhrWrXrIrYrJrZr[r-rrrr_rarerrrmrnrGrHrFrErqrrr(rKrLrrr!rFrLrr)rrrAsd  :                ?   rc@sOeZdZdddZeddZeddZdd ZdS) PseudoFileNcCs||_||_||_dS)N)r<r _encoding)r3r<rrQrrrr6"s  zPseudoFile.__init__cCs|jS)N)r)r3rrrrQ'szPseudoFile.encodingcCs d|jS)Nz<%s>)r)r3rrrname+szPseudoFile.namecCsdS)NTr)r3rrrrn/szPseudoFile.isatty)rrrr6propertyrQrrnrrrrr s rc@s(eZdZddZddZdS)rRcCsdS)NTr)r3rrrwritable5szPseudoOutputFile.writablecCst|jrtdt|tk r^t|tsOtdt|jtj|}|jj ||j S)Nzwrite to closed filezmust be str, not ) closedr[rrur TypeErrorr__str__r<r!r)r3rrrrr!8s  zPseudoOutputFile.writeN)rrrrr!rrrrrR3s  rRc@sUeZdZdddZddZd ddZdd d Zd d ZdS)rPNcCs#tj||||d|_dS)NrS)rr6 _line_buffer)r3r<rrQrrrr6EszPseudoInputFile.__init__cCsdS)NTr)r3rrrreadableIszPseudoInputFile.readablercCs|jrtd|dkr*d}n(t|tsRtdt|j|j}d|_|dkrx|jj }|sP||7}qsWn\x6t ||kr|jj }|sP||7}qW||d|_|d|}|S)Nzread from closed filerzmust be int, not rSrr)) rr[rrdrrrrr<rmr)r3sizeresultrrrrrLs,       zPseudoInputFile.readcCs|jrtd|dkr*d}n(t|tsRtdt|j|jpg|jj }|dkrt |}|j dd|}|dkr|d}||d|_|d|S)Nzread from closed filerzmust be int, not rrmr)) rr[rrdrrrrr<rmrfind)r3rrZeolrrrrmcs        zPseudoInputFile.readlinecCs|jjdS)N)r<r)r3rrrrsszPseudoInputFile.closer)r))rrrr6rrrmrrrrrrPCs  rPcCsG|jdkrCx1dD])}|j|dd|j|dqWdS) z6Make paste replace selection on x11. See issue #5124.Zx11TextEntrySpinboxz <>z%catch {%W delete sel.first sel.last} N)rrr)Z_windowingsystemZ bind_class)rwclsrrr fix_x11_pastews ra 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 (DEPRECATED, 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]. cstddad}d}d}d}d}d}y)tjtjddd\}}WnRtjk r}z/td|tfdtjtj dWYdd}~XnXx*|D]"\} } | dkr| }d}| d krd}d}| d krd}| d kr-tj j ttj | d kr?d}| d krdtddtjda| dkr| }t j j|rntd|tj d}| dkrd}d}| dkr| t_d}qW|r |ddkr tjj}d}x=tttj D]&} t j jtj | tj | rtj?qzWtj@tddS)4NTFrz c:deihnr:st:z Error: %s %srrz-cz-dz-ez-hz-iz-nz: Warning: running IDLE without a subprocess is deprecated.z-rzNo script file: z-sz-tr-rSrrzeditor-on-startuprrZ classNameZIdleZIconsZWindowszidle.icorg!@g333333!@z.pngz.gifcs/g|]%}tjjd|fqS)z idle_%d%s)r=r>r?)rr)exticondirrrrs zmain.. 0cSsg|]}td|qS)r)Z PhotoImage)riconfilerrrrs rzz z<>Z IDLESTARTUPZ PYTHONSTARTUPzbif 1: import sys as _sys _sys.argv = %r del _sys z print('%s'))rrr)Ar(r/getoptrargvrr usage_msgrexitrr!r=r>r~rr`rrrrabspathr\dirnamerbgetcwdrrrCrwrDr?__file__rZ wm_iconbitmapZ TkVersionZ wm_iconphotor rrr;rZsetupAppZisAquaTkZ unbind_classrqrgnewr<dictrlowerr]r[environrkr^r rrrZtkVersionWarningZ inversedictrjZdestroy)Z enable_shellZ enable_editr`cmdZscriptZstartupZoptsrCr oarZpathxrdirZ edit_startrZ iconfilesZiconsr<Ztkversionwarningr)rrrrs )                 $       !               rrF)Frr=Zos.pathrxrrrrrrrArrrrdrrrf ImportErrorrrrZtkinter.messageboxZ messageboxrxZidlelib.EditorWindowrr Zidlelib.FileListr Zidlelib.ColorDelegatorr Zidlelib.UndoDelegatorr Zidlelib.OutputWindowr Zidlelib.configHandlerrrrrrrrrr r&rr$r%r( checkcacher0r1rrrZ RPCClientrrr TextIOBaserrRrPrrrrrrrrrsz                   4 ?