
    p<                         S SK Jr  S SKJrJrJr  S SKJr  S SKJ	r	J
r
Jr  S SKJrJrJrJrJrJr  S SKJr  SSKJrJr  SS	KJr  S
SKJrJr  SrS rS rS r SS jr!S r"g)    )unicode_literals)SelectionTypeindentunindent)Keys)IncrementalSearchDirectionSEARCH_BUFFERSYSTEM_BUFFER)	Condition	EmacsModeHasSelectionEmacsInsertModeHasFocusHasArg)CompleteEvent   )scroll_page_upscroll_page_down)get_by_name   )RegistryConditionalRegistry)load_emacs_bindingsload_emacs_search_bindingsload_emacs_system_bindings)load_extra_emacs_page_navigation_bindingsc                    ^^ [        [        5       [        5       5      n U R                  m[	        5       n[        5       nT" [        R                  5      S 5       nT" [        R                  5      " [        S5      5        T" [        R                  5      " [        S5      5        T" [        R                  US9" [        S5      5        T" [        R                  5      " [        S5      5        T" [        R                  5      " [        S5      5        T" [        R                  5      " [        S5      5        T" [        R                  5      " [        S	5      5        T" [        R                   S
SUS9" [        S5      5        T" [        R"                  US9" [        S5      5        T" [        R                  S5      " [        S5      5        T" [        R                  SUS9" [        S5      5        T" [        R                  SUS9" [        S5      5        T" [        R                  S5      " [        S	5      5        T" [        R                  SUS9" [        S5      5        T" [        R                  SUS9" [        S5      5        T" [        R                  SUS9" [        S5      5        T" [        R                  [        R$                  US9" [        S5      5        T" [        R                  [        R&                  US9" [        S5      5        T" [        R                  SUS9" [        S5      5        T" [        R(                  S US9" [        S5      5        T" [        R                   [        R*                  S US9" [        S5      5        T" [        R                  SU) S9" [        S5      5        T" [        R                  S U) S9" [        S!5      5        T" [        R                  S"US9" [        S#5      5        T" [        R                  S$US9" [        S#5      5        T" [        R                  [        R"                  US9" [        S%5      5        T" [        R                  S&US9" [        S'5      5        T" [        R,                  5      " [        S(5      5        T" [        R.                  U) S9" [        S)5      5        T" [        R                   S*5      " [        S+5      5        T" [        R                   S,5      " [        S-5      5        T" [        R                   S.5      " [        S/5      5        T" [        R0                  5      S0 5       nT" [        R2                  5      S1 5       nU4S2 jnS3 H  nU" U5        M     T" [        R                  S4[5        5       ) S9S5 5       nT" S4[7        S6 5      S9S7 5       n[7        S8 5      nT" [        R                  [        R8                  X-  S9" [        S95      5        S: mT" [        R:                  [        R<                  5      U4S; j5       nT" [        R                  [        R:                  [        R<                  5      U4S< j5       nT" [        R                  S=5      S> 5       nT" [        R                  S.5      S? 5       nT" [        R                  S@US9SA 5       nT" [        R                  SBUS9SC 5       nT" [        R                   [        R                   5      SD 5       nT" [        R>                  5      SE 5       nT" [        R@                  U) S9SF 5       nT" [        R@                  US9SG 5       nT" [        RB                  US9T" [        R                   S
SHUS9SI 5       5       nT" [        R                  SJUS9SK 5       nT" [        R                  [        RD                  5      SL 5       nT" [        R                  [        RF                  5      SM 5       nT" [        R                  SNUS9SO 5       nT" [        RH                  S US9SP 5       nT" [        RH                  SUS9SQ 5       nU $ )Rz
Some e-macs extensions.
c                     g)a,  
By default, ignore escape key.

(If we don't put this here, and Esc is followed by a key which sequence
is not handled, we'll insert an Escape character in the input stream.
Something we don't want and happens to easily in emacs mode.
Further, people can always use ControlQ to do a quoted insert.)
N events    <lib/third_party/prompt_toolkit/key_binding/bindings/emacs.py_load_emacs_bindings.<locals>._!   s     	    zbeginning-of-linezbackward-charfilterz	kill-wordzend-of-linezforward-charzbackward-wordzforward-wordryyankbczcapitalize-worddflzdowncase-worduzuppercase-wordzyank-popzbackward-kill-word\zdelete-horizontal-spacec                     gNFr   es    r"   <lambda>%load_emacs_bindings.<locals>.<lambda>A   s    %r%   )save_beforer'   undoc                     gr3   r   r4   s    r"   r6   r7   D   s    r%   <zbeginning-of-history>zend-of-history.zyank-last-argr#   zyank-nth-arg#zinsert-commentzoperate-and-get-nextzquoted-insert(zstart-kbd-macro)zend-kbd-macror5   zcall-last-kbd-macroc                 8    U R                   R                  5         g)zNext line. N)current_buffer	auto_downr    s    r"   r#   r$   Z   s     	&&(r%   c                 J    U R                   R                  U R                  S9  g)zPrevious line. countN)rB   auto_upargr    s    r"   r#   r$   _   s     	$$599$5r%   c                 l   >^  T" T [        5       S9T" [        R                  T 5      U 4S j5       5       ng)zN
Handle input of arguments.
The first number needs to be preceeded by escape.
r&   c                 (   > U R                  T5        g N)append_to_arg_count)r!   r,   s    r"   r#   4load_emacs_bindings.<locals>.handle_digit.<locals>._i   s     %%a(r%   N)r   r   Escape)r,   r#   handles   ` r"   handle_digit)load_emacs_bindings.<locals>.handle_digitd   s3    
 
&(	#	Q		) 
  
$	)r%   
0123456789-c                 B    U R                   c  U R                  S5        gg)z	
        NrS   )_argrL   r    s    r"   r#   r$   q   s!     ::%%c* r%   c                 4    U R                   R                  S:H  $ )NrS   )input_processorrH   clis    r"   r6   r7   x   s    c.A.A.E.E.Lr%   c                 :    SU R                   R                  l        g)zX
When '-' is typed again, after exactly '-' has been given as an
argument, ignore this.
rS   N)rY   rW   rH   r    s    r"   r#   r$   x   s     ),		!!%r%   c                 B    U R                   R                  R                  $ rK   )rB   accept_actionis_returnablerX   s    r"   r6   r7      s    C&&44BBr%   zaccept-linec                     US:  a  U R                   R                  USU* S9nOU R                   R                  USUS9nUb  U =R                  U-  sl        g g )Nr   T)in_current_linerF   )documentfind_backwardsfindcursor_position)buffcharrF   matchs       r"   character_search-load_emacs_bindings.<locals>.character_search   s_    19MM00tTYSY0ZEMM&&tT&OE  E)  r%   c                 V   > T" U R                   U R                  U R                  5        g)z;When Ctl-] + a character is pressed. go to that character. NrB   datarH   r!   rg   s    r"   r#   r$      s     	--uzz599Er%   c                 X   > T" U R                   U R                  U R                  * 5        g)zLike Ctl-], but backwards. Nrj   rl   s    r"   r#   r$      s!     	--uzzEII:Fr%   ac                     g)zPrevious sentence. Nr   r    s    r"   r#   r$          r%   c                     g)zMove to end of sentence. Nr   r    s    r"   r#   r$      rp   r%   tc                     g)z,
Swap the last two words before the cursor.
Nr   r    s    r"   r#   r$      rp   r%   *c                     U R                   n[        SSS9n[        UR                  R	                  UR
                  U5      5      nSR                  S U 5       5      nUR                  U5        g)zB
`meta-*`: Insert all possible completions of the preceding text.
FT)text_insertedcompletion_requested c              3   8   #    U  H  oR                   v   M     g 7frK   )text).0r,   s     r"   	<genexpr>1load_emacs_bindings.<locals>._.<locals>.<genexpr>   s     !>+Q&&+s   N)rB   r   list	completerget_completionsr`   joininsert_text)r!   rd   complete_eventcompletionstext_to_inserts        r"   r#   r$      sa    
 ## 'UQUV4>>99$--XY !>+!>>(r%   c                    U R                   nUR                  R                  (       a-  U=R                  UR                  R	                  SS9-  sl        gU=R                  UR                  R                  5       -  sl        g)zK
Move cursor back and forth between the start and end of the current
line.
Fafter_whitespaceN)rB   r`   is_cursor_at_the_end_of_linerc   get_start_of_line_positionget_end_of_line_positionr!   buffers     r"   r#   r$      s^     %%??77""foo&P&Pbg&P&hh"""foo&N&N&PP"r%   c                 z    U R                   nUR                  (       a  UR                  [        R                  S9  gg)z>
Start of the selection (if the current buffer is not empty).
)selection_typeN)rB   rz   start_selectionr   
CHARACTERS)r!   rd   s     r"   r#   r$      s2     ##99  0H0H I r%   c                 H    SU R                   l        SU R                   l        g)z;
Control + G: Cancel completion menu and validation state.
N)rB   complete_statevalidation_errorr    s    r"   r#   r$      s     
 /3+04-r%   c                 8    U R                   R                  5         g)z
Cancel selection.
N)rB   exit_selectionr    s    r"   r#   r$      s    
 	++-r%   kc                     U R                   R                  5       nU R                  R                  R	                  U5        g)z
Cut selected text.
N)rB   cut_selectionrY   	clipboardset_datar!   rk   s     r"   r#   r$      s0     ##113		$$T*r%   wc                     U R                   R                  5       nU R                  R                  R	                  U5        g)z
Copy selected text.
N)rB   copy_selectionrY   r   r   r   s     r"   r#   r$      s0    
 ##224		$$T*r%   c                     U R                   nU=R                  UR                  R                  U R                  S9=(       d    S-  sl        g)z#
Cursor to start of previous word.
rE   r   N)rB   rc   r`   find_previous_word_beginningrH   r   s     r"   r#   r$      s?    
 %%&//"N"NUZU^U^"N"_"dcddr%   c                     U R                   nU=R                  UR                  R                  U R                  S9=(       d    UR                  R                  5       -  sl        g)z
Cursor to start of next word.
rE   N)rB   rc   r`   find_next_word_beginningrH   get_end_of_document_positionr   s     r"   r#   r$      sP    
 %%&//"J"JQVQZQZ"J"[ #;OO88:	;r%   /c                     U R                   nUR                  (       a  UR                  5         gU R                  R	                  SS9  g)z
M-/: Complete.
T)select_firstN)rB   r   complete_nextrY   start_completion)r!   r+   s     r"   r#   r$     s7    
   OOII&&D&9r%   c                 P   U R                   nU=R                  UR                  R                  SS9-  sl        UR                  R	                  5       u  p#UR                  R                  U5      u  p$UR                  R                  U5      u  p4[        XUS-   U R                  S9  g)z
Indent selected text.
Tr   r   rE   N)rB   rc   r`   r   selection_rangetranslate_index_to_positionr   rH   r!   r   from_tor#   s        r"   r#   r$     s    
 %%&//"L"L^b"L"ccOO335	??>>uE;;B?vb1fEII6r%   c                     U R                   nUR                  R                  5       u  p#UR                  R                  U5      u  p$UR                  R                  U5      u  p4[	        XUS-   U R
                  S9  g)z
Unindent selected text.
r   rE   N)rB   r`   r   r   r   rH   r   s        r"   r#   r$     sc    
 %%OO335	??>>uE;;B?Qeii8r%   )%r   r   r   add_bindingr   r   r   rN   ControlAr   ControlBControlDeleteControlEControlFControlLeftControlRightControlXControlYControlH	BackspaceControlUnderscoreControlUControlOControlQControlNControlPr   r   ControlJControlSquareCloseAnyControlSpaceControlGControlWLeftRightControlC)	registryinsert_modehas_selectionr#   rP   r,   r]   rg   rO   s	          @@r"   r   r      s    #8:y{;H!!F!#K NMDKK	 	 4==+&9:;
4==+o67
4k2;{3KL
4==+m45
4==+n56
4[9:
4k.9:
4==#s;7F8KL
4==-k&.AB
4;;[9:
4;;K0=N1OP
4;;K0[1IJ
4;;[89
4;;K0_1MN
4;;K0=M1NO
4;;K0Z1HI
4;;k:;G[;\]
4;;{;KH\<]^
4;;[1+>W2XY
4!!UF 4==$--o{[F 4;;m^4[AW5XY
4;;m^4[AQ5RS
4;;K0_1MN
4;;K0_1MN
4;;k:;~;VW
4;;K0=M1NO
4==+&<=>
 4===.1+o2NO
4==#{+<=>
4==#{?;<
4==#{+@ABDMM) ) DMM6 6) Q  DKKfhY/+ 0+ C	"LMN, O, BDM 4;;k.IJM"$* D##TXX.F /F
 DKK00$((;G <G
 DKK  DKK% % DKK[1 2 DKK[1) 2) DMM4==)
Q *
Q DJ J DMMM>25 35 DMM-0. 1. DMM-0DMM3M:+ ; 1+ DKK]3+ 4+ DKK#e $e DKK$; %; DKK[1: 2: DMM3}57 67 DMM3}5
9 6
9 Or%   c                      [        5       n U R                  [        R                  [        R                  [        5       [        5       ) -  S9" [        S5      5        U $ )z>
Pressing C-X C-E will open the buffer in an external editor.
r&   zedit-and-execute-command)r   r   r   r   r   r   r   r   )r   s    r"   "load_emacs_open_in_editor_bindingsr   .  sM     zH )|~o =  ?	/	02 Or%   c                  z   [        [        5       [        5       5      n U R                  n[	        [
        5      nU" [        R                  SU) S9S 5       nU" [        R                  US9U" [        R                  US9U" [        R                  US9S 5       5       5       nU" [        R                  US9S 5       nU $ )N!r&   c                 B    U R                   R                  [        5        g)z 
M-'!' opens the system prompt.
N)rY   
push_focusr
   r    s    r"   r#   %load_emacs_system_bindings.<locals>._A  s    
 			]+r%   c                     U R                   R                  [           R                  5         U R                   R	                  5         g)z
Cancel system prompt.
N)rY   buffersr
   reset	pop_focusr    s    r"   r#   r   H  s/     			-(..0		r%   c                     U R                   R                  [           nU R                   R                  UR                  5        UR                  SS9  U R                   R                  5         g)z
Run system command.
T)append_to_historyN)rY   r   r
   run_system_commandrz   r   r   )r!   system_lines     r"   r#   r   R  sS    
 ii''6		$$[%5%56D1 			r%   )r   r   r   r   r   r
   r   rN   r   r   r   )r   rO   	has_focusr#   s       r"   r   r   ;  s    "8:y{;H!!F'IDKKyj1, 2, DKK	*DMM),DMM), - - + DMM),	 -	 Or%   Nc                   ^ ^ [        [        5       [        5       5      nUR                  n[	        [
        5      nT b  [        T 5      (       d   eT (       d  S m U" [        R                  US9U" [        R                  US9S 5       5       nU" [        R                  US9U 4S j5       nU" [        R                  U) S9U 4S j5       nU" [        R                  U) S9U 4S j5       nS
U 4S jjmU" [        R                  US9U" [        R                  US9U4S j5       5       nU" [        R                  US9U" [        R                  US9U4S	 j5       5       nU$ )Nc                     U R                   $ rK   )search_staterX   s    r"   get_search_state4load_emacs_search_bindings.<locals>.get_search_statej  s    #*:*:#:r%   r&   c                     U R                   R                  [           nUR                  5         U R                   R	                  5         g)z<
Abort an incremental search and restore the original line.
N)rY   r   r	   r   r   )r!   search_buffers     r"   r#   %load_emacs_search_bindings.<locals>._l  s4     		))-8		r%   c                   > U R                   R                  R                  U R                   5      nU R                   R                  [           nUR                  (       a!  UR                  T" U R                   5      l        UR                  T" U R                   5      SS9  UR                  5         UR                  5         U R                   R                  5         g)za
When enter pressed in isearch, quit isearch mode. (Multiline
isearch would be too complicated.)
T)include_current_positionN)	rY   r   previousr	   rz   apply_searchr   r   r   )r!   input_bufferr   r   s      r"   r#   r   y  s     yy((11%))<		))-8 /</A/AUYY', 	!!"2599"=X\!] 	'') 			r%   c                    > [         R                  T" U R                  5      l        U R                  R	                  [
        5        g rK   )r   BACKWARDrY   	directionr   r	   r!   r   s    r"   r#   r     s-    0J0S0S#-		]+r%   c                    > [         R                  T" U R                  5      l        U R                  R	                  [
        5        g rK   )r   FORWARDrY   r   r   r	   r   s    r"   r#   r     s-    0J0R0R#-		]+r%   c                    > T" U 5      nUR                   U:g  nU R                  [           R                  Ul        Xl         U(       d-  U R                  R	                  U 5      nUR                  USUS9  gg)z/Apply search, but keep search buffer focussed. F)r   rF   N)r   r   r	   rz   r   r   )rY   r   rF   r   direction_changedr   r   s         r"   incremental_search6load_emacs_search_bindings.<locals>.incremental_search  sv     (,(22i?KK6;;!* !;;//4L%%l?DE & S !r%   c                 Z   > T" U R                   [        R                  U R                  S9  g NrE   )rY   r   r   rH   r!   r   s    r"   r#   r     s#     	599&@&I&IQVQZQZ[r%   c                 Z   > T" U R                   [        R                  U R                  S9  g r   )rY   r   r   rH   r   s    r"   r#   r     s#     	599&@&H&HPUPYPYZr%   )r   )r   r   r   r   r   r	   callabler   r   r   r   ControlRControlSUpDown)r   r   rO   r   r#   r   s   `    @r"   r   r   a  sK   "8:y{;H!!F'I#x0@'A'AAA:DMM),DMM), - - DMM), -, DMMI:., /, DMMI:., /,S DMM),DGGI&\ ' -\ DMM),DIIi([ ) -[ Or%   c                  X   [        [        5       [        5       5      n U R                  nU" [        R
                  5      " [        5        U" [        R                  5      " [        5        U" [        R                  S5      " [        5        U" [        R                  5      " [        5        U $ )z|
Key bindings, for scrolling up and down through pages.
This are separate bindings, because GNU readline doesn't have them.
v)r   r   r   r   r   ControlVr   PageDownrN   r   PageUp)r   rO   s     r"   r   r     sl    
 #8:y{;H!!F
4==*+
4==*+
4;;^,
4;;'Or%   rK   )#
__future__r   prompt_toolkit.bufferr   r   r   prompt_toolkit.keysr   prompt_toolkit.enumsr   r	   r
   prompt_toolkit.filtersr   r   r   r   r   r   prompt_toolkit.completionr   scrollr   r   named_commandsr   r   r   r   __all__r   r   r   r   r   r   r%   r"   <module>r     sN    ' A A $ Y Y h h 3 4 ' 4Vr
#LRjr%   