
    Je                     r   d Z ddlZddlZddlZddlZddlmZ ddlZddl	Z	ddl
Z
ddlmZ ddlmZmZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZmZmZmZ ddlm Z  dd	l!m"Z"m#Z#m$Z$ dd
l%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 dZ5 G d de4e0e2      Z6 G d de1e6e/      Z7 G d de6      Z8y)z(Shell widgets: base, python and terminal    N)getsavefilename)PropertyQtQTimerSignalSlot)QKeySequenceQTextCharFormatQTextCursor)QApplicationQMenu)_get_conf_pathget_debug_levelSTDERR)CONF)	is_stringis_text_stringto_text_string)encoding)ima)add_actionscreate_action
keybindingrestore_keyevent)GetHelpMixinSaveHistoryMixinTracebackLinksMixinBrowseHistoryMixin)ConsoleBaseWidgeti  c                      e Zd ZdZ ee      Z e       Z ee      Z	 eee      Z
	 	 	 	 d3dZd Zd Zd Zd Zd Zd	 Z e       d
        Zd Zd Z edee      Zd Zd Z e       d        Zd Z e       d        Z e       d        Z e       d        Zd Zd Z d Z! e       d        Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z.d% Z/d& Z0d' Z1d( Z2d) Z3d* Z4d4d+Z5d5d,Z6d4d-Z7d. Z8d/ Z9d0 Z:d1 Z;d2 Z<y)6ShellBaseWidgetz
    Shell base widget
    Nc
                 (   t        j                  | |       t        j                  | |       t        j                  |        d| _        d| _        t        |      sJ | j                         | _        t        j                  ddt        d            | _        d| _        | j                          || _        g | _        |r| j                   j#                  |       d| _        t'        |       | _        | j(                  j+                  d       | j(                  j,                  j/                  | j0                         | j3                          | j5                  t        j                  dd             | j6                  j8                  j;                          y)z6
        parent : specifies the parent widget
        NTmainhistorylog_filenamezhistory.logg        zcursor/width)r    __init__r   r   current_prompt_posnew_input_liner   load_historyhistoryr   getr   r%   menusetup_context_menuprofile_ShellBaseWidget__bufferappend_ShellBaseWidget__timestampr   _ShellBaseWidget__flushtimersetSingleShottimeoutconnectflushsetFocussetCursorWidthcompletion_widgetcurrentRowChanged
disconnect)
selfparenthistory_filenamer.   initial_messagedefault_foreground_colorerror_foreground_colortraceback_foreground_colorprompt_foreground_colorbackground_colors
             F/usr/lib/python3/dist-packages/spyder/plugins/console/widgets/shell.pyr&   zShellBaseWidget.__init__:   sI    	""40!!$(89##D) #'" .///((* $(88F4I,9-,H$J  	!  MM  1"4L''-!!))$**5 	 	DHHV^<= 	00;;=    c                 8    | j                  |rd       yd       y)zEnable/disable wrap mode	characterN)set_wrap_mode)r<   enables     rE   toggle_wrap_modez ShellBaseWidget.toggle_wrap_modek   s    &;;d;rF   c                 X   | j                  |       | j                  |       | j                         }|j                  t        j
                         t               }|j                  |j                                |j                  |j                                |j                  |       y)zSet shell styles fontN)setFontset_pythonshell_font
textCursorselectr   Documentr
   setFontFamilyfamilysetFontPointSize	pointSizemergeCharFormat)r<   fontcursor
