ó
‹²,]c           @   s  d  Z  d d l Z d d l j Z d d l Z d d l m Z d d l 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 m Z m Z m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z 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* d d l+ m, Z, d d l- m. Z. d d l/ m0 Z0 d d l1 m2 Z2 d e0 f d „  ƒ  YZ3 d S(   s   Internal Console PluginiÿÿÿÿN(   t   PYQT5(   t   getopenfilename(   t   Signalt   Slot(   t   QInputDialogt	   QLineEditt   QMenut   QVBoxLayout(   t   _t   DEVt   DEBUGt   debug_print(   t   CONF(   t   icon_manager(   t	   EnvDialog(   t   get_error_matcht   remove_backslashest   getcwd_or_home(   t   add_actionst   create_actiont   DialogManagert   mimedata2url(   t   InternalShell(   t   FindReplace(   t   CollectionsEditor(   t   SpyderErrorDialog(   t   SpyderPluginWidget(   t   to_text_stringt   Consolec           B   sÇ  e  Z d  Z d Z e ƒ  Z e e ƒ Z e e e	 e ƒ Z
 d d g  d d e e d „ Z 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 e ƒ  d „  ƒ Z e ƒ  d „  ƒ Z e ƒ  d „  ƒ Z e ƒ  d e e d d „ ƒ Z d „  Z d d d „ Z  d „  Z! e ƒ  d „  ƒ Z" e ƒ  d „  ƒ Z# e e ƒ d „  ƒ Z$ e e ƒ d „  ƒ Z% e e ƒ d „  ƒ Z& e e ƒ d „  ƒ Z' d „  Z( d „  Z) RS(    s   
    Console widget
    t   internal_consolec   
         s¾  t  r t j ˆ  | d | ƒn t j ˆ  | ƒ t d ƒ t ƒ  ˆ  _ ˆ  j d ƒ } t | | | | ˆ  j d ƒ ˆ  j ƒ  | | | d | ƒ	ˆ  _	 ˆ  j	 j
 j ‡  f d †  ƒ ˆ  j	 j j ˆ  j ƒ ˆ  j	 j j ‡  f d †  ƒ ˆ  j	 j j ‡  f d †  ƒ ˆ  j ƒ  t ˆ  ƒ ˆ  _ ˆ  j j ˆ  j	 ƒ ˆ  j j ƒ  ˆ  j ˆ  j ƒ t ƒ  }	 |	 j ˆ  j	 ƒ |	 j ˆ  j ƒ ˆ  j |	 ƒ ˆ  j	 j ˆ  j d ƒ ƒ ˆ  j t ƒ d  ˆ  _ d	 ˆ  _ t ˆ  _ d  S(
   Nt   mains$       ..internal console: initializingt   light_backgroundt   max_line_countc            s   ˆ  j  j |  d ƒ S(   Ni    (   t   show_messaget   emit(   t   msg(   t   self(    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   <lambda>D   t    c              s   ˆ  j  j ƒ  S(   N(   t   focus_changedR"   (    (   R$   (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR%   F   R&   c            s   ˆ  j  j |  ƒ S(   N(   t   redirect_stdioR"   (   t   state(   R$   (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR%   I   s    t   wrapR&   (    R    R   t   __init__R   R   t   dialog_managert
   get_optionR   t   get_plugin_fontt   shellt   statust   connectt   go_to_errorR'   R(   t   initialize_pluginR   t   find_widgett
   set_editort   hidet   register_widget_shortcutsR   t	   addWidgett	   setLayoutt   toggle_wrap_modet   setAcceptDropst   Truet   Nonet	   error_dlgt   error_tracebackt   Falset   dismiss_error(
   R$   t   parentt	   namespacet   commandst   messaget   exitfunct   profilet   multithreadedR   t   layout(    (   R$   s5   lib/python2.7/site-packages/spyder/plugins/console.pyR+   3   s:    

			c         C   s-   | j  |  j j ƒ |  j j j | j ƒ d S(   sL   Bind historylog instance to this console
        Not used anymore since v2.0N(   t   add_historyR/   t   history_filenamet   append_to_historyR1   (   R$   t
   historylog(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   set_historylogg   s    c         C   s   | |  j  _ d S(   s"   Bind help instance to this consoleN(   R/   t   help(   R$   t   help_plugin(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   set_helpm   s    c         C   s
   t  d ƒ S(   s   Return widget titles   Internal console(   R   (   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   get_plugin_titler   s    c         C   s   |  j  S(   sq   
        Return the widget to give focus to when
        this plugin's dockwidget is raised on top-level
        (   R/   (   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   get_focus_widgetv   s    c         C   s    |  j  ƒ  } |  j j | ƒ d S(   s   Update font from PreferencesN(   R.   R/   t   set_font(   R$   t   font(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   update_font}   s    c         C   s   |  j  j ƒ  |  j j ƒ  t S(   s3   Perform actions before parent main window is closed(   R,   t	   close_allR/   t   exit_interpreterR<   (   R$   t
   cancelable(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   closing_plugin‚   s    c         C   s   d  S(   N(    (   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   refresh_pluginˆ   s    c      	   C   s  t  |  t d ƒ d t j d ƒ d t d ƒ d |  j ƒ} |  j | d d d ƒ t  |  t d	 ƒ d! t j d
 ƒ t d ƒ d |  j ƒ} t  |  t d ƒ d t j d ƒ d t d ƒ d |  j ƒ} t  |  t d ƒ d t j d ƒ d t d ƒ d |  j	 ƒ} t  |  t d ƒ d! d t d ƒ d |  j
 ƒ} t  |  t d ƒ d! d! t d ƒ d |  j ƒ} t  |  t d ƒ d |  j ƒ} | j |  j d ƒ ƒ t  |  t d ƒ d |  j ƒ} | j |  j d ƒ ƒ t  |  t d ƒ d |  j ƒ}	 |	 j |  j d ƒ ƒ t  |  t d ƒ d |  j ƒ}
 |
 j |  j d ƒ ƒ t t d ƒ |  ƒ } | j t j d  ƒ ƒ t | | | | |	 |
 | f ƒ d! | | | | d! | g } t |  j j | ƒ | S("   s*   Return a list of actions related to plugins   &Quitt   icont   exitt   tipt   Quitt	   triggeredR   s   Ctrl+Qs   &Run...t	   run_smalls   Run a Python scripts   Environment variables...t   environs9   Show and edit environment variables (for current session)s   Show sys.path contents...t   syspaths   Show (read-only) sys.paths	   Buffer...s   Set maximum line counts   External editor path...s#   Set external editor executable paths
   Wrap linest   toggledR*   s   Display balloon tipst   calltipss   Automatic code completions   codecompletion/autos   Enter key selects completions   codecompletion/enter_keys   Internal console settingst   tooloptionsN(   R   R   t   imaR\   t   quitt   register_shortcutR=   t
   run_scriptt   show_envt   show_syspatht   change_max_line_countt   change_exteditorR:   t
   setCheckedR-   t   toggle_calltipst   toggle_codecompletiont   toggle_codecompletion_enterR   t   setIconR   R/   t   menu(   R$   t   quit_actiont
   run_actiont   environ_actiont   syspath_actiont   buffer_actiont   exteditor_actiont   wrap_actiont   calltips_actiont   codecompletion_actiont   codecompenter_actiont   option_menut   plugin_actions(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   get_plugin_actions‹   sh    
c         C   s@   |  j  j |  j j ƒ |  j j |  ƒ |  j j j |  j ƒ d S(   s'   Register plugin in Spyder's main windowN(   R'   R1   R   t   plugin_focus_changedt   add_dockwidgetR/   t   exception_occurred(   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   register_pluginÈ   s    c         C   së   | r |  j  d k s |  j r# d St j d d ƒ r¾ |  j  d k r« t |  ƒ |  _  |  j  j j j |  j	 ƒ |  j  j
 j |  j ƒ |  j  j j j |  j ƒ |  j  j ƒ  n  |  j  j | ƒ n) t sÊ t rç |  j j ƒ  |  j j ƒ  n  d S(   s~   
        Exception ocurred in the internal console.

        Show a QDialog or the internal console to warn the user.
        NR   t   show_internal_errors(   R>   R=   RA   R   t   getR   t	   close_btnt   clickedR1   t   close_error_dlgt   rejectedt   remove_error_dlgt   detailsR2   t   showt   append_tracebackR	   R
   t
   dockwidgett   raise_(   R$   t   textt   is_traceback(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR„   Ï   s    c         C   s/   |  j  j j ƒ  r t |  _ n  |  j  j ƒ  d S(   s   Close error dialog.N(   R>   t   dismiss_boxt	   isCheckedR<   RA   t   reject(   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRŠ   å   s    c         C   s   d |  _ d S(   s   Remove error dialog.N(   R=   R>   (   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRŒ   ë   s    c         C   s   |  j  j ƒ  d S(   s   Quit mainwindowN(   R   t   close(   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRh   ð   s    c         C   s   |  j  j t ƒ  ƒ d S(   s   Show environment variablesN(   R,   RŽ   R   (   R$   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRk   õ   s    c         C   sN   t  ƒ  } | j t j d d d t d d d t j d ƒ ƒ|  j j | ƒ d S(	   s   Show sys.patht   titles   sys.patht   readonlyt   widthiX  R\   Rc   N(	   R   t   setupt   syst   pathR<   Rg   R\   R,   RŽ   (   R$   t   editor(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRl   ú   s    	c         C   s;  | d k r |  j j j ƒ  t |  t d ƒ t ƒ  t d ƒ d ƒ \ } } |  j j j ƒ  | rˆ t j	 t
 j | ƒ ƒ t
 j | ƒ } q d Sn  t | ƒ t
 j | ƒ } t } d | | ƒ | | ƒ f } | rà |  j j ƒ  n  |  j r|  j r|  j j t ƒ |  j j ƒ  n  |  j j | d ƒ |  j j | ƒ d S(   s   Run a Python scripts   Run Python scripts   Python scriptss    (*.py ; *.pyw ; *.ipy)Ns   runfile('%s', args='%s')s   
(   R=   R/   t   interpretert   restore_stdsR   R   R   t   redirect_stdst   ost   chdirt   ospt   dirnamet   basenameR   t   abspathR   t   setFocusR   t   ismaximizedt
   setVisibleR<   R‘   t   writet   run_command(   R$   t   filenamet   silentt	   set_focust   argst
   _selfiltert   rbst   command(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRj     s*    
c         C   sG   t  t | ƒ ƒ } | rC | j ƒ  \ } } |  j | t | ƒ ƒ n  d S(   s   Go to error if relevantN(   R   R   t   groupst   edit_scriptt   int(   R$   R’   t   matcht   fnamet   lnb(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR2     s    iÿÿÿÿc         C   sl   t  |  d ƒ s# t  |  j d ƒ r: |  j j | | ƒ d S| d k	 rh |  j j t j | ƒ | d ƒ n  d S(   s   Edit scriptR   Rž   NR&   (	   t   hasattrR   R/   t   external_editorR=   t	   edit_gotoR"   R¤   R§   (   R$   R­   t   goto(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRµ   %  s    c         C   s'   |  j  j t | ƒ ƒ |  j  j ƒ  d S(   s%   Execute lines and give focus to shellN(   R/   t   execute_linesR   R¨   (   R$   t   lines(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR¾   /  s    c         C   sf   t  j |  t d ƒ t d ƒ |  j d ƒ d d ƒ \ } } | rb |  j j | ƒ |  j d | ƒ n  d S(   s   Change maximum line countt   Buffers   Maximum line countR    i    i@B N(   R   t   getIntR   R-   R/   t   setMaximumBlockCountt
   set_option(   R$   t   mlct   valid(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRm   4  s    	c         C   s\   t  j |  t d ƒ t d ƒ t j |  j d ƒ ƒ \ } } | rX |  j d t | ƒ ƒ n  d S(   s   Change external editor paths   External editors    External editor executable path:s   external_editor/pathN(   R   t   getTextR   R   t   NormalR-   RÃ   R   (   R$   R   RÅ   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRn   ?  s    	c         C   s$   |  j  j | ƒ |  j d | ƒ d S(   s   Toggle wrap modeR*   N(   R/   R:   RÃ   (   R$   t   checked(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR:   I  s    c         C   s$   |  j  j | ƒ |  j d | ƒ d S(   s   Toggle calltipsRe   N(   R/   t   set_calltipsRÃ   (   R$   RÈ   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRp   O  s    c         C   s$   |  j  j | ƒ |  j d | ƒ d S(   s    Toggle automatic code completions   codecompletion/autoN(   R/   t   set_codecompletion_autoRÃ   (   R$   RÈ   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRq   U  s    c         C   s$   |  j  j | ƒ |  j d | ƒ d S(   s$   Toggle Enter key for code completions   codecompletion/enter_keyN(   R/   t   set_codecompletion_enterRÃ   (   R$   RÈ   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyRr   [  s    c         C   s[   | j  ƒ  } | j ƒ  r> t | ƒ r1 | j ƒ  qW | j ƒ  n | j ƒ  rW | j ƒ  n  d S(   sW   Reimplement Qt method
        Inform Qt about the types of data that the widget acceptsN(   t   mimeDatat   hasUrlsR   t   acceptProposedActiont   ignoret   hasText(   R$   t   eventt   source(    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   dragEnterEventb  s    c         C   s†   | j  ƒ  } | j ƒ  r7 t | ƒ } |  j j | ƒ nA | j ƒ  rx t | j ƒ  ƒ } |  j j d ƒ |  j j	 | ƒ n  | j
 ƒ  d S(   s?   Reimplement Qt method
        Unpack dropped data and handle itt   eofN(   RÌ   RÍ   R   R/   t   drop_pathlistRÐ   R   R’   t   set_cursor_positionR¾   RÎ   (   R$   RÑ   RÒ   t   pathlistR¿   (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt	   dropEventn  s    N(*   t   __name__t
   __module__t   __doc__t   CONF_SECTIONR   R'   t   boolR(   t   strR¶   R¼   R=   R@   R+   RN   RQ   RR   RS   RV   RZ   R[   R   R…   R„   RŠ   RŒ   R   Rh   Rk   Rl   Rj   R2   Rµ   R¾   Rm   Rn   R:   Rp   Rq   Rr   RÓ   RØ   (    (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyR   *   sH   	3							=						
	
	(4   RÛ   R¢   t   os.pathR   R¤   Rœ   t   qtpyR    t   qtpy.compatR   t   qtpy.QtCoreR   R   t   qtpy.QtWidgetsR   R   R   R   t   spyder.config.baseR   R	   R
   R   t   spyder.config.mainR   t   spyder.utilsR   Rg   t   spyder.utils.environR   t   spyder.utils.miscR   R   R   t   spyder.utils.qthelpersR   R   R   R   t   spyder.widgets.internalshellR   t   spyder.widgets.findreplaceR   t1   spyder.widgets.variableexplorer.collectionseditorR   t   spyder.widgets.reporterrorR   t   spyder.pluginsR   t   spyder.py3compatR   R   (    (    (    s5   lib/python2.7/site-packages/spyder/plugins/console.pyt   <module>   s(   """