ó
±xYc           @  s–   d  Z  d d l m Z d d l m Z m Z d d l m Z d d l m	 Z	 d d l
 m Z d d l Z d Z d
 „  Z d „  Z d „  Z d „  Z d S(   u2   
Key binding handlers for displaying completions.
iÿÿÿÿ(   t   unicode_literals(   t   CompleteEventt   get_common_complete_suffix(   t
   get_cwidth(   t   Keys(   t   RegistryNu   generate_completionsu!   display_completions_like_readlinec         C  s<   |  j  } | j r | j ƒ  n |  j j d t d t ƒ d S(   u{   
    Tab-completion: where the first tab completes the common suffix and the
    second tab lists all the completions.
    t   insert_common_partt   select_firstN(   t   current_buffert   complete_statet   complete_nextt   clit   start_completiont   Truet   False(   t   eventt   b(    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt   generate_completions   s    		c         C  sÌ   |  j  } | j d k r d St d t ƒ } t | j j | j | ƒ ƒ } t | j | ƒ } t	 | ƒ d k r™ | j
 | d j ƒ | j | d j ƒ n/ | r¯ | j | ƒ n | rÈ t |  j | ƒ n  d S(   už  
    Key binding handler for readline-style tab completion.
    This is meant to be as similar as possible to the way how readline displays
    completions.

    Generate the completions immediately (blocking) and display them above the
    prompt in columns.

    Usage::

        # Call this handler when 'Tab' has been pressed.
        registry.add_binding(Keys.ControlI)(display_completions_like_readline)
    Nt   completion_requestedi   i    (   R   t	   completert   NoneR   R   t   listt   get_completionst   documentR   t   lent   delete_before_cursort   start_positiont   insert_textt   textt"   _display_completions_like_readlineR   (   R   R   t   complete_eventt   completionst   common_suffix(    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt!   display_completions_like_readline   s    	c           sÿ   d d l  m ‰ t ˆ t ƒ s% t ‚ ˆ  j j ƒ  } | j } | j } t	 | t
 d „  ˆ Dƒ ƒ d ƒ ‰ t
 d | ˆ ƒ ‰ ˆ | d ‰ t t j t ˆ ƒ t ˆ ƒ ƒ ƒ ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ ‡  ‡ ‡ ‡ ‡ ‡ f d †  } ˆ  j | d t ƒd S(	   u×   
    Display the list of completions in columns above the prompt.
    This will ask for a confirmation if there are too many completions to fit
    on a single page and provide a paginator to walk through them.
    iÿÿÿÿ(   t   create_confirm_applicationc         s  s   |  ] } t  | j ƒ Vq d  S(   N(   R   R   (   t   .0t   c(    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pys	   <genexpr>U   s    i   c           s  ˆ |  ˆ |  d ˆ !} t  t j t | ƒ t ˆ ƒ ƒ ƒ } g  t ˆ ƒ D] } | | | | d | !^ qK } g  } xq t | ƒ D]c } xM t ˆ ƒ D]? } y% | j | | | j j ˆ ƒ ƒ Wq– t	 k
 rÔ q– Xq– W| j d ƒ qƒ Wˆ  j
 j d j | ƒ ƒ ˆ  j
 j ƒ  d  S(   Ni   u   
u    (   t   intt   matht   ceilR   t   floatt   ranget   appendR   t   ljustt
   IndexErrort   outputt   writet   joint   flush(   t   paget   page_completionst   page_row_countt   it   page_columnst   resultt   rR$   (   R   t   column_countR   t   completions_per_paget   max_compl_width(    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt   display[   s    
%/%c          3  s³   t  ˆ ƒ ˆ k r¥ d j t  ˆ ƒ ƒ }  ˆ |  ƒ V} | r… xe t ˆ ƒ D]7 } ˆ | ƒ | ˆ d k rG t ƒ  V} | s~ d  SqG qG Wq¯ ˆ  j j d ƒ ˆ  j j ƒ  n
 ˆ d ƒ d  S(   Nu'   Display all {} possibilities? (y on n) i   u   
i    (   R   t   formatR)   t   _create_more_applicationR-   R.   R0   (   t   messaget   confirmR1   t	   show_more(   R   R   R9   R"   R;   t
   page_count(    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt   runp   s    

 t   render_cli_doneN(   t   prompt_toolkit.shortcutsR"   t
   isinstanceR   t   AssertionErrorR-   t   get_sizet   columnst   rowst   mint   maxR%   R&   R'   R   R(   t   run_application_generatorR   (   R   R   t	   term_sizet
   term_widtht   term_heightRB   (    (   R   R8   R   R9   R"   R;   R:   RA   sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyR   C   s    		%c          C  sà   d d l  m }  t ƒ  } | j d ƒ | j d ƒ | j d ƒ | j t j ƒ | j t j ƒ d „  ƒ ƒ ƒ ƒ ƒ } | j d ƒ | j d ƒ | j d	 ƒ | j d
 ƒ | j t j ƒ d „  ƒ ƒ ƒ ƒ ƒ } |  d d | d t ƒS(   uH   
    Create an `Application` instance that displays the "--MORE--".
    iÿÿÿÿ(   t   create_prompt_applicationu    u   yu   Yc         S  s   |  j  j t ƒ d  S(   N(   R   t   set_return_valueR   (   R   (    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt   _   s    u   nu   Nu   qu   Qc         S  s   |  j  j t ƒ d  S(   N(   R   RQ   R   (   R   (    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyRR   ˜   s    u   --MORE--t   key_bindings_registryt   erase_when_done(	   RD   RP   R   t   add_bindingR   t   ControlJt   ControlIt   ControlCR   (   RP   t   registryRR   (    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyR=   ‰   s    	''(   u   generate_completionsu!   display_completions_like_readline(   t   __doc__t
   __future__R    t   prompt_toolkit.completionR   R   t   prompt_toolkit.utilsR   t   prompt_toolkit.keysR   t#   prompt_toolkit.key_binding.registryR   R&   t   __all__R   R!   R   R=   (    (    (    sM   lib/python2.7/site-packages/prompt_toolkit/key_binding/bindings/completion.pyt   <module>   s    		$	F