charformats       rE   set_fontzShellBaseWidget.set_fonto   sy    T!!$'"k**+$&
  /##DNN$45z*rF   c                    t        |       | _        t        | t        d      t	        d      t        j                  d      | j                        | _        t        | t        d      t	        d      t        j                  d      | j                        | _
        t        | t        d      t	        d      t        j                  d      | j                        }t        | t        d      t        j                  d	      t        d
      | j                        }t        | t        d      t	        d      t        j                  d      | j                        | _        t        | t        d      t	        d      t        j                  d      | j                        }t!        | j                  | j                  | j                  || j                  d|d|f       y)zSetup shell context menuCuteditcut)shortcuticon	triggeredCopyeditcopyPaste	editpastezSave history log...filesavezESave current history log (i.e. all inputs and outputs) in a text filer_   tipr`   Delete
editdeletez
Select All	SelectAll	selectallN)r   r,   r   r   r   r   r_   cut
cut_actioncopycopy_actionpastesave_historylogdeletedelete_action	selectAllr   )r<   paste_actionsave_actionselectall_actions       rE   r-   z"ShellBaseWidget.setup_context_menu|   ss   $K	'ah1;E1B-0XXi-@26((< )qy2<V2D.1hhz.B3799> %T1W:.8.A*-((;*?/3zz; $D!,A*B),*)=() +O )P.2.B.B	D
 +48-7-A),,)?.2kk; )q-7-D),+)>.2nn> 	DII1A1A ,d.@.@$ 0$ E 	GrF   c                 8   | j                         }| j                  j                  |       | j                  j                  |       | j                  j                  |       | j
                  j                  |j                                |j                          y)zReimplement Qt methodN)	has_selected_textro   
setEnabledrm   rs   r,   popup	globalPosacceptr<   eventstates      rE   contextMenuEventz ShellBaseWidget.contextMenuEvent   sj    &&(##E*""5)%%e,		)*rF   c                 &    | j                  dd      S )NrX   eof)get_textr<   s    rE   get_current_line_from_cursorz,ShellBaseWidget.get_current_line_from_cursor   s    }}Xu--rF   c                     | j                  d      \  }}| j                  ||}}n| j                  \  }}| j                  ||||       y)z6Select current line (without selecting console prompt)r   N)get_positionr'   setSelection)r<   lineindexplinepindexs        rE   _select_inputzShellBaseWidget._select_input   sN    ''.e""* %6E 33ME6%u5rF   c                 $    | j                          y)ze
        Clear terminal window
        Child classes reimplement this method to write prompt
        N)clearr   s    rE   clear_terminalzShellBaseWidget.clear_terminal   s     	

rF   c                     | j                   | j                  | j                   d|       n| j                  |       | j                  d       y)zSet input bufferNeolr   )r'   replace_textinsertset_cursor_positionr<   texts     rE   _set_input_bufferz!ShellBaseWidget._set_input_buffer   s@    "".d55udCKK  'rF   c                     d}| j                   <| j                  | j                   d      }|j                  t        j                  d      }|S )zReturn input buffer r   
)r'   r   replaceoslinesep)r<   input_buffers     rE   _get_input_bufferz!ShellBaseWidget._get_input_buffer   sE    "".==)@)@%HL'//

DALrF   QStringc                     | j                         d   dk7  r| j                  d       | j                  |d       | j                  d      | _        | j	                          d| _        y)	zH
        Print a new prompt and save its (line, index) position
           r   r   T)promptrX   FN)get_cursor_line_columnwriter   r'   ensureCursorVisibler(   )r<   r   s     rE   
new_promptzShellBaseWidget.new_prompt   s]     &&(+q0JJt

6$
'"&"3"3H"=  "#rF   c                 v    | j                   | j                  d       y| j                  | j                          y)zf
        Check if selected text is r/w,
        otherwise remove read-only parts of selection
        Nr   )r'   r   truncate_selectionr   s    rE   check_selectionzShellBaseWidget.check_selection   s2    
 ""*$$U+##D$;$;<rF   c                     | j                         rt        j                  |        yt        j                  dk(  s| j                          yy)z/Copy text to clipboard... or keyboard interruptdarwinN)ry   r    rn   sysplatform	interruptr   s    rE   rn   zShellBaseWidget.copy   s9     !!#""4()NN *rF   c                 8    | j                   j                          y)zKeyboard interruptN)sig_keyboard_interruptemitr   s    rE   r   zShellBaseWidget.interrupt   s    ##((*rF   c                 p    | j                          | j                         rt        j                  |        yy)zCut textN)r   ry   r    rl   r   s    rE   rl   zShellBaseWidget.cut   s/     	!!#!!$' $rF   c                 p    | j                          | j                         rt        j                  |        yy)zRemove selected textN)r   ry   r    remove_selected_textr   s    rE   rr   zShellBaseWidget.delete   s/     	!!#2248 $rF   c           	         t        d      }| j                  j                  d       t        | || j                  dt        d      z        \  }}| j                  j                  d       |rbt        j                  |      }	 t        j                  t        | j                               |       || _        t        j                  dd|       yy# t        $ r Y yw xY w)	z.Save current history log (all text in console)zSave history logFz
%s (*.log)zHistory logsTr$   r%   N)r   sig_redirect_stdio_requestedr   r   r%   ospnormpathr   r   r   get_text_with_eolr   setEnvironmentError)r<   titlefilename
_selfilters       rE   rq   zShellBaseWidget.save_historylog  s     $%))..u5.tU,,lQ~=N.N P*))..t4||H-H~d.D.D.FG')+3(!6A  $ s   AC 	CCc                 &    | j                  |       y)on_enterN)execute_commandr<   commands     rE   r   zShellBaseWidget.on_enter  s    W%rF   c                 j    | j                   j                  |       | j                  |       d| _        y )NT)executer   add_to_historyr(   r   s     rE   r   zShellBaseWidget.execute_command  s*    '"G$"rF   c                 `    | j                  d       | j                  d      | _        d| _        y)zOn new input liner   rX   FN)r   r   r'   r(   r   s    rE   on_new_linezShellBaseWidget.on_new_line  s+      '"&"3"3H"=#rF   c                 f    | j                   r| j                          t        j                  |        y)3Reimplemented slot to handle multiline paste actionN)r(   r   r    rp   r   s    rE   rp   zShellBaseWidget.paste$  s'     %rF   c                 J    | j                  |      ry| j                  |       y)z
        Reimplement Qt Method
        Basic keypress event handler
        (reimplemented in InternalShell to add more sophisticated features)
        N)preprocess_keyeventpostprocess_keyeventr<   r   s     rE   keyPressEventzShellBaseWidget.keyPressEvent+  s#     ##E*!!%(rF   c                    |j                         t        j                  z  }|j                         t        j                  z  }|j	                         t        j
                  k(  r{t        j                  t        j                  z  |j                         z  rI|r$t        j                  dk(  r| j                          n|r| j                          |j                          y| j                  rwt        |j                               sN|j	                         t        j                  t        j                  t        j                   t        j"                  fv r| j%                          y)zUPre-process keypress event:
        return True if event is accepted, false otherwiser   TF)	modifiersr   ControlModifierMetaModifierkeyKey_Cr   r   r   rn   r}   r(   lenr   Key_UpKey_DownKey_Left	Key_Rightr   )r<   r   ctrlmetas       rE   r   z#ShellBaseWidget.preprocess_keyevent6  s      2#5#55 2??299;"(("OOb000EOO4EE0 		LLNS%6%))+IIr{{BKK>;?rF   c                    t        |      \  }}}}}t        |      r<| j                         r| j                          | j	                  | j
                  d       | j                  d      }|t        j                  t        j                  fv rC| j                         r| j                          y| j                  | j                         d       y|t        j                  k(  r%|s#|s!| j                  | j!                                 y|t        j"                  k(  rS| j                         r!| j                          | j%                          y| j                         r| j'                          yy|t        j(                  k(  r| j+                  |       y|t        j,                  k(  r| j/                          y|t        j0                  k(  r|r| j3                          y|t        j4                  k(  r9| j
                  |k(  ry|r| j6                  n| j8                  } ||rdndd	       y|t        j:                  k(  r:| j=                         ry|r| j6                  n| j8                  } ||rdndd
	       y|t        j>                  k(  s|t        j@                  k(  r|r| jC                  ||       y|t        jD                  k(  s|t        jF                  k(  r|r| jI                  ||       y|t        j@                  k(  r}| j                         s| jK                  d       | jM                  |      d   }| jM                  | j
                        d   }	||	kD  r| jO                  |       y| jQ                  d       y|t        jF                  k(  rs| j                         s| jK                  d       | jM                  |      d   }| jM                  d      d   }
||
k  r| jS                  |       y| jQ                  d       y|t        jT                  t        jV                  fv rtY        jZ                  | |       y|t        j\                  k(  r|r| j_                          y|t        j\                  k(  r| ja                          y|t        jb                  k(  r|r| je                          y|t        jf                  k(  r|r| ji                          y|t        jj                  k(  r|r| jm                          y|t        jn                  k(  r|r| jq                          y|t        jr                  k(  r|r| ju                          y|t        jv                  k(  r|r| jy                          y|t        jz                  k(  r"| j                         s| j}                  |       y|t        j~                  k(  r"| j                         s| j                  |       y|t        j                  k(  r"| j                         s| j                  |       yt        |      r:| j                         s*d| _D        | j                  |       | j                  |       ytY        jZ                  | |       y)zcPost-process keypress event:
        in InternalShell, this is method is called when shell is readyr   rX   Tat_endNwordrH   left)	directionrightr   )backwardr   F)Fr   r   ry   r   restrict_cursor_positionr'   r   r   
Key_Return	Key_Enteris_cursor_on_last_line
_key_enterinsert_textget_selected_text
Key_InsertsetOverwriteModeoverwriteMode
Key_Deleter   stdkey_clearKey_Backspace_key_backspaceKey_Tab_key_tab	Key_Space_key_ctrl_spacer   extend_selection_to_nextmove_cursor_to_nextr   is_cursor_at_endKey_Homer   	_key_homeKey_Endr   _key_endr   get_coordinates	stdkey_upbrowse_historystdkey_down
Key_PageUpKey_PageDownr    r   
Key_Escape
clear_line_key_escapeKey_Lr   Key_Vrp   Key_Xrl   Key_ZundoKey_YredoKey_Art   Key_Question_key_questionKey_ParenLeft_key_parenleft
Key_Period_key_period
isReadOnlyhist_wholeline
_key_other)r<   r   r   r   r   shiftcursor_positionmethody_cursory_prompty_ends              rE   r   z$ShellBaseWidget.postprocess_keyeventM  s    )9(?%tS$ t9%%'$$&))$*A*A5I++H52==",,//**,!   !7!7!9$ GBMM!%!!d&8&8&:":;BMM!%%'$$&))+,,.!!# / B$$$0BJJMMOBLL T  "BKK&&/96;T2222 T6{fEBLL $$&6;T2222 T6{gFR[[ sbii'7TNN5$'RZZcR[[&8dMM%&BII..0((/++O<Q?H++D,C,CDQGH("u%##T#2BKK..0((/++O<Q?H((/2E%  '##U#3R]]BOO44 ++D%8BMM!eOOBMM!BHH_!BHH_JJLBHH_HHJBHH_IIKBHH_IIKBHH_NNBOO#D,B,B,Dt$B$$$T-C-C-E%BMM!$*@*@*BT"Yt0"'DT"OOD! ++D%8rF   c                     | j                   }| j                  dd       | j                  |       | j                          y )Nr   Tr   )r   r   r   r6   r   s     rE   r   zShellBaseWidget._key_enter  s5    ##d+g

rF   c                     t         NNotImplementedErrorr   s     rE   r  zShellBaseWidget._key_other      !!rF   c                     t         r#  r$  r<   r  s     rE   r   zShellBaseWidget._key_backspace  r&  rF   c                     t         r#  r$  r   s    rE   r   zShellBaseWidget._key_tab  r&  rF   c                     t         r#  r$  r   s    rE   r   zShellBaseWidget._key_ctrl_space  r&  rF   c                 `    | j                         r| j                  ||| j                         y y r#  )r   stdkey_homer'   r<   r  r   s      rE   r   zShellBaseWidget._key_home  s+    &&(UD$*A*AB )rF   c                 J    | j                         r| j                  ||       y y r#  )r   
stdkey_endr-  s      rE   r   zShellBaseWidget._key_end  s!    &&(OOE4( )rF   c                     t         r#  r$  r   s    rE   _key_pageupzShellBaseWidget._key_pageup  r&  rF   c                     t         r#  r$  r   s    rE   _key_pagedownzShellBaseWidget._key_pagedown  r&  rF   c                     t         r#  r$  r   s    rE   r	  zShellBaseWidget._key_escape  r&  rF   c                     t         r#  r$  r   s     rE   r  zShellBaseWidget._key_question  r&  rF   c                     t         r#  r$  r   s     rE   r  zShellBaseWidget._key_parenleft  r&  rF   c                     t         r#  r$  r   s     rE   r  zShellBaseWidget._key_period  r&  rF   c                    t        j                  | j                        rj	 t        j                  | j                        \  }}|D cg c]  }|j                  dd       }}|d   | j                  d   k7  r| j                  d   |d<   n| j                  }|D cg c]  }|r|j                  d      s| }}t        |      t        k\  rE|d= |d   j                  d      r|d= |d   j                  d      r|d= t        |      t        k\  rE	 t        j                  || j                         |S c c}w # t        $ r | j                  }Y w xY wc c}w # t        $ r Y |S w xY w)z3Load history from a .py file in user home directoryr   r   r   #r   )r   isfiler>   r   	readlinesr   INITHISTORY	Exception
startswithr   	MAX_LINES
writelinesr   )r<   
rawhistoryr   r   r*   s        rE   r)   zShellBaseWidget.load_history  sl   ::d++,. ( 2 243H3H I
AAKLdll44L
La=D$4$4Q$77$($4$4Q$7JqM ))J$. 9D4??3#7  9 9 'li'
Q-**3/qM Q-**3/1	 'li'	
D,A,AB / M  .!--
.9   		s;   &D7 D2 )D7 E E 2D7 7EE	E$#E$c                     | j                          | j                  |dd       t               rt        j                  |       yy)zSimulate stderrT)r6   errorN)r6   r   r   r   r   s     rE   write_errorzShellBaseWidget.write_error  s4    



4t4
0LL rF   c                 p   |r| j                          t        |      st        |      }| j                  j	                  |       t        j
                         }|s|r| j                  ||       y|| j                  z
  dkD  r5| j                  |       || _        | j                  j                  d       yy)zSimulate stdout and stderr)rC  r   g?)rC  2   N)	r6   r   r   r/   r0   timer1   r2   start)r<   r   r6   rC  r   tss         rE   r   zShellBaseWidget.write  s    JJL!$'DT"YY[FJJU6J2$"""T)JJUJ#!D##B'	 *rF   c                 T   	 dj                  | j                        }g | _        | j                  |d||       | j                          d| _        y# t        $ rM dj                  | j                        }	 |j                  t	        j
                         d         }n#  Y nxY wY w xY w)z#Flush buffer, write text to consoler   rF   r   T)r   rC  r   N)	joinr/   	TypeErrordecodelocalegetdefaultlocaler   updater(   )r<   rC  r   r   s       rE   r6   zShellBaseWidget.flush,  s    	774==)D d%G 	 #'  	88DMM*D{{6#:#:#<Q#?@	s)   A $B'6&BB'B!B'&B'c                 \    |r| j                  |||       yt        j                  | |       y)zf
        Insert text at the current cursor position
        or at the end of the command line
        N)append_text_to_shellr    r   )r<   r   r   rC  r   s        rE   r   zShellBaseWidget.insert_textH  s+    
 %%dE6: ))$5rF   c                 4    |ryt        j                  | |      S )zE
        Reimplemented to stop Tab moving to the next window
        F)r    focusNextPrevChild)r<   nexts     rE   rT  z"ShellBaseWidget.focusNextPrevChildV  s      33D$??rF   c                 `    |j                  |j                         j                  d             y)zDrag and Drop - Enter event
