
    	                     l    S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKrSrS	 rS
 rS rS rg)z2
Key binding handlers for displaying completions.
    )unicode_literals)CompleteEventget_common_complete_suffix)
get_cwidth)Keys)RegistryN)generate_completions!display_completions_like_readlinec                     U R                   nUR                  (       a  UR                  5         gU R                  R	                  SSS9  g)zo
Tab-completion: where the first tab completes the common suffix and the
second tab lists all the completions.
TF)insert_common_partselect_firstN)current_buffercomplete_statecomplete_nextclistart_completion)eventbs     Alib/third_party/prompt_toolkit/key_binding/bindings/completion.pyr	   r	      s;    
 	A 				""d"O    c                    U R                   nUR                  c  g[        SS9n[        UR                  R	                  UR
                  U5      5      n[        UR
                  U5      n[        U5      S:X  a>  UR                  US   R                  * 5        UR                  US   R                  5        gU(       a  UR                  U5        gU(       a  [        U R                  U5        gg)az  
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_requested   r   )r   	completerr   listget_completionsdocumentr   lendelete_before_cursorstart_positioninsert_texttext"_display_completions_like_readliner   )r   r   complete_eventcompletionscommon_suffixs        r   r
   r
      s     	A{{"=Nq{{221::~NOK /qzz;GM ;1	A = ==>	k!n))*		m$	*599kB 
r   c                   ^ ^^^^^	^
^ SSK Jm  [        T[        5      (       d   eT R                  R                  5       nUR                  nUR                  n[        U[        S T 5       5      S-   5      m
[        SUT
-  5      mTUS-
  -  m[        [        R                  " [        T5      [        T5      -  5      5      mU UUUU
4S jm	U UUUU	U4S jnT R                  USS9  g	)
z
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.
r   )create_confirm_applicationc              3   L   #    U  H  n[        UR                  5      v   M     g 7f)N)r   r"   ).0cs     r   	<genexpr>5_display_completions_like_readline.<locals>.<genexpr>U   s     41Jqvvs   "$r   c                 X  > T
U T-  U S-   T-   n[        [        R                  " [        U5      [	        T	5      -  5      5      n[        T	5       Vs/ s H  nXU-  US-   U-   PM     nn/ n[        U5       HV  n[        T	5       H3  n UR                  XG   U   R                  R                  T5      5        M5     UR                  S5        MX     TR                  R                  SR                  U5      5        TR                  R                  5         g s  snf ! [         a     M  f = f)Nr   
 )intmathceilr   floatrangeappendr"   ljust
IndexErroroutputwritejoinflush)pagepage_completionspage_row_countipage_columnsresultrr+   r   column_countr%   completions_per_pagemax_compl_widths           r   display3_display_completions_like_readline.<locals>.display[   s"   &t.B'B(,Q2F'FH TYYs+;'<u\?R'RST!,/1/q )^);QqSN<RS/ 	 1 ~&A<(MM,/!"4"9"9"?"?"PQ )
 MM$ ' 	

)

1 " s   D	/D
D)(D)c               3   t  >#    [        T5      T:  a  SR                  [        T5      5      n T" U 5      v nU(       a;  [        T	5       H+  nT" U5        UT	S-
  :w  d  M  [        5       v nU(       a  M+    g    g TR                  R                  S5        TR                  R                  5         g T" S5        g 7f)Nz'Display all {} possibilities? (y on n) r   r/   r   )r   formatr5   _create_more_applicationr9   r:   r<   )
messageconfirmr=   	show_morer   r%   rE   r(   rG   
page_counts
       r   run/_display_completions_like_readline.<locals>.runp   s     {22?FFs;GWXG6w??G!*-DDMzA~-*B*D$D	(y" . 

  &

(8(8(: AJs   AB8B84AB8T)render_cli_doneN)prompt_toolkit.shortcutsr(   
isinstancer   r9   get_sizecolumnsrowsminmaxr1   r2   r3   r   r4   run_application_generator)r   r%   	term_size
term_widthterm_heightrP   rD   rE   r(   rG   rF   rO   s   ``    @@@@@@r   r#   r#   C   s     Dk4(((( 

##%I""J..K
 *444q8:Oq*78L';?;TYYs;/%8L2MMNOJ * , !!#t!<r   c                  "   SSK Jn   [        5       nUR                  S5      UR                  S5      UR                  S5      UR                  [        R
                  5      UR                  [        R                  5      S 5       5       5       5       5       nUR                  S5      UR                  S5      UR                  S	5      UR                  S
5      UR                  [        R                  5      S 5       5       5       5       5       nU " SUSS9$ )z@
Create an `Application` instance that displays the "--MORE--".
r   )create_prompt_application yYc                 :    U R                   R                  S5        g )NTr   set_return_valuer   s    r   _#_create_more_application.<locals>._   s     			""4(r   nNqQc                 :    U R                   R                  S5        g )NFrd   rf   s    r   rg   rh      s     			""5)r   z--MORE--T)key_bindings_registryerase_when_done)rS   r_   r   add_bindingr   ControlJControlIControlC)r_   registryrg   s      r   rK   rK      s    CzH###$--($--() ) )   
) ####$--(* )    
* %(DJ Jr   )__doc__
__future__r   prompt_toolkit.completionr   r   prompt_toolkit.utilsr   prompt_toolkit.keysr   #prompt_toolkit.key_binding.registryr   r2   __all__r	   r
   r#   rK    r   r   <module>r}      s?    ( O + $ 8 
P!CHC=LJr   