text/plainN)setAcceptedmimeData	hasFormatr   s     rE   dragEnterEventzShellBaseWidget.dragEnterEvent`  s"    %..*44\BCrF   c                     |j                         j                  d      r0|j                  t        j                         |j                          y|j                          y)zDrag and Drop - Move eventrW  N)rY  rZ  setDropActionr   
MoveActionr}   ignorer   s     rE   dragMoveEventzShellBaseWidget.dragMoveEventd  s;    NN&&|4.LLNLLNrF   c                    |j                         j                  d      rt        |j                         j                               }| j                  r| j                          | j                  |d       | j                          |j                  t        j                         |j                          y|j                          y)zDrag and Drop - Drop eventrW  Tr   N)rY  rZ  r   r   r(   r   r   r7   r]  r   r^  r}   r_  )r<   r   r   s      rE   	dropEventzShellBaseWidget.dropEventl  s    NN&&|4!%.."2"7"7"9:D""  "T$/MMO.LLNLLNrF   c                     t         )Drop path listr$  )r<   pathlists     rE   drop_pathlistzShellBaseWidget.drop_pathlisty      !!rF   )FNNNNNN)FFF)FF)=__name__
__module____qualname____doc__r   boolr   r   strr   sig_append_to_history_requestedr&   rK   rZ   r-   r   r   r   r   r   r   r   r   r   r   r   rn   r   rl   rr   rq   r   r   r   rp   r   r   r   r   r  r   r   r   r   r   r1  r3  r	  r  r  r  r)   rD  r   r6   r   rT  r[  r`  rb  rf   rF   rE   r"   r"   /   s    $*$< #XSkG&,S#&6#9>@DIM@D/>b<	+G@.6 
V ( I'8:KLL
$= 
V + 
V( ( 
V9 9 
V $&#
$ 
V& &	).9F
""""C)""""""
D("#8
6@D"rF   r"   c                   b   e Zd ZdZeZddgZej                  dz  d e	j                         dZ ee      Z ee      Z	 d(dZd	 Zd
 Zd Zd Z e       d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d  Z*d! Z+d)d"Z,d# Z-d*d$Z.d+d%Z/d& Z0d' Z1y),PythonShellWidgetzPython shell widgetz# -*- coding: utf-8 -*-z+# *** Spyder Python Console History Log ***   z##---()---Nc                     t         j                  | ||||       t        j                  |        t        j                  |        | j	                         | _        y )N)r.   r?   )r"   r&   r   r   create_shortcuts	shortcuts)r<   r=   r>   r.   r?   s        rE   r&   zPythonShellWidget.__init__  sS      v/?)01@ 	! 	B 	$$T*d# ..0rF   c                 n   t        j                  | j                  dd|       }t        j                  | j                  dd|       }t        j                  | j                  dd|       }t        j                  | j
                  dd|       }t        j                  | j                  dd|       }|||||gS )	Narray_builderzenter array inline)contextnamer=   zenter array tableConsolezInspect current object
Clear lineClear shell)r   config_shortcutenter_array_inlineenter_array_tableinspect_current_objectr  r   )r<   array_inlinearray_table	inspectscclear_line_scclear_shell_scs         rE   ru  z"PythonShellWidget.create_shortcuts  s    ++###%	
 **""#$	
 (('')		
 ,,OO	
 --	
 <m  	 rF   c                 T    | j                   D cg c]  }|j                   c}S c c}w )z
        Returns shortcut data, a list of tuples (shortcut, text, default)
        shortcut (QShortcut or QAction instance)
        text (string): action/shortcut description
        default (string): default key sequence
        )rv  data)r<   scs     rE   get_shortcut_dataz#PythonShellWidget.get_shortcut_data  s      #'..1B111s   %c           
      \   t         j                  |        t        | t        d      t	        j
                  d      | j                        | _        t        | t        d      t        t        j                  dd            t	        j
                  d      t        d      | j                        }t        | t        d      t        t        j                  dd            t	        j
                  d	      t        d
      | j                        }t        | j                  | j                  ||f       y)#Reimplements ShellBaseWidget methodzCopy without promptscopywop)r_   r`   r|  consoleri   rf   r}  	editclearz$Clear shell contents ('cls' command)N)r"   r-   r   r   r   r_   copy_without_promptscopy_without_prompts_actionr	   r   get_shortcutr  r   r   r,   )r<   clear_line_actionclear_actions      rE   r-   z$PythonShellWidget.setup_context_menu  s    **40+8$%)$//	,1( *lO**9lCD,',oo' %m**9mDE+&89))+ 	DII @ @%| 5 	6rF   c                     | j                         }| j                  j                  |       t        j	                  | |       y)r  N)ry   r  rz   r"   r   r~   s      rE   r   z"PythonShellWidget.contextMenuEvent  s4    &&(((33E:((u5rF   c                 b   | j                         }|j                  t        j                        }t	        |      D ]0  \  }}|j                  d      s|j                  d      s)|dd ||<   2 t        j                  j                  |      }t        j                         j                  |       y)z&Copy text to clipboard without promptsz>>> z...    N)
r   splitr   r   	enumerater>  rK  r   	clipboardsetText)r<   r   linesr   r   s        rE   r  z&PythonShellWidget.copy_without_prompts  s     %%'

2::&$U+ 	(KE4v&$//&*A#ABxe	( zzu% ((.rF   c                 0    t         j                  | |       y)zProcess keypress eventN)r"   r   r   s     rE   r   z&PythonShellWidget.postprocess_keyevent  s    ,,T59rF   c                 P    | j                         r| xj                  |z  c_        yyz1 character keyN)is_completion_widget_visiblecompletion_textr   s     rE   r  zPythonShellWidget._key_other  s$    ,,.  D(  /rF   c                    | j                         r!| j                          | j                          y| j                  |k(  ry| j	                         r6| j                          | j                         r| j                  dd | _        yyy)Action for Backspace keyN)ry   r   r   r'   r   stdkey_backspacer  r  r(  s     rE   r   z PythonShellWidget._key_backspace  s|    !!#  "%%'$$7((*!!#002 (,';';CR'@$ 3 +rF   c                     | j                         rC| j                         j                          }|r| j                          y| j	                          yyzAction for TAB keyN)r   get_current_line_to_cursorstrip
stdkey_tabshow_code_completion)r<   
empty_lines     rE   r   zPythonShellWidget._key_tab  sF    &&(!<<>DDFFJ!))+ )rF   c                 F    | j                         s| j                          yyzAction for Ctrl+SpaceN)r  r  r   s    rE   r   z!PythonShellWidget._key_ctrl_space  s    002%%' 3rF   c                      y)zAction for PageUp keyNro  r   s    rE   r1  zPythonShellWidget._key_pageup$      rF   c                      y)zAction for PageDown keyNro  r   s    rE   r3  zPythonShellWidget._key_pagedown(  r  rF   c                 F    | j                         r| j                          yyzAction for ESCAPE keyN)r  hide_completion_widgetr   s    rE   r	  zPythonShellWidget._key_escape,  s    ,,.'') /rF   c                     | j                         r3| j                         }|r!|j                         s| j                  |       | j	                  |       | j                         r| xj                  dz  c_        yy)Action for '?'?N)r  get_last_objisdigitshow_object_infor   r  r  r<   r   last_objs      rE   r  zPythonShellWidget._key_question1  sh    **,((*H 0 0 2%%h/,,.  C'  /rF   c                     | j                          | j                         rG| j                         }|r5|j                         s%| j	                  |       | j                  |d       y| j	                  |       y)Action for '('T)callN)r  r  r  r  r   r  r  s      rE   r  z PythonShellWidget._key_parenleft<  sh    ##%**,((*H 0 0 2  &%%hT%:rF   c                     | j                  |       | j                  r5| j                         }|r"|j                         s| j	                          yyyyzAction for '.'N)r   codecompletion_autor  r  r  r  s      rE   r  zPythonShellWidget._key_periodG  sM    ##((*H 0 0 2))+ !3x $rF   c                    t        t        j                         j                               }t	        |j                               dkD  r| j                  r| j                          | j                          | j                         }| j                         |z   |z   }| j                          | j                  |       | j                  t	        |              yt        j                  |        y)r   r   N)r   r   r  r   r   
splitlinesr(   r   r   r   r  r  execute_linesmove_cursorr"   rp   )r<   r   endr  s       rE   rp   zPythonShellWidget.pasteR  s    l446;;=>t !A%""  "%%'335C335<sBEOOu%c#hY' !!$'rF   c                     t         )zReturn dir(object)r$  r<   objtxts     rE   get_dirzPythonShellWidget.get_dirf  rg  rF   c                     t         )zReturn shell globals() keysr$  r   s    rE   get_globals_keysz"PythonShellWidget.get_globals_keysj  rg  rF   c                     t         )z'Return shell current directory list dirr$  r   s    rE   get_cdlistdirzPythonShellWidget.get_cdlistdirn  rg  rF   c                     t         )zIs object callable?r$  r  s     rE   
iscallablezPythonShellWidget.iscallabler  rg  rF   c                     t         )zGet func/method argument listr$  r  s     rE   get_arglistzPythonShellWidget.get_arglistv  rg  rF   c                     t         )zGet object __doc__r$  r  s     rE   
get__doc__zPythonShellWidget.get__doc__z  rg  rF   c                     t         )z#Get object documentation dictionaryr$  r  s     rE   get_doczPythonShellWidget.get_doc~  rg  rF   c                     t         )zGet object sourcer$  r  s     rE   
get_sourcezPythonShellWidget.get_source  rg  rF   c                     t         )z Return True if object is definedr$  )r<   r  force_imports      rE   
is_definedzPythonShellWidget.is_defined  rg  rF   c                 @    | j                   j                  |dd       y)zShow completion widgetFN)	automaticposition)r9   	show_list)r<   textlists     rE   show_completion_widgetz(PythonShellWidget.show_completion_widget  s"    (( 	) 	6rF   c                 <    | j                   j                  |       y)zHide completion widget)focus_to_parentN)r9   hide)r<   r  s     rE   r  z(PythonShellWidget.hide_completion_widget  s    ##O#DrF   c           	         |syt        |d   t              s|D cg c]  }|df }}t        |      dk(  r|d   d   |k(  ry|| _        t	        |D cg c]  \  }}|j                  d      r||f c}}      }t        t	        |      |z
  d       }|t        |d       z  }| j                  |       yc c}w c c}}w )	z Display the possible completionsNr   r   r   r   c                 2    t         j                  | d         S Nr   rm  lowerxs    rE   <lambda>z8PythonShellWidget.show_completion_list.<locals>.<lambda>  s    399QqT? rF   )r   c                 2    t         j                  | d         S r  r  r  s    rE   r  z8PythonShellWidget.show_completion_list.<locals>.<lambda>  s    		!A$ rF   )
isinstancetupler   r  r   r>  sortedr  )r<   completionsr  ccompt
underscores          rE   show_completion_listz&PythonShellWidget.show_completion_list  s    +a.%0,78qAr78K8{q [^A%6/%I. [ 3	q!__S1  ) 3 4
 S-
:!:<vj.GHH##K0 93s   B7B<
c                 d   t        | j                               }| j                         }|sy| j                  |      }|r%|r#|j	                  d      r| j                  |       y|j	                  d      s}|r{t        j                  d|      ret        t              | j                         z   t        j                  z   }|D ].  }|j                  |      s||k7  s| j                  ||        y y||}|j                  d      }|dk7  rH|t        |      dz
  k(  rd}n||dz   d }|d| }| j                  |      }|| j                  ||       yt!        |j                  d      |j                  d	      g      }	|	dk7  r,| j#                         }|r| j                  |||	dz   d        yy)
z3Display a completion list based on the current lineN.z[a-zA-Z_0-9]*$)r  r  r   r   '")r   r  r  r  endswithr  rematchdirbuiltinsr  keywordkwlistr>  rfindr   maxr  )
r<   r   r  obj_dirb_k_gobjnamedot_posr  r  q_poss
             rE   r  z&PythonShellWidget.show_code_completion  s    d==?@$$&,,x(DMM#$6%%g. }}S!hxx)84M$"7"7"99'..HE  %%h/Gx4G--eX-N
  H..%b=#h-/)"$"*719:"6#HW-,,x0K&))+:I * K TZZ_djjo67B;,,.K))+:>uQwx. * J rF   c                    |r{|D cg c]  }d|z  	 }}t        |      dk(  r|d   }nddj                  |      z   dz   }| j                  r| j                          | j	                  |       | j                          yyc c}w )rd  zr'%s'r   r   [z, ]Nr   rK  r(   r   r   r7   r<   re  pathfilesr   s        rE   rf  zPythonShellWidget.drop_pathlist  s|    089Wt^9E95zQQxTYYu--3""  "T"MMO 9s   A?)FNF)T)r   )2rh  ri  rj  rk  r"   QT_CLASSr<  r   r   rG  ctime	SEPARATORr   rm  sig_go_to_error_requesteddictsig_help_requestedr&   ru  r  r-   r   r   r  r   r  r   r   r   r1  r3  r	  r  r  r  rp   r  r  r  r  r  r  r  r  r  r  r  r  r  rf  ro  rF   rE   rq  rq    s   H,@CK$&JJqL*$**,?I
 !'s  1 @2686 
V/ /:)
A,(
*
	(	,(("""""""""6
E1&/drF   rq  c                       e Zd ZdZej
                  dk(  rdndZdez  egZej                  dz  ed e	j                         dZ ee      Zdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)TerminalWidgetz
    Terminal widget
    ntremr9  z&%s *** Spyder Terminal History Log ***rr  z ---(rs  c                 4    t         j                  | |||       y r#  )r"   r&   )r<   r=   r>   r.   s       rE   r&   zTerminalWidget.__init__  s      v/?IrF   c                      yr  ro  r   s     rE   r  zTerminalWidget._key_other  r  rF   c                     | j                         r!| j                          | j                          y| j                  |k(  ry| j	                         r| j                          yy)r  N)ry   r   r   r'   r   r  r(  s     rE   r   zTerminalWidget._key_backspace  sT    !!#  "%%'$$7((*!!# +rF   c                 F    | j                         r| j                          yyr  )r   r  r   s    rE   r   zTerminalWidget._key_tab  s    &&(OO )rF   c                      yr  ro  r   s    rE   r   zTerminalWidget._key_ctrl_space
  r  rF   c                 $    | j                          yr  )r  r   s    rE   r	  zTerminalWidget._key_escape  s    rF   c                 &    | j                  |       y)r  Nr   r   s     rE   r  zTerminalWidget._key_question      rF   c                 &    | j                  |       y)r  Nr#  r   s     rE   r  zTerminalWidget._key_parenleft  r$  rF   c                 &    | j                  |       yr  r#  r   s     rE   r  zTerminalWidget._key_period  r$  rF   c                     |ru|D cg c]  }d|z  	 }}t        |      dk(  r|d   }ndj                  |      }| j                  r| j                          | j	                  |       | j                          yyc c}w )rd  z"%s"r   r    Nr  r  s        rE   rf  zTerminalWidget.drop_pathlist   sq    /78tVd]8E85zQQxxx""  "T"MMO 8s   A9Nr  )rh  ri  rj  rk  r   rz  COMr<  r   rG  r  r  r   rm  r  r&   r  r   r   r   r	  r  r  r  rf  ro  rF   rE   r  r    s     77d?%C;cA3HK%'ZZ\3


EI !'sJ	$
rF   r  )9rk  r   r  rN  r   os.pathr  r   r  r   rG  qtpy.compatr   qtpy.QtCorer   r   r   r   r   
qtpy.QtGuir	   r
   r   qtpy.QtWidgetsr   r   spyder.config.baser   r   r   r   spyder.config.managerr   spyder.py3compatr   r   r   spyder.utilsr   spyder.utils.icon_managerr   spyder.utils.qthelpersr   r   r   r   spyder.widgets.mixinsr   r   r   r   &spyder.plugins.console.widgets.consoler    r?  r"   rq  r  ro  rF   rE   <module>r7     s    /    	  	 
  ( : : A A . I H & F F ! )6 6L L D 	L	"')9(L	"h`+_$`FE_ ErF   