
    ^hR'                      S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJr  S SKJr  S SKJrJrJrJr  S SKJr  S S	KJr  S S
KJrJrJrJrJrJr  S SKJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2J3r3  S SK4J5r5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<J=r=J>r>  SSK?J@r@JArAJBrB  SSKCJDrD  SS/rE\3rF\R                  rG\GS-   rH " S S\5      rI " S S5      rJ\	\F/\J4   rK\" S\KS9rL    S*S  jrM\	\F\J/S4   rN\" S!\NS9rO    S+S" jrP\S,S# j5       rQ\S,S$ j5       rR\S,S% j5       rS\S,S& j5       rT\S,S' j5       rUS-S( jrVS-S) jrWg).    )annotationsN)Enum)
accumulate)CallableIterableTupleTypeVar)get_app)Bufferindentreshape_textunindent)ClipboardData)Document)Always	ConditionFilterhas_argis_read_onlyis_searching)in_paste_modeis_multilinevi_digraph_modevi_insert_modevi_insert_multiple_modevi_modevi_navigation_modevi_recording_macrovi_replace_modevi_replace_single_modevi_search_direction_reversedvi_selection_modevi_waiting_for_text_object_mode)Vt100Parser)DIGRAPHS)KeyPressKeyPressEvent)CharacterFind	InputMode)Keys)SearchDirection)	PasteModeSelectionStateSelectionType   )ConditionalKeyBindingsKeyBindingsKeyBindingsBase   )get_by_nameload_vi_bindingsload_vi_search_bindings
0123456789c                  $    \ rS rSrSrSrSrSrSrg)TextObjectType<   	EXCLUSIVE	INCLUSIVELINEWISEBLOCK N)	__name__
__module____qualname____firstlineno__r;   r<   r=   r>   __static_attributes__r?       `/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/key_binding/bindings/vi.pyr9   r9   <   s    IIHErE   r9   c                      \ rS rSrSrS\R                  4     SS jjr\SS j5       r	SS jr
SS jrSS jrSS	 jrS
rg)
TextObjectC   z}
Return struct for functions wrapped in ``text_object``.
Both `start` and `end` are relative to the current cursor position.
r   c                (    Xl         X l        X0l        g N)startendtype)selfrL   rM   rN   s       rF   __init__TextObject.__init__I   s     
	rE   c                    U R                   [        R                  :X  a  [        R                  $ U R                   [        R
                  :X  a  [        R
                  $ [        R                  $ rK   )rN   r9   r=   r.   LINESr>   
CHARACTERSrO   s    rF   selection_typeTextObject.selection_typeP   sJ    99/// &&&99,,, &&& +++rE   c                    U R                   U R                  :  a  U R                   U R                  4$ U R                  U R                   4$ )z1
Return a (start, end) tuple where start <= end.
)rL   rM   rU   s    rF   sortedTextObject.sortedY   s:     :: ::txx''88TZZ''rE   c                d   U R                  5       u  p#UnU R                  [        R                  :X  a)  UR	                  X4R
                  -   5      S   S:X  a  US-  nU R                  [        R                  :X  a  US-  nU R                  [        R                  :X  a  UR	                  X$R
                  -   5      u  pVUR                  US5      UR
                  -
  nUR	                  X4R
                  -   5      u  pVUR                  U[        UR                  U   5      5      UR
                  -
  nX#4$ )a  
Return a (start, end) tuple with start <= end that indicates the range
operators should operate on.
`buffer` is used to get start and end of line positions.

This should return something that can be used in a slice, so the `end`
position is *not* included.
r3   r   )rY   rN   r9   r;   translate_index_to_positioncursor_positionr<   r=   translate_row_col_to_indexlenlines)rO   documentrL   rM   docrowcols          rF   operator_rangeTextObject.operator_rangeb   s    [[]
 II111//6I6I0IJ1MQRR 1HC990001HC99///66u?R?R7RSHC223:S=P=PPE66s=P=P7PQHC..sC		#4GH%%&  zrE   c                    U R                  UR                  5      u  p#X!R                  -  nX1R                  -  nUR                  R                  U5      u  p$UR                  R                  U5      u  p4X#4$ )z'
Return a (start_line, end_line) pair.
)re   ra   r]   r\   )rO   bufferfrom_to_s        rF   get_line_numbersTextObject.get_line_numbers   sl    
 ''8	'''
$$$ ??>>uE;;B?yrE   c           	     4   U R                  UR                  5      u  p#X!R                  -  nX1R                  -  nU R                  [        R
                  :w  a  US-  n[        UR                  U[        X R                  S95      nUR                  5       u  pVXV4$ )z1
Turn text object into `ClipboardData` instance.
r3   )original_cursor_positionrN   )re   ra   r]   rN   r9   r=   r   textr-   rV   cut_selection)rO   rh   ri   rj   ra   new_documentclipboard_datas          rF   cutTextObject.cut   s     ''8	'''
$$$ 99///!GBKKE@S@ST
 (0'='='?$++rE   )rM   rL   rN   N)rL   intrM   rv   rN   r9   )returnr.   )rw   tuple[int, int])ra   r   rw   rx   )rh   r   rw   rx   )rh   r   rw   ztuple[Document, ClipboardData])r@   rA   rB   rC   __doc__r9   r;   rP   propertyrV   rY   re   rl   rt   rD   r?   rE   rF   rH   rH   C   sZ     &'~?W?W".< , ,(@,rE   rH   _TOF)boundc                L   ^  [        5       SSSS.           SU 4S jjjnU$ )zQ
Create a decorator that can be used to register Vi text object implementations.
F)filterno_move_handlerno_selection_handlereagerc                ,   >^ ^^^^ SUU UUUU4S jjnU$ )a:  
Register a text object function.

Usage::

    @text_object('w', filter=..., no_move_handler=False)
    def handler(event):
        # Return a text object for this key.
        return TextObject(...)

:param no_move_handler: Disable the move handler in navigation mode.
    (It's still active in selection mode.)
c                $  >^  TR                   " T[        T-  TS.6SU 4S jj5       nT(       d-  TR                   " T[        ) T-  [        -  TS.6SU 4S jj5       nT	(       d-  TR                   " T[        ) T-  [        -  TS.6SU 4S jj5       nT $ )Nr~   r   c                T  > U R                   R                  n[        UR                  =(       d    SU R                  =(       d    S-  5      U l        T" U 5      nUR                  nUb  Ub  U" X5        S U R                   R                  l        S U R                   R                  l        g Nr3   )appvi_statestroperator_argarg_argoperator_func)eventr   text_objr   text_object_funcs       rF   _apply_operator_to_text_objectvcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._apply_operator_to_text_object   s    
 !99-- ("7"7"<1a!PQ
 ,E2
 !) 6 6'M,E!%2 48		""026		""/rE   c                h   > T" U 5      nU R                   =R                  UR                  -  sl        g)z#
Move handler for navigation mode.
N)current_bufferr]   rL   )r   text_objectr   s     rF   _move_in_navigation_modepcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_navigation_mode   s,     #35"9K((88K<M<MM8rE   c                  > T" U 5      nU R                   nUR                  nUc  gUR                  (       a  UR                  UR                  5      u  pEXBR
                  -  nXRR
                  -  nXCl        XRl        UR                  [        R                  :X  a  [        R                  Ul        g[        R                  Ul        gU R                   =R
                  UR                  -  sl        g)z"
Move handler for selection mode.
N)r   selection_staterM   re   ra   r]   ro   rN   r9   r=   r.   rS   rT   rL   )r   r   buffr   rL   rM   r   s         rF   _move_in_selection_modeocreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_selection_mode   s     #35"9K //D&*&:&:O&. #%0%?%?%N
!5!55333CH@/2, '++~/F/FF3@3F3FO03@3K3KO0,,<<@Q@QQ<rE   r   Erw   Noneaddr#   r   r"   )
r   r   r   r   r   r~   key_bindingskeysr   r   s
   `   rF   	decoratorNcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator   s    =Fe77, #!!;;()  NN (!!;;'(  RR> $#rE   )r   r{   rw   r{   r?   )r~   r   r   r   r   r   r   s   ````` rF   text_object_decorator;create_text_object_decorator.<locals>.text_object_decorator   s    *S	$ S	$j rE   )r   
Keys | strr~   r   r   boolr   r   r   r   rw   zCallable[[_TOF], _TOF]r   )r   r   s   ` rF   create_text_object_decoratorr      sf       %%*jjj j #	j
 j 
 j jX ! rE   _OFc                @   ^  [        5       SS.       SU 4S jjjnU$ )zC
Create a decorator that can be used for registering Vi operators.
Fr   c                $   >^ ^^ SUU UU4S jjnU$ )z
Register a Vi operator.

Usage::

    @operator('d', filter=...)
    def handler(event, text_object):
        # Do something with the text object here.
c                   >^  TR                   " T[        ) T-  [        -  TS.6SU 4S jj5       nTR                   " T[        ) T-  [        -  TS.6SU 4S jj5       nT $ )Nr   c                   > TU R                   R                  l        U R                  U R                   R                  l        g)z%
Handle operator in navigation mode.
N)r   r   r   r   r   )r   r   s    rF   _operator_in_navigationicreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator.<locals>._operator_in_navigation@  s.     4A		""027))		""/rE   c                z  > U R                   nUR                  nUb  UR                  [        R                  :X  a  [
        R                  nO?UR                  [        R                  :X  a  [
        R                  nO[
        R                  n[        UR                  UR                  -
  US9nT" X5        SUl        gg)z$
Handle operator in selection mode.
NrN   )r   r   rN   r.   rS   r9   r=   r>   r<   rH   ro   r]   )r   r   r   text_obj_typer   r   s        rF   _operator_in_selectionhcreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator.<locals>._operator_in_selectionO  s     ++"&"6"6".&++}/B/BB(6(?(?(--1D1DD(6(<(<(6(@(@",'@@4CWCWW*#K "%5 ,0D(% /rE   r   r   )r   r   r   r   r~   r   r   s   `  rF   r   Hcreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator?  su    77&@CUU
<
< 77&@CTT
0
06 ! rE   )r   r   rw   r   r?   )r~   r   r   r   r   s   ``` rF   operator_decorator5create_operator_decorator.<locals>.operator_decorator2  s    0	! 0	!d rE   )r   r   r~   r   r   r   rw   zCallable[[_OF], _OF]r   )r   r   s   ` rF   create_operator_decoratorr   +  s?     -3HE??#)?=A?	? ?B rE   c                 >    [        5       R                  R                  $ rK   )r
   r   is_returnabler?   rE   rF   r   r   v  s    9##111rE   c                     [        5       R                  n [        U R                  =(       a'    U R                  R                  [
        R                  :H  5      $ rK   )r
   r   r   r   rN   r.   r>   )r   s    rF   in_block_selectionr   {  sA    9##DQ!5!5!:!:m>Q>Q!Q rE   c                 B    [        5       R                  R                  S L$ rK   )r
   r   digraph_symbol1r?   rE   rF   digraph_symbol_1_givenr     s    9--T99rE   c                 D    [        5       R                  R                  S:H  $ )z-Returns True when the search buffer is empty. )r
   r   rp   r?   rE   rF   search_buffer_is_emptyr     s     9##((B..rE   c                 >    [        5       R                  R                  $ rK   )r
   r   tilde_operatorr?   rE   rF   r   r     s    9,,,rE   c                   ^^^ [        5       n U R                  n[        [        [        S4   [        [
        [        /[        4   4   nS[        5       S 4S[        5       S 4S[        5       S 4S[        5       S	 4S
[        S 4/nU" S[        S9" [        S5      5        U" S5      SS j5       nU" S[        S9SS j5       nU" S[        S9SS j5       nU" S[        S9U" S[        S9SS j5       5       nU" S[        S9SS j5       nU" S[        S9U" S[        S9SS j5       5       n	U" S[        S9SS j5       n
U" S[        S9SS j5       nU" S[        S9SS  j5       nU" S[        S9SS! j5       nU" S"[        S9U" S#[        S9SS$ j5       5       nU" S%[        S9SS& j5       nU" S'[        [        -  S9" [        S(5      5        U" S'[        [        ) -  S9" [        S(5      5        U" S'[        ) [        -  S9SS) j5       nU" S*[        S9SS+ j5       nU" S*[        S9SS, j5       nU" S-[        [        ) -  S9SS. j5       nU" S/[        [        ) -  S9SS0 j5       nU" S1[        [        ) -  S9SS2 j5       nU" S3S3[        [        ) -  S9U" S4[        [        ) -  S9SS5 j5       5       nU" S6[        S9SS7 j5       nU" S8S8[        S9SS9 j5       nU" S:[        S9SS; j5       nU" S<[        [        ) -  S9SS= j5       nU" S>[        [        ) -  S9SS? j5       nU" S>[        [        ) -  S9SSSA jj5       mU" S/[        [        ) -  S9SU4SB jj5       nU" SC[        [        ) -  S9SSD j5       nU" SESC[        [        ) -  S9SSF j5       nU" SC[        [        ) -  S9SSG j5       nU" SESC[        [        ) -  S9SSH j5       n U" SI[        S9SSJ j5       n!U" SK[        S9SSL j5       n"U" SM[         R"                  SI[        S9SSN j5       n#U" SM[         R"                  SK[        S9SSO j5       n$U" SP[        S9SSQ j5       n%U" SR[        S9SSS j5       n&U" ST[        [        ) -  S9SSU j5       n'U" SV[        SW SX9SSY j5       n(U" SZ[        S9SS[ j5       n)U" S[        S9SS\ j5       n*U" SZ[        S9SS] j5       n+U" S^[        S9SS_ j5       n,U" S^[        S9SS` j5       n-U" S[        S9SSa j5       n.U" S-Sb[        S9U" S-Sc[        S9SSd j5       5       n/U" S:[        S9SSe j5       n0U" Sf[        S9SSg j5       n1U" ShSh[        S9U" Si[        S9SSj j5       5       n2U" Sk[        S9SSl j5       n3U" Sm[        S9SSn j5       n4U" SoSo[        S9U" Sp[        S9SSq j5       5       n5U" SrSr[        S9U" Ss[        S9SSt j5       5       n6U" Su[        [        ) -  S9SSv j5       n7U" Sw[        [        ) -  S9SSx j5       n8U" Sy[        S9SSz j5       n9U" SESVSV[        [        ) -  S9SS{ j5       n:U" SES|S|[        [        ) -  S9SS} j5       n;U" SESySy[        [        ) -  S9SS~ j5       n<U" S[        S9SS j5       n=U" S[        S9SS j5       n>U" S[        S9SS j5       n?U" S[        S9SS j5       n@[%        U 5      m['        U 5      mU" [         R"                  [(        S9SS j5       nA S     SU4S jjjnBUB" S@S@5        UB" S@S5        UB" SS@5        UB" SS5                SU4S jjnCU H  u  nDnEnFWC" UEUF/UDQ76   M     T" Sh5      GS S j5       nGT" SM[         R"                  Sh5      GS S j5       nHT" So5      GS S j5       nIT" Sr5      GS S j5       nJT" SES5      GS S j5       nKT" S5      GSS j5       nLT" S5      GSS j5       nMT" S5      GSS j5       nNT" Sb5      GSS j5       nOT" Sc5      GSS j5       nPT" S5      GSS j5       nQT" S5      GSS j5       nRT" S<SbSS9GSS j5       nST" S-SbSS9GSS j5       nTT" S<ScSS9GSS j5       nUT" S-ScSS9GSS j5       nVT" S-SISS9GSS j5       nWT" S5      GSS j5       nXT" S5      GSS j5       nY GS         GSU4S jjjnZS H/  n[S H  u  n\n]WZ" U\U]W[5        M     WZ" SSW[S5        UZ" SSU[S5        M1     T" S5      GSS j5       n^T" S5      GSS j5       n_T" S[         R"                  5      GSS j5       n`T" S[         R"                  5      GSS j5       naT" S[         R"                  5      GSS j5       nbT" S[         R"                  5      GSS j5       ncGSU4S jjndUd" S5        Ud" S@5        T" S5      T" S5      GSS j5       5       neT" SSSS9GSS j5       nfT" SSSS9GSS j5       ngT" S5      T" S5      T" S5      GSS j5       5       5       nhT" S5      GSS j5       niT" S5      GSS j5       njT" S5      GSS j5       nkT" SSS9GSS j5       nlU" S[        S9SS j5       nmT" SSS9GSS j5       nnU" S[        S9SS j5       noU" SSk[        [        -  S9U" SS[        [        -  S9U" SS'[        [        -  S9SS j5       5       5       npU" SSm[        [        -  S9U" SS[        [        -  S9SS j5       5       nqU" SS[        [        -  S9SS j5       nrT" S5      GSS j5       nsT" S5      GSS j5       ntT" SESE5      GSS j5       nuT" SES5      GSS j5       nvT" SES5      GSS j5       nwT" SES5      GSS j5       nxT" SES5      GSS j5       nyT" S5      GSS j5       nzU" S[*        S9SS j5       n{S H$  n|U" U|[        [        -  [(        -  S9SS j5       n}M&     U" S[        [        -  [(        -  [*        -  S9SS j5       n~U" [         R"                  [,        S9SS j5       nU" [         R"                  [.        S9SS j5       nU" [         R"                  [0        S SX9SS j5       nU" S[0        S9SS j5       nU" S[0        S9SS j5       nU" S[0        S9SS j5       nU" S[0        S9SS j5       nU" S[0        S9U" S[0        S9SS j5       5       nU" SS[        S9SS j5       nU" SS[        S9SS j5       nU" S[        [,        -  S9SS j5       nU" [         R"                  [2        [4        ) -  S9SS j5       nU" [         R"                  [2        [4        -  S9SS j5       nU" S[        [,        -  S9SS j5       nU" S[         R"                  [        [6        ) -  S9SS j5       nU" S[        [6        -  S9SS j5       nU" S[         R"                  [        S@S9SS j5       n[9        U [:        5      $ (  z}
Vi extensions.

# Overview of Readline Vi commands:
# http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf
.)g?c                0    [         R                  " U S5      $ )Nrot_13)codecsencodestrings    rF   <lambda>"load_vi_bindings.<locals>.<lambda>  s    6==:rE   )r   uc                $    U R                   " 5       $ rK   lowerr   s    rF   r   r     
    fllnrE   )r   Uc                $    U R                   " 5       $ rK   upperr   s    rF   r   r     r   rE   )r   ~c                $    U R                   " 5       $ rK   swapcaser   s    rF   r   r     s    foo.?rE   )r   c                $    U R                   " 5       $ rK   r   r   s    rF   r   r     s    6??,rE   zc-vr~   zquoted-insertescaper   c                ~   U R                   nU R                  R                  nUR                  [        R
                  [        R                  4;   a-  U=R                  UR                  R                  5       -  sl        [        R                  Ul        [        UR                  5      (       a  UR                  5         gg)z$
Escape goes to vi navigation mode.
N)r   r   r   
input_moder)   INSERTREPLACEr]   ra   get_cursor_left_position
NAVIGATIONr   r   exit_selection)r   rh   r   s      rF   _back_to_navigation-load_vi_bindings.<locals>._back_to_navigation  s    
 %%99%%9#3#3Y5F5F"GG""foo&N&N&PP"'22&&''!!# (rE   kc                J    U R                   R                  U R                  S9  g)z
Arrow up in selection mode.
countN)r   	cursor_upr   r   s    rF   _up_in_selection*load_vi_bindings.<locals>._up_in_selection  s    
 	&&UYY&7rE   jc                J    U R                   R                  U R                  S9  g)z
Arrow down in selection mode.
r   N)r   cursor_downr   r   s    rF   _down_in_selection,load_vi_bindings.<locals>._down_in_selection  s    
 	((uyy(9rE   upzc-pc                J    U R                   R                  U R                  S9  g)z1
Arrow up and ControlP in navigation mode go up.
r   Nr   auto_upr   r   s    rF   _up_in_navigation+load_vi_bindings.<locals>._up_in_navigation  s     	$$599$5rE   c                L    U R                   R                  U R                  SS9  g)zL
Go up, but if we enter a new history entry, move to the start of the
line.
Tr   &go_to_start_of_line_if_history_changesNr   r   s    rF   _go_up load_vi_bindings.<locals>._go_up  s&     	$$))D 	% 	
rE   downzc-nc                J    U R                   R                  U R                  S9  g)z.
Arrow down and Control-N in navigation mode.
r   Nr   	auto_downr   r   s    rF   _go_down"load_vi_bindings.<locals>._go_down  s     	&&UYY&7rE   c                L    U R                   R                  U R                  SS9  g)zL
Go down, but if we enter a new history entry, go to the start of the line.
Tr   Nr  r   s    rF   	_go_down2#load_vi_bindings.<locals>._go_down2  s&    
 	&&))D 	' 	
rE   	backspacec                    U R                   =R                  U R                   R                  R                  U R                  S9-  sl        g)z"
In navigation-mode, move cursor.
r   N)r   r]   ra   r   r   r   s    rF   _go_left"load_vi_bindings.<locals>._go_left  s<    
 	,,  ))BBBS	
,rE   c                ~    U R                   nUR                  (       a  UR                  5         g UR                  SS9  g )NT)select_first)r   complete_statecomplete_nextstart_completionr   bs     rF   _complete_next(load_vi_bindings.<locals>._complete_next  s1      OOD1rE   c                ~    U R                   nUR                  (       a  UR                  5         gUR                  SS9  g)z$
Control-P: To previous completion.
T)select_lastN)r   r  complete_previousr  r  s     rF   _complete_prev(load_vi_bindings.<locals>._complete_prev  s5    
   !40rE   c-gzc-yc                &    SU R                   l        g)z
Accept current completion.
N)r   r  r   s    rF   _accept_completion,load_vi_bindings.<locals>._accept_completion!  s     /3+rE   zc-ec                8    U R                   R                  5         g)z6
Cancel completion. Go back to originally typed text.
N)r   cancel_completionr   s    rF   _cancel_completion,load_vi_bindings.<locals>._cancel_completion)  s    
 	..0rE   enterzaccept-linec                    U R                   nUR                  U R                  S9  U=R                  UR                  R                  SS9-  sl        g)z#
Go to the beginning of next line.
r   Tafter_whitespaceN)r   r   r   r]   ra   get_start_of_line_positionr  s     rF   _start_of_next_line-load_vi_bindings.<locals>._start_of_next_line9  sL    
   	EII&	QZZBB! C 
 	
rE   insertc                V    [         R                  U R                  R                  l        gz
Pressing the Insert key.
Nr)   r   r   r   r   r   s    rF   _insert_mode&load_vi_bindings.<locals>._insert_modeH  s    
 )2(8(8		%rE   c                V    [         R                  U R                  R                  l        gr0  )r)   r   r   r   r   r   s    rF   _navigation_mode*load_vi_bindings.<locals>._navigation_modeO  s    
 )2(<(<		%rE   ac                    U R                   =R                  U R                   R                  R                  5       -  sl        [        R
                  U R                  R                  l        g rK   )	r   r]   ra   get_cursor_right_positionr)   r   r   r   r   r   s    rF   _aload_vi_bindings.<locals>._aV  sM     	,,  ))CCE	
, )2(8(8		%rE   Ac                    U R                   =R                  U R                   R                  R                  5       -  sl        [        R
                  U R                  R                  l        g rK   )	r   r]   ra   get_end_of_line_positionr)   r   r   r   r   r   s    rF   _Aload_vi_bindings.<locals>._A_  sK    ,,  ))BBD	
, )2(8(8		%rE   Cc                   U R                   nUR                  UR                  R                  5       S9nU R                  R
                  R                  U5        [        R                  U R                  R                  l
        g)zG
Change to end of line.
Same as 'c$' (which is implemented elsewhere.)
r   N)r   deletera   r>  r   	clipboardset_textr)   r   r   r   r   rh   deleteds      rF   _change_until_end_of_line3load_vi_bindings.<locals>._change_until_end_of_linef  s\     %%--foo&N&N&P-Q		$$W-(1(8(8		%rE   cSc                   U R                   n[        UR                  R                  [        R
                  5      nU R                  R                  R                  U5        U=R                  UR                  R                  SS9-  sl	        UR                  UR                  R                  5       S9  [        R                  U R                  R                  l        g)z
Change current line
Tr)  r   N)r   r   ra   current_liner.   rS   r   rD  set_datar]   r+  rC  r>  r)   r   r   r   )r   rh   datas      rF   _change_current_line.load_vi_bindings.<locals>._change_current_liner  s     %% V__99=;N;NO		$$T* 	&//"L"L! #M #
 	
 	FOODDFG(1(8(8		%rE   Dc                    U R                   nUR                  UR                  R                  5       S9nU R                  R
                  R                  U5        g)z8
Delete from cursor position until the end of the line.
r   N)r   rC  ra   r>  r   rD  rE  rF  s      rF   _delete_until_end_of_line3load_vi_bindings.<locals>._delete_until_end_of_line  sD    
 %%--foo&N&N&P-Q		$$W-rE   dc           	        U R                   nUR                  R                  nSR                  USUR                  R                   5      nSR                  UUR                  R                  UR                  R                  U R
                  -    5      nSR                  X!R                  R                  U R
                  -   S 5      nU(       a  U(       a  US-   n[        X5-   [        U5      [        U5      -   [        UR                  S5      5      -
  S9Ul        U R                  R                  R                  [        U[        R                  5      5        g)z,
Delete line. (Or the following 'n' lines.)

N )rp   r]   )r   ra   r`   joincursor_position_rowr   r   r_   lstripr   rD  rN  r   r.   rS   )r   rh   r`   beforerG  afters         rF   _delete_line&load_vi_bindings.<locals>._delete_line  s   
 %% %%5!F6??#F#FGH))33foo6Y6Y))7
 		% C Ceii O QRS ed]F #K#e*4s5<<;L7MM
 			$$]7M<O<O%PQrE   xc                    U R                   R                  5       nU R                  R                  R	                  U5        g)z*
Cut selection.
('x' is not an operator.)
N)r   rq   r   rD  rN  )r   rs   s     rF   _cutload_vi_bindings.<locals>._cut  s0     --;;=		$$^4rE   ic                V    [         R                  U R                  R                  l        g rK   r1  r   s    rF   _iload_vi_bindings.<locals>._i  s    (1(8(8		%rE   Ic                    [         R                  U R                  R                  l        U R
                  =R                  U R
                  R                  R                  SS9-  sl        g )NTr)  )	r)   r   r   r   r   r   r]   ra   r+  r   s    rF   _Iload_vi_bindings.<locals>._I  sT    (1(8(8		%,,  ))DD!% E 	
,rE   Fc                r   U R                   n/ nU(       a  SS jnOSS jn[        UR                  R                  5       5       H1  u  pVUR	                  U" U5      5        US:X  d  M$  U" U5      Ul        M3     X2l        [        R                  U R                  R                  l        UR                  5         g)z!
Insert in block selection mode.
c                    U S   $ r   r?   from_tos    rF   get_posDload_vi_bindings.<locals>.insert_in_block_selection.<locals>.get_pos      qz!rE   c                    U S   $ )Nr   r?   ro  s    rF   rq  rr    rs  rE   r   N)rp  rx   rw   rv   )r   	enumeratera   selection_rangesappendr]   multiple_cursor_positionsr)   INSERT_MULTIPLEr   r   r   r   )r   r^  r   	positionsrq  re  rp  s          rF   insert_in_block_selection3load_vi_bindings.<locals>.insert_in_block_selection  s    
 ## 	"
" $DMM$B$B$DEJAWW-.Av'.w'7$ F
 *3& )2(A(A		%rE   c                   > T" U SS9  g )NT)r^  r?   )r   r{  s    rF   _append_after_block-load_vi_bindings.<locals>._append_after_block  s    !%t4rE   Jc                p    [        U R                  5       H  nU R                  R                  5         M     g)z
Join lines.
Nranger   r   join_next_liner   re  s     rF   _joinload_vi_bindings.<locals>._join  s)    
 uyy!A  //1 "rE   r   c                n    [        U R                  5       H  nU R                  R                  SS9  M     g)z
Join lines without space.
r   	separatorNr  r  s     rF   _join_nospace'load_vi_bindings.<locals>._join_nospace  s.    
 uyy!A  //"/= "rE   c                8    U R                   R                  5         g)z
Join selected lines.
Nr   join_selected_linesr   s    rF   _join_selection)load_vi_bindings.<locals>._join_selection  s    
 	002rE   c                6    U R                   R                  SS9  g)z$
Join selected lines without space.
r   r  Nr  r   s    rF   _join_selection_nospace1load_vi_bindings.<locals>._join_selection_nospace  s    
 	0020>rE   pc                    U R                   R                  U R                  R                  R	                  5       U R
                  [        R                  S9  g)z
Paste after
r   
paste_modeN)r   paste_clipboard_datar   rD  get_datar   r,   VI_AFTERr   s    rF   _paste load_vi_bindings.<locals>._paste  sC    
 	11II((*)) )) 	2 	
rE   Pc                    U R                   R                  U R                  R                  R	                  5       U R
                  [        R                  S9  g)z
Paste before
r  N)r   r  r   rD  r  r   r,   	VI_BEFOREr   s    rF   _paste_before'load_vi_bindings.<locals>._paste_before  sC    
 	11II((*)) ** 	2 	
rE   "c                   U R                   S   R                  nU[        ;   aj  U R                  R                  R
                  R                  U5      nU(       a3  U R                  R                  X R                  [        R                  S9  ggg)z
Paste from named register.
r3   r  N)key_sequencerO  vi_register_namesr   r   named_registersgetr   r  r   r,   r  r   rJ  rO  s      rF   _paste_register)load_vi_bindings.<locals>._paste_register  sx    
 q!&&!!99%%5599!<D$$99		i6H6H :   "rE   c                   U R                   S   R                  nU[        ;   aj  U R                  R                  R
                  R                  U5      nU(       a3  U R                  R                  X R                  [        R                  S9  ggg)z%
Paste (before) from named register.
r3   r  N)r  rO  r  r   r   r  r  r   r  r   r,   r  r  s      rF   _paste_register_before0load_vi_bindings.<locals>._paste_register_before)  sx    
 q!&&!!99%%5599!<D$$99		i6I6I :   "rE   rc                V    [         R                  U R                  R                  l        g)z
Go to 'replace-single'-mode.
N)r)   REPLACE_SINGLEr   r   r   r   s    rF   _replace"load_vi_bindings.<locals>._replace6  s    
 )2(@(@		%rE   Rc                V    [         R                  U R                  R                  l        g)z
Go to 'replace'-mode.
N)r)   r   r   r   r   r   s    rF   _replace_mode'load_vi_bindings.<locals>._replace_mode=  s    
 )2(9(9		%rE   sc                    U R                   R                  U R                  S9nU R                  R                  R                  U5        [        R                  U R                  R                  l	        g)zG
Substitute with new text
(Delete character(s) and go to insert mode.)
r   N)
r   rC  r   r   rD  rE  r)   r   r   r   r   rp   s     rF   _substitute%load_vi_bindings.<locals>._substituteD  sQ     ##***;		$$T*(1(8(8		%rE   r   c                    g)NFr?   es    rF   r   r   N  s    5rE   )r~   save_beforec                p    [        U R                  5       H  nU R                  R                  5         M     g rK   )r  r   r   undor  s     rF   _undoload_vi_bindings.<locals>._undoN  s'    uyy!A  %%' "rE   Vc                R    U R                   R                  [        R                  S9  g)z
Start lines selection.
rV   N)r   start_selectionr.   rS   r   s    rF   _visual_line&load_vi_bindings.<locals>._visual_lineS  !    
 	,,M<O<O,PrE   c                R    U R                   R                  [        R                  S9  g)z
Enter block selection mode.
r  N)r   r  r.   r>   r   s    rF   _visual_block'load_vi_bindings.<locals>._visual_blockZ  r  rE   c                    U R                   R                  nUbO  UR                  [        R                  :w  a  [        R                  Ul        gU R                   R                  5         gg)zV
Exit line selection mode, or go from non line selection mode to line
selection mode.
N)r   r   rN   r.   rS   r   r   r   s     rF   _visual_line2'load_vi_bindings.<locals>._visual_line2a  T      ..>>&##}':'::'4':':$$$335	 'rE   vc                R    U R                   R                  [        R                  S9  g)z!
Enter character selection mode.
r  N)r   r  r.   rT   r   s    rF   _visual!load_vi_bindings.<locals>._visualo  s!    
 	,,M<T<T,UrE   c                    U R                   R                  nUbO  UR                  [        R                  :w  a  [        R                  Ul        gU R                   R                  5         gg)ze
Exit character selection mode, or go from non-character-selection mode
to character selection mode.
N)r   r   rN   r.   rT   r   r  s     rF   _visual2"load_vi_bindings.<locals>._visual2v  sT      ..>>&##}'?'??'4'?'?$$$335	 'rE   c                    U R                   R                  nUbO  UR                  [        R                  :w  a  [        R                  Ul        gU R                   R                  5         gg)zY
Exit block selection mode, or go from non block selection mode to block
selection mode.
N)r   r   rN   r.   r>   r   r  s     rF   _visual_block2(load_vi_bindings.<locals>._visual_block2  r  rE   wWc                    U R                   nUR                  (       aI  UR                  R                  [        R                  :X  a   [        R
                  UR                  l        ggg)z@
Switch from visual linewise mode to visual characterwise mode.
N)r   r   rN   r.   rS   rT   r   rh   s     rF   _visual_auto_word+load_vi_bindings.<locals>._visual_auto_word  sS     %% ""&&++}/B/BB*7*B*BF""' C #rE   c                   U R                   n[        U R                  [        UR                  R
                  5      5      nU(       a?  U R                   R                  US9nU R                  R                  R                  U5        gg)z
Delete character.
r   N)
r   minr   r_   ra   current_line_after_cursorrC  r   rD  rE  r   r   r   rp   s       rF   _delete!load_vi_bindings.<locals>._delete  sg    
 ##EIIs4==#J#JKL''..U.;DII((. rE   Xc                   U R                   n[        U R                  [        UR                  R
                  5      5      nU(       a?  U R                   R                  US9nU R                  R                  R                  U5        g g )Nr   )
r   r  r   r_   ra   current_line_before_cursordelete_before_cursorr   rD  rE  r  s       rF   _delete_before_cursor/load_vi_bindings.<locals>._delete_before_cursor  se    ##EIIs4==#K#KLM''<<5<IDII((. rE   yYc                    SR                  U R                  R                  R                  SU R                   5      nU R
                  R                  R                  [        U[        R                  5      5        g)z
Yank the whole line.
rX  N)rZ  r   ra   lines_from_currentr   r   rD  rN  r   r.   rS   r  s     rF   
_yank_line$load_vi_bindings.<locals>._yank_line  sT     yy--66II+EIIVW		$$]49L9L%MNrE   +c                    U R                   nU=R                  UR                  R                  U R                  S9-  sl        U=R                  UR                  R                  SS9-  sl        g)z+
Move to first non whitespace of next line
r   Tr)  N)r   r]   ra   get_cursor_down_positionr   r+  r  s     rF   
_next_line$load_vi_bindings.<locals>._next_line  sk    
 %%&//"J"J)) #K #
 	
 	&//"L"L! #M #
 	
rE   -c                    U R                   nU=R                  UR                  R                  U R                  S9-  sl        U=R                  UR                  R                  SS9-  sl        g)z/
Move to first non whitespace of previous line
r   Tr)  N)r   r]   ra   get_cursor_up_positionr   r+  r  s     rF   
_prev_line$load_vi_bindings.<locals>._prev_line  sk    
 %%&//"H"H)) #I #
 	
 	&//"L"L! #M #
 	
rE   >zc-tc                x    U R                   nUR                  R                  n[        XX R                  -   5        g)z
Indent lines.
N)r   ra   r[  r   r   )r   rh   current_rows      rF   _indent!load_vi_bindings.<locals>._indent  s/     %%oo99vK))$;<rE   <zc-dc                    U R                   R                  R                  n[        U R                   XU R                  -   5        g)z
Unindent lines.
N)r   ra   r[  r   r   )r   r  s     rF   	_unindent#load_vi_bindings.<locals>._unindent  s4     **33GG%%{%))4KLrE   Oc                    U R                   R                  [        5       (       + S9  [        R                  U R
                  R                  l        g)z*
Open line above and enter insertion mode
copy_marginN)r   insert_line_abover   r)   r   r   r   r   r   s    rF   _open_above%load_vi_bindings.<locals>._open_above  8    
 	..};N.O(1(8(8		%rE   oc                    U R                   R                  [        5       (       + S9  [        R                  U R
                  R                  l        g)z*
Open line below and enter insertion mode
r  N)r   insert_line_belowr   r)   r   r   r   r   r   s    rF   _open_below%load_vi_bindings.<locals>._open_below  r  rE   r   c                    U R                   nUR                  R                  nUb&  US:w  a  UR                  UR	                  5       SS9  ggg)z<
Reverse case of current character and move cursor forward.
NrX  T	overwrite)r   ra   current_charinsert_textr   )r   rh   rJ  s      rF   _reverse_case'load_vi_bindings.<locals>._reverse_case  sI    
 %%OO((=Q$Yqzz|t< '=rE   c                @    U R                   nUR                  S 5        g)z
Lowercase current line.
c                "    U R                  5       $ rK   r   r  s    rF   r   ;load_vi_bindings.<locals>._lowercase_line.<locals>.<lambda>
  
    aggirE   Nr   transform_current_liner   r   s     rF   _lowercase_line)load_vi_bindings.<locals>._lowercase_line      
 ####$78rE   r   c                @    U R                   nUR                  S 5        g)z
Uppercase current line.
c                "    U R                  5       $ rK   r   r  s    rF   r   ;load_vi_bindings.<locals>._uppercase_line.<locals>.<lambda>  r!  rE   Nr"  r$  s     rF   _uppercase_line)load_vi_bindings.<locals>._uppercase_line  r'  rE   c                @    U R                   nUR                  S 5        g)z 
Swap case of the current line.
c                "    U R                  5       $ rK   r   r  s    rF   r   :load_vi_bindings.<locals>._swapcase_line.<locals>.<lambda>  s
    ajjlrE   Nr"  r$  s     rF   _swapcase_line(load_vi_bindings.<locals>._swapcase_line  s    
 ####$:;rE   #c                    U R                   nU R                  R                  nUR                  R	                  5       Ul        [        R                  Ul        UR                  X R                  SS9  g)z)
Go to previous occurrence of this word.
Fr   include_current_positionN)r   r   current_search_statera   get_word_under_cursorrp   r+   BACKWARD	directionapply_searchr   r   r  search_states      rF   _prev_occurrence*load_vi_bindings.<locals>._prev_occurrence  sU    
   yy55JJ<<>!0!9!9	|99uUrE   *c                    U R                   nU R                  R                  nUR                  R	                  5       Ul        [        R                  Ul        UR                  X R                  SS9  g)z%
Go to next occurrence of this word.
Fr4  N)r   r   r6  ra   r7  rp   r+   FORWARDr9  r:  r   r;  s      rF   _next_occurrence*load_vi_bindings.<locals>._next_occurrence)  sU    
   yy55JJ<<>!0!8!8	|99uUrE   (c                    g rK   r?   r   s    rF   _begin_of_sentence,load_vi_bindings.<locals>._begin_of_sentence6       	rE   )c                    g rK   r?   r   s    rF   _end_of_sentence*load_vi_bindings.<locals>._end_of_sentence<  rH  rE   c                L    U R                   R                  R                  5         g)z6
Unknown key binding while waiting for a text object.
N)r   outputbellr   s    rF   _unknown_text_object.load_vi_bindings.<locals>._unknown_text_objectE  s    
 			rE   c                   >^ ^ T(       a  S[         R                  ST    4nOST    nT" US[        ) 06SU U4S jj5       ng)z
Delete and change operators.

:param delete_only: Create an operator that deletes, but doesn't go to insert mode.
:param with_register: Copy the deleted text to this named register instead of the clipboard.
r  cdr~   c                  > S nU R                   nU(       a  UR                  U5      u  pBXCl        U(       a  UR                  (       ar  T(       aF  U R                  S   R
                  nU[        ;   a"  X R                  R                  R                  U'   O%U R                  R                  R                  U5        T(       d*  [        R                  U R                  R                  l        g g r   )r   rt   ra   rp   r  rO  r  r   r   r  rD  rN  r)   r   r   )r   r   rs   r   rr   reg_namedelete_onlywith_registers         rF   delete_or_change_operator_load_vi_bindings.<locals>.create_delete_and_change_operators.<locals>.delete_or_change_operator_  s    !N''D/:t/D, , ."5"5 $11!499H#44GU		**::8DII''00@ 090@0@		""- rE   Nr   r   r   rH   rw   r   )r*   Anyr   )rV  rW  handler_keysrX  operators   ``  rF   "create_delete_and_change_operators<load_vi_bindings.<locals>.create_delete_and_change_operatorsP  sG     4+<=L,L	<	6	6	A 
7	ArE   Tc                >   >^ T" USU [         ) -  06SU4S jj5       ng )Nr~   c                "  > U R                   nUR                  UR                  5      u  p4X4:  a`  UR                  UR                  U-   UR                  U-   T5        U=R                  UR
                  =(       d    UR                  -  sl        gg)z@
Apply transformation (uppercase, lowercase, rot13, swap case).
N)r   re   ra   transform_regionr]   rM   rL   )r   r   r   rL   rM   transform_funcs        rF   rk   =load_vi_bindings.<locals>.create_transform_handler.<locals>._}  s    
 ''D$33DMMBJE{%%((50((3." $$(L;;L;LL$ rE   rZ  )r   )r~   rc  r7  rk   r]  s    `  rF   create_transform_handler2load_vi_bindings.<locals>.create_transform_handlerz  s*     
1	4V|m3	4	M 
5	MrE   c                    UR                  U R                  5      u  p#UR                  (       a&  U R                  R                  R                  U5        gg)z
Yank operator. (Copy text.)
N)rt   r   rp   r   rD  rN  )r   r   rk   rs   s       rF   _yankload_vi_bindings.<locals>._yank  sA    
 (OOE,@,@AII((8 rE   c                    U R                   S   R                  nU[        ;   a@  UR                  U R                  5      u  p4X@R
                  R                  R                  U'   gg)z#
Yank selection to named register.
r3   N)r  rO  r  rt   r   r   r   r  )r   r   rJ  rk   rs   s        rF   _yank_to_register+load_vi_bindings.<locals>._yank_to_register  sW    
 q!&&!! +0D0D EA4BII..q1 "rE   c                r    U R                   nUR                  U5      u  p4[        X#US-   U R                  S9  g)z	
Indent.
r3   r   N)r   rl   r   r   r   r   r   ri   rj   s        rF   _indent_text_object-load_vi_bindings.<locals>._indent_text_object  s5    
 ##006	tBF%))4rE   c                r    U R                   nUR                  U5      u  p4[        X#US-   U R                  S9  g)z
Unindent.
r3   r   N)r   rl   r   r   rn  s        rF   _unindent_text_object/load_vi_bindings.<locals>._unindent_text_object  s5    
 ##006	b1fEII6rE   qc                Z    U R                   nUR                  U5      u  p4[        X#U5        g)z
Reshape text.
N)r   rl   r   rn  s        rF   _reshape"load_vi_bindings.<locals>._reshape  s+    
 ##006	T"%rE   r  c                    [        U R                  R                  R                  U R                  S9=(       d    S5      $ )z
Move one word or token left.
r   r   rH   r   ra   find_start_of_previous_wordr   r   s    rF   _bload_vi_bindings.<locals>._b  s:    
   ))EEEIIEV 
 	
rE   Bc                    [        U R                  R                  R                  U R                  SS9=(       d    S5      $ )z
Move one non-blank word left
Tr   WORDr   ry  r   s    rF   _Bload_vi_bindings.<locals>._B  sD    
   ))EEiid F   	
 	
rE   $c                \    [        U R                  R                  R                  5       5      $ )z<
'c$', 'd$' and '$':  Delete/change/move until end of line.
)rH   r   ra   r>  r   s    rF   _dollar!load_vi_bindings.<locals>._dollar  s$    
 %..77PPRSSrE   c                    [        U R                  R                  R                  U R                  S9=(       d$    U R                  R                  R                  5       5      $ )z?
'word' forward. 'cw', 'dw', 'w': Delete/change/move one word.
r   rH   r   ra   find_next_word_beginningr   get_end_of_document_positionr   s    rF   _word_forward'load_vi_bindings.<locals>._word_forward  sP    
   ))BBBS L##,,IIK
 	
rE   c                    [        U R                  R                  R                  U R                  SS9=(       d$    U R                  R                  R                  5       5      $ )z?
'WORD' forward. 'cW', 'dW', 'W': Delete/change/move one WORD.
Tr  r  r   s    rF   _WORD_forward'load_vi_bindings.<locals>._WORD_forward  sZ    
   ))BBiid C  L ##,,IIK	
 	
rE   r  c                    U R                   R                  R                  U R                  S9n[	        U(       a  US-
  OS[
        R                  S9$ )z 
End of 'word': 'ce', 'de', 'e'
r   r3   r   r   r   ra   find_next_word_endingr   rH   r9   r<   r   rM   s     rF   _end_of_word&load_vi_bindings.<locals>._end_of_word  sB    
 ""++AA		ARS#'an6N6NOOrE   c                    U R                   R                  R                  U R                  SS9n[	        U(       a  US-
  OS[
        R                  S9$ )z 
End of 'WORD': 'cE', 'dE', 'E'
Tr  r3   r   r   r  r  s     rF   _end_of_WORD&load_vi_bindings.<locals>._end_of_WORD   sL    
 ""++AA))$ B 
 S#'an6N6NOOrE   r   c                d    U R                   R                  R                  5       u  p[        X5      $ )z
Inner 'word': ciw and diw
r   ra   find_boundaries_of_current_wordrH   r   rL   rM   s      rF   _inner_word%load_vi_bindings.<locals>._inner_word
  s+    
 ))22RRT
%%%rE   c                b    U R                   R                  R                  SS9u  p[        X5      $ )z
A 'word': caw and daw
T)include_trailing_whitespacer  r  s      rF   _a_word!load_vi_bindings.<locals>._a_word  s8    
 ))22RR(, S 

 %%%rE   c                b    U R                   R                  R                  SS9u  p[        X5      $ )z
Inner 'WORD': ciW and diW
T)r  r  r  s      rF   _inner_WORD%load_vi_bindings.<locals>._inner_WORD  s8    
 ))22RR S 

 %%%rE   c                d    U R                   R                  R                  SSS9u  p[        X5      $ )z
A 'WORD': caw and daw
T)r  r  r  r  s      rF   _a_WORD!load_vi_bindings.<locals>._a_WORD&  s:    
 ))22RR4 S 

 %%%rE   c                    U R                   R                  R                  5       nU R                   R                  R                  U R                  S9n[        X5      $ )z
Auto paragraph.
r   )r   ra   start_of_paragraphend_of_paragraphr   rH   r  s      rF   
_paragraph$load_vi_bindings.<locals>._paragraph0  sL    
 $$--@@B""++<<599<M%%%rE   ^c                Z    [        U R                  R                  R                  SS95      $ )z9'c^', 'd^' and '^': Soft start of line, after whitespace.Tr)  rH   r   ra   r+  r   s    rF   _start_of_line(load_vi_bindings.<locals>._start_of_line9  s4       ))DD!% E 
 	
rE   0c                Z    [        U R                  R                  R                  SS95      $ )z
'c0', 'd0': Hard start of line, before whitespace.
(The move '0' key is implemented elsewhere, because a '0' could also change the `arg`.)
Fr)  r  r   s    rF   _hard_start_of_line-load_vi_bindings.<locals>._hard_start_of_lineB  s4       ))DD!& E 
 	
rE   c                   >^ ^^ SUU U4S jjnUc#  T" ST   T SS9" U5        T" ST   TSS9" U5        gT" ST   USS9" U5        g)z
Delete/Change string between this start and stop character. But keep these characters.
This implements all the ci", ci<, ci{, ci(, di", di<, ca", ca<, ... combinations.
c                  > TT:X  aI  U R                   R                  R                  TSS9nU R                   R                  R                  TSS9nOLU R                   R                  R	                  TT5      nU R                   R                  R                  TT5      nUb"  Ub  T(       a  SOSn[        US-   U-
  X#-   5      $ [        S5      $ )NF)in_current_liner   r3   )r   ra   find_backwardsfindfind_enclosing_bracket_leftfind_enclosing_bracket_rightrH   )r   rL   rM   offsetci_endci_startinners       rF   handler?load_vi_bindings.<locals>.create_ci_ca_handles.<locals>.handlerW  s    6!,,55DDe E  **3388QV8W ,,55QQf **33PPf  S_#!%!)f"4clCC "!}$rE   NaiTr  r   r   rw   rH   r?   )r  r  r  keyr  r   s   ```  rF   create_ci_ca_handles.load_vi_bindings.<locals>.create_ci_ca_handlesN  sS    	% 	%. ;UXtDWMUVTB7KUS$?HrE   )FT))r  r  )'r  )`r  )[])r  r   ){})rD  rI  r  r  c                t    U R                   R                  R                  U R                  SS9n[	        U5      $ )zQ
Move to previous blank-line separated section.
Implements '{', 'c{', 'd{', 'y{'
T)r   r]  )r   ra   r  r   rH   r   indexs     rF   _previous_section+load_vi_bindings.<locals>._previous_section  s<     $$--@@))D A 
 %  rE   c                t    U R                   R                  R                  U R                  SS9n[	        U5      $ )zM
Move to next blank-line separated section.
Implements '}', 'c}', 'd}', 'y}'
T)r   r^  )r   ra   r  r   rH   r  s     rF   _next_section'load_vi_bindings.<locals>._next_section  s;     $$-->>))4 ? 
 %  rE   fc                &   [        U R                  S5      U R                  R                  l        U R
                  R                  R                  U R                  SU R                  S9nU(       a  [        U[        R                  S9$ [        S5      $ )zp
Go to next occurrence of character. Typing 'fx' will move the
cursor to the next occurrence of character. 'x'.
FTr  r   r   r   r(   rO  r   r   last_character_findr   ra   r  r   rH   r9   r<   r   matchs     rF   _find_next_occurrence/load_vi_bindings.<locals>._find_next_occurrence  ss     2?uzz51Q		.$$--22JJEII 3 
 e.*B*BCCa= rE   Fc                    [        U R                  S5      U R                  R                  l        [        U R                  R                  R                  U R                  SU R                  S9=(       d    S5      $ )zx
Go to previous occurrence of character. Typing 'Fx' will move the
cursor to the previous occurrence of character. 'x'.
Tr  r   )
r(   rO  r   r   r  rH   r   ra   r  r   r   s    rF   _find_previous_occurrence3load_vi_bindings.<locals>._find_previous_occurrence  sf     2?uzz41P		.  ))88

D		 9   	
 	
rE   tc                ,   [        U R                  S5      U R                  R                  l        U R
                  R                  R                  U R                  SU R                  S9nU(       a  [        US-
  [        R                  S9$ [        S5      $ )zA
Move right to the next occurrence of c, then one char backward.
FTr  r3   r   r   r  r  s     rF   _tload_vi_bindings.<locals>._t  sw    
 2?uzz51Q		.$$--22JJEII 3 
 eain.F.FGGa= rE   Tc                   [        U R                  S5      U R                  R                  l        U R
                  R                  R                  U R                  SU R                  S9n[        U(       a	  US-   5      $ S5      $ )zC
Move left to the previous occurrence of c, then one char forward.
Tr  r3   r   )
r(   rO  r   r   r  r   ra   r  r   rH   r  s     rF   _Tload_vi_bindings.<locals>._T  sl    
 2?uzz41P		.$$--<<JJEII = 
 u%!)44!44rE   c                @   >^  T" T (       a  SOS5      SU 4S jj5       ng)z
Create ',' and ';' commands.
,;c                  > SnU R                   R                  n[        R                  nUR                  (       a  UR                  R
                  nUR                  R                  nT(       a  U(       + nU(       a0  U R                  R                  R                  USU R                  S9nO?U R                  R                  R                  USU R                  S9n[        R                  nU(       a	  [        XS9$ [        S5      $ )z*
Repeat the last 'f'/'F'/'t'/'T' command.
r   Tr  r   )r   r   r9   r;   r  	character	backwardsr   ra   r  r   r  r<   rH   )r   posr   rN   charr  reverses         rF   rk   +load_vi_bindings.<locals>.repeat.<locals>._  s    
  Cyy))H!++D++33==$88BB	$-I..77FFd%)) G C  ..77<<d%)) = C *33D!#11!!}$rE   Nr  r?   )r  rk   r   s   ` rF   repeat load_vi_bindings.<locals>.repeat  s     
 
GS	-	% 
.	%rE   hleftc                n    [        U R                  R                  R                  U R                  S95      $ )z*
Implements 'ch', 'dh', 'h': Cursor left.
r   )rH   r   ra   r   r   r   s    rF   _leftload_vi_bindings.<locals>._left  s2       ))BBBS
 	
rE   )r   r   c                    [        U R                  R                  R                  U R                  S9[
        R                  S9$ )z,
Implements 'cj', 'dj', 'j', ... Cursor up.
r   r   )rH   r   ra   r  r   r9   r=   r   s    rF   _download_vi_bindings.<locals>._down   s;       ))BBBS((
 	
rE   c                    [        U R                  R                  R                  U R                  S9[
        R                  S9$ )z,
Implements 'ck', 'dk', 'k', ... Cursor up.
r   r   )rH   r   ra   r  r   r9   r=   r   s    rF   _upload_vi_bindings.<locals>._up  s;    
   ))@@uyy@Q((
 	
rE   lrY  rightc                n    [        U R                  R                  R                  U R                  S95      $ )z<
Implements 'cl', 'dl', 'l', 'c ', 'd ', ' '. Cursor right.
r   )rH   r   ra   r9  r   r   s    rF   _right load_vi_bindings.<locals>._right  s2       ))CC%))CT
 	
rE   Hc                |   U R                   R                  R                  nU R                  nU(       aR  UR                  (       aA  UR
                  R                  UR                  R                  SS9S5      UR                  -
  nO [        UR
                  R                  5      * n[        U[        R                  S9$ )zb
Moves to the start of the visible region. (Below the scroll offset.)
Implements 'cH', 'dH', 'H'.
T)after_scroll_offsetr   r   )r   layoutcurrent_windowr   render_infora   r^   first_visible_liner]   r_   text_before_cursorrH   r9   r=   r   r  r  r  s       rF   _top_of_screen(load_vi_bindings.<locals>._top_of_screen"  s     II++   

55MM444NPQ ##$  qzz4455C#N$;$;<<rE   Mc                ~   U R                   R                  R                  nU R                  nU(       aS  UR                  (       aB  UR
                  R                  UR                  R                  5       S5      UR                  -
  nO [        UR
                  R                  5      * n[        U[        R                  S9$ )zX
Moves cursor to the vertical center of the visible region.
Implements 'cM', 'dM', 'M'.
r   r   )r   r  r  r   r  ra   r^   center_visible_liner]   r_   r  rH   r9   r=   r  s       rF   _middle_of_screen+load_vi_bindings.<locals>._middle_of_screen:  s     II++   

55MM557 ##$  qzz4455C#N$;$;<<rE   Lc                z   U R                   R                  R                  nU R                  nU(       aR  UR                  (       aA  UR
                  R                  UR                  R                  SS9S5      UR                  -
  nO[        UR
                  R                  5      n[        U[        R                  S9$ )zD
Moves to the end of the visible region. (Above the scroll offset.)
T)before_scroll_offsetr   r   )r   r  r  r   r  ra   r^   last_visible_liner]   r_   text_after_cursorrH   r9   r=   r  s       rF   _end_of_screen(load_vi_bindings.<locals>._end_of_screenR  s    
 II++   

55MM333NPQ ##$  ajj223C#N$;$;<<rE   nc                    U R                   nU R                  R                  nUR                  USU R                  S9n[        X1R                  -
  5      $ )z
Search next.
Fr5  r   r   r   r6  get_search_positionr   rH   r]   r   r   r<  r]   s       rF   _search_next&load_vi_bindings.<locals>._search_nexti  sT    
 ##yy55225		 3 
 /,@,@@AArE   c                z    U R                   R                  nU R                  R                  USU R                  S9  g)zB
Search next in navigation mode. (This goes through the history.)
Fr"  Nr   r6  r   r:  r   r   r<  s     rF   _search_next2'load_vi_bindings.<locals>._search_next2v  s7    
 yy55))5		 	* 	
rE   Nc                    U R                   nU R                  R                  nUR                  U) SU R                  S9n[        X1R                  -
  5      $ )z
Search previous.
Fr"  r#  r%  s       rF   _search_previous*load_vi_bindings.<locals>._search_previous  sV    
 ##yy5522ME 3 
 /,@,@@AArE   c                |    U R                   R                  nU R                  R                  U) SU R                  S9  g)zF
Search previous in navigation mode. (This goes through the history.)
Fr"  Nr)  r*  s     rF   _search_previous2+load_vi_bindings.<locals>._search_previous2  s9    
 yy55))ME 	* 	
rE   zc                    U R                   nUR                  R                  U R                  R                  R
                  l        g)zT
Scrolls the window to makes the current line the first line in the visible region.
N)r   ra   r[  r   r  r  vertical_scrollr  s     rF   _scroll_top%load_vi_bindings.<locals>._scroll_top  s1       :;**:X:X		''7rE   c                N    SU R                   R                  R                  l        g)zS
Scrolls the window to makes the current line the last line in the visible region.
r   N)r   r  r  r6  r   s    rF   _scroll_bottom(load_vi_bindings.<locals>._scroll_bottom  s     ;<		''7rE   c                   U R                   R                  R                  nU R                  nU(       a  UR                  (       ay  UR                  nUR
                  S-  n[        SUR                  R                  S-
  5      nSnUS:  a,  UR                  U5      nXg-   U:  a
  Xg-  nUS-  nOOUS:  a  M,  XQl
        ggg)z)
Center Window vertically around cursor.
r/   r   r3   N)r   r  r  r   r  window_heightmaxra   r[  get_height_for_liner6  )r   r  r  infoscroll_heightr  heightline_heights           rF   _scroll_center(load_vi_bindings.<locals>._scroll_center  s    
 II++  ==D !..!3MAqzz559:AFa%"66q9'-7)FFA a% !"% 1rE   %c                   U R                   nU R                  (       a  SU R                  s=:  a  S::  a}  O  OzUR                  R	                  [        U R                  UR                  R                  -  S-
  S-  5      S5      n[        X!R                  R                  -
  [        R                  S9$ [        S5      $ UR                  R                  5       nU(       a  [        U[        R                  S9$ [        S5      $ )z
Implements 'c%', 'd%', '%, 'y%' (Move to corresponding bracket.)
If an 'arg' has been given, go this this % position in the file.
r   d   r3   r   )r   r   r   ra   r^   rv   
line_countrH   r]   r9   r=   find_matching_bracket_positionr<   )r   rh   absolute_indexr  s       rF   _goto_corresponding_bracket5load_vi_bindings.<locals>._goto_corresponding_bracket  s     %%:: 599##!'!K!KV__%?%??!CsJKQ" ""__%D%DD'00 
 "!}$ OOBBDE!%n.F.FGG!!}$rE   |c                x    [        U R                  R                  R                  U R                  S-
  5      5      $ )zi
Move to the n-th column (you may specify the argument n by typing it on
number keys, for example, 20|).
r3   )rH   r   ra   get_column_cursor_positionr   r   s    rF   
_to_column$load_vi_bindings.<locals>._to_column  s4       ))DDUYYQR]S
 	
rE   c                    U R                   R                  nU R                  (       aB  [        UR	                  U R
                  S-
  S5      UR                  -
  [        R                  S9$ [        UR                  5       [        R                  S9$ )zG
Go to the start of the very first line.
Implements 'gg', 'cgg', 'ygg'
r3   r   r   )
r   ra   r   rH   r^   r   r]   r9   r=   get_start_of_document_position)r   rV  s     rF   _goto_first_line*load_vi_bindings.<locals>._goto_first_line  sx       ))::,,UYY]A>ARARR#,,  0029P9P rE   rk   c                v    [        U R                  R                  R                  5       [        R
                  S9$ )z9
Go to last non-blank of line.
'g_', 'cg_', 'yg_', etc..
r   )rH   r   ra   'last_non_blank_of_current_line_positionr9   r<   r   s    rF   _goto_last_line)load_vi_bindings.<locals>._goto_last_line  s2       ))QQS))
 	
rE   c                    U R                   R                  R                  U R                  S9n[	        Ub  US-
  OS[
        R                  S9$ )zB
Go to last character of previous word.
'ge', 'cge', 'yge', etc..
r   r3   r   r   r   ra   find_previous_word_endingr   rH   r9   r<   r   prev_ends     rF   _geload_vi_bindings.<locals>._ge  sR     ''00JJ)) K 
 $0HqLan>V>V
 	
rE   c                    U R                   R                  R                  U R                  SS9n[	        Ub  US-
  OS[
        R                  S9$ )zB
Go to last character of previous WORD.
'gE', 'cgE', 'ygE', etc..
Tr  r3   r   r   r\  r^  s     rF   _gEload_vi_bindings.<locals>._gE  sT     ''00JJ))$ K 
 $0HqLan>V>V
 	
rE   mc           	        U R                   R                  R                  nU R                  nU(       a  UR                  (       a  UR                  R
                  nUR                  R                  SS9nU[        [        US-  [        UR                  R                  5      5      5      -  n[        U[        R                  S9$ [        S5      $ )zI
Like g0, but half a screenwidth to the right. (Or as much as possible.)
Fr)  r/   r   r   )r   r  r  r   r  window_widthra   r+  rv   r  r_   rM  rH   r9   r<   )r   r  r   widthrL   s        rF   _gmload_vi_bindings.<locals>._gm+  s    
 II++##MM..EMM<<e<TESUQYDMM,F,F(GHIIEe.*B*BCC!}rE   Gc                    U R                   n[        UR                  R                  UR                  R                  S-
  S5      UR
                  -
  [        R                  S9$ )z<
Go to the end of the document. (If no arg has been given.)
r3   r   r   )r   rH   ra   r^   rI  r]   r9   r=   )r   bufs     rF   
_last_line$load_vi_bindings.<locals>._last_line;  sW    
 ""LL33CLL4K4Ka4OQRS!!"((
 	
rE   c                T    U R                   R                  U R                  S-
  5        g)zP
If an argument is given, move to this line in the  history. (for
example, 15G)
r3   N)r   go_to_historyr   r   s    rF   _to_nth_history_line.load_vi_bindings.<locals>._to_nth_history_lineK  s      	**599q=9rE   	123456789c                :    U R                  U R                  5        g)z3
Always handle numerics in navigation mode as arg.
Nappend_to_arg_countrO  r   s    rF   r   load_vi_bindings.<locals>._argU  s     %%ejj1rE   c                :    U R                  U R                  5        g)z)
Zero when an argument was already give.
Nrv  r   s    rF   _0_arg load_vi_bindings.<locals>._0_arga  s     	!!%**-rE   c                L    U R                   R                  U R                  SS9  g)z!
Insert data at cursor position.
Tr  N)r   r  rO  r   s    rF   _insert_text&load_vi_bindings.<locals>._insert_textn  s!    
 	((t(DrE   c                    U R                   R                  U R                  SS9  U R                   =R                  S-  sl        [        R
                  U R                  R                  l        g)z.
Replace single character at cursor position.
Tr  r3   N)	r   r  rO  r]   r)   r   r   r   r   r   s    rF   _replace_single)load_vi_bindings.<locals>._replace_singleu  sP    
 	((t(D,,1,(1(<(<		%rE   c                $    U R                   (       + $ rK   )	is_repeatr  s    rF   r   r     s
    1;;rE   c                   U R                   nUR                  n/ nSnUR                   H3  nUR                  X$U 5        UR                  U R                  5        UnM5     UR                  X$S 5        [        UR                  5       VVs/ s H  u  pgXv-   S-   PM     nnnSR                  U5      Ul        Xl        U=R                  S-  sl        gs  snnf )zv
Insert data at multiple cursor positions at once.
(Usually a result of pressing 'I' or 'A' in block-selection mode.)
r   Nr3   r   )r   rp   rx  rw  rO  ru  rZ  r]   )	r   r   original_textrp   r  p2re  r  new_cursor_positionss	            rF   _insert_text_multiple_cursors7load_vi_bindings.<locals>._insert_text_multiple_cursors~  s     ##		 00BKK+,KK

#A 1
 	M"%& '00N0N&O 
&OFACGaK&O 	  

 GGDM	)=&! 
s   Cc                2   U R                   nUR                  nSn/ nSnUR                   HB  nUS:  a$  X&S-
     S:w  a  UR                  X%US-
   5        SnOUR                  X%U 5        UnMD     UR                  X%S 5        U(       ad  USS  Vs/ s H  n[	        U5      PM     nn[        [        U5      5      n	SR                  U5      Ul        Xl        U=R                  S-  sl        gU R                  R                  R                  5         gs  snf )	z$
Backspace, using multiple cursors.
Fr   r3   rX  TNr   )r   rp   rx  rw  r_   listr   rZ  r]   r   rN  rO  )
r   r   r  deleted_somethingrp   r  r  partlengthsr  s
             rF   _delete_before_multiple_cursors9load_vi_bindings.<locals>._delete_before_multiple_cursors  s   
 ##		 "00BAv-Q/47Mb1f56$(!MB/0A 1 	M"%&-1#2Y7YTs4yYG7#'
7(;#<  DI-A*  A% II!!# 8s   DrC  c                   U R                   nUR                  nSn/ n/ nSnUR                   H8  nUR                  X&U 5        U[	        U5      :  d  X'   S:X  a  UnM1  US-   nSnM:     UR                  X&S 5        U(       aO  USS  Vs/ s H  n[	        U5      PM     n	n[        [        U	5      5      nSR                  U5      Ul        XQl        gU R                  R                  R                  5         gs  snf )	z!
Delete, using multiple cursors.
Fr   rX  r3   TNr  r   )r   rp   rx  rw  r_   r  r   rZ  r   rN  rO  )
r   r   r  r  rp   r  r  r  r  r  s
             rF   _delete_after_multiple_cursors8load_vi_bindings.<locals>._delete_after_multiple_cursors  s    
 ##		 "!00BKK+,S''=+<+DF$(! 1 	M"%&-1#2Y7YTs4yYG7#'
7(;#<  DI-A*II!!# 8s   
C7c                "   U R                   n/ nUR                   H;  nUR                  R                  U5      S   S:  a  US-  nUR	                  U5        M=     X!l        UR                  R
                  S:  a  U=R                  S-  sl        gg)zH
Move all cursors to the left.
(But keep all cursors on the same line.)
r3   r   N)r   rx  ra   r\   rw  cursor_position_colr]   )r   r   new_positionsr  s       rF   _left_multiple(load_vi_bindings.<locals>._left_multiple  s     ##//A}}88;A>BQ  # 0
 *7&==,,q0  A%  1rE   c                f   U R                   n/ nUR                   H\  nUR                  R                  U5      u  pEU[	        UR                  R
                  U   5      :  a  US-  nUR                  U5        M^     X!l        UR                  R                  (       d  U=R                  S-  sl        gg)zI
Move all cursors to the right.
(But keep all cursors on the same line.)
r3   N)	r   rx  ra   r\   r_   r`   rw  is_cursor_at_the_end_of_liner]   )r   r   r  r  rc   columns         rF   _right_multiple)load_vi_bindings.<locals>._right_multiple  s     ##//A--CCAFKCDMM//455Q  #	 0 *7&}}99  A%  :rE   c                    g)z>
Ignore all up/down key presses when in multiple cursor mode.
Nr?   r   s    rF   _updown_multiple*load_vi_bindings.<locals>._updown_multiple  s    rE   zc-xzc-lc                8    U R                   R                  5         g)z
Pressing the ControlX - ControlL sequence in Vi mode does line
completion based on the other lines in the document and the history.
N)r   start_history_lines_completionr   s    rF   _complete_line(load_vi_bindings.<locals>._complete_line  s     	;;=rE   zc-fc                    g)z
Complete file names.
Nr?   r   s    rF   _complete_filename,load_vi_bindings.<locals>._complete_filename  s     	rE   zc-kc                :    SU R                   R                  l        g)z
Go into digraph mode.
TN)r   r   waiting_for_digraphr   s    rF   _digraph"load_vi_bindings.<locals>._digraph%  s    
 26		.rE   c                N    U R                   U R                  R                  l        g)z
First digraph symbol.
N)rO  r   r   r   r   s    rF   	_digraph1#load_vi_bindings.<locals>._digraph1,  s    
 .3ZZ		*rE   c                    U R                   R                  R                  =(       d    SU R                  4nU[        ;  a  USSS2   n[        U   nU R                   R                  R
                  [        R                  :H  nU R                  R                  [        U5      US9  SU R                   R                  l        SU R                   R                  l        SU R                   R                  l        g! [         a'    U R                   R                  R                  5          Ngf = f! SU R                   R                  l        SU R                   R                  l        f = f)z
Insert digraph.
r   Nr  r  F)r   r   r   rO  r%   r   r)   r   r   r  chrr  KeyErrorrN  rO  )r   codesymbolr  s       rF   _create_digraph)load_vi_bindings.<locals>._create_digraph3  s   
	6 		""228b

%D 8#DbDzd^F 		**559J9JJI  ,,S[I,N5:EII25:EII215EII.  	$II!!#	$ 6;EII215EII.s+   AC8 A/D, 8.D)&D, (D))D, ,8E$zc-oc                :    SU R                   R                  l        g)z,
Go into normal mode for one single action.
TN)r   r   temporary_navigation_moder   s    rF   _quick_normal_mode,load_vi_bindings.<locals>._quick_normal_modeM  s    
 8<		4rE   c                    U R                   S   R                  nU[        ;   a$  U R                  R                  nXl        SUl        gg)z
Start recording macro.
r3   r   N)r  rO  r  r   r   recording_registercurrent_recording)r   rJ  r   s      rF   _start_macro&load_vi_bindings.<locals>._start_macroT  sE    
 q!&&!!yy))H*+')+H&	 "rE   c                    U R                   R                  nUR                  (       a;  [        UR                  5      UR
                  UR                  '   SUl        SUl        gg)z
Stop recording macro.
Nr   )r   r   r  r   r  r  )r   r   s     rF   _stop_macro%load_vi_bindings.<locals>._stop_macro`  sZ    
 99%% &&DQ**EH$$X%@%@A +/H')+H& 'rE   @)r~   record_in_macroc                   U R                   S   R                  n U R                  R                  R                  U   n/ n[        UR                  5      nUR                  UR                  5        UR                  5         [        U R                  5       H'  nU R                  R                  R                  USS9  M)     g! [
         a     gf = f)a4  
Execute macro.

Notice that we pass `record_in_macro=False`. This ensures that the `@x`
keys don't appear in the recording itself. This function inserts the
body of the called macro back into the KeyProcessor, so these keys will
be added later on to the macro of their handlers have
`record_in_macro=True`.
r3   NT)first)r  rO  r   r   r  r  r$   rw  feedrp   flushr  r   key_processorfeed_multiple)r   rJ  macror   parserrk   s         rF   _execute_macro(load_vi_bindings.<locals>._execute_macroo  s     q!&&	II&&66q9E  "T[[)EJJ uyy!AII##11$d1C "  		s   #C 
CCr   )F)r   r   r^  r   rw   r   )rV  r   rW  r   rw   r   )r~   r   rc  zCallable[[str], str]r7  r   rw   r   rZ  r  rK   )
r  r   r  r   r  r   r  z
str | Nonerw   r   )r  r   rw   r   )r1   r   r   r   r   r   r   r   r   r4   r"   r   r   r   r   r   r*   r[  r   r   r#   r   r   r    r   r   r   r   r0   r   )r   handleTransformFunctionvi_transform_functionsr   r   r   r   r  r  r  r  r  r  r!  r%  r,  r2  r5  r:  r?  rH  rP  rT  r_  rc  rg  rk  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r+  r0  r=  rB  rF  rK  rP  r^  re  r   r  funcrh  rk  ro  rr  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r+  r/  r2  r7  r:  rD  rL  rQ  rU  rY  r`  rc  ri  rn  rr  r   r   rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r{  r]  r   s                                                                                                                                                   @@@rF   r5   r5     s     =LF
 eCHovxs
7KKL
 H:	
 
VX<=	VX<=	VX?@,	
7* 5(_)EFH$ $ C)*8 +8 C)*: +: D+,E,-6 . -6 C*+
 ,
 F-.E,-8 . /8 C*+
 ,
 K 23
 4
 E.)2 *2 E.)	1 *	1 E.)E.)3 * *3 E.)1 *1 7-=>M" 7=L=89+m:TUG]N-??@
 A
 H/09 19 H^,= -= C*l]:;9 <9 C*l]:;9 <9 C*l]:;	9 <	9 C/<-?@C*l]:;9 < A9" C*+. ,. C/0R 1R@ C)*5 +5 C*l]:;9 <9 C*l]:;
 <
 C*l]:; << C*l]:;5 <5 C*l]:;2 <2 C/<-?@> A> C)\M9:3 ;3 C.,>?? @? C*+
 ,
 C*+
 ,
 C3'9:
 ;
 C3'9:
 ;
 C*+A ,A C*+: ,: C*l]:;9 <9 C*J( K( C*+Q ,Q E,-Q .Q C)*6 +6 C*+V ,V C)*6 +6 E+,6 -6 C./C./
C 0 0
C C*+/ ,/ C*+/ ,/ C/0C*+O , 1O C*+

 ,

 C*+

 ,

 C/0E.)= * 1= C/0E.)M * 1M C*l]:;9 <9 C*l]:;9 <9 C*+= ,= Cc"4}"DE9 F9 Cc"4}"DE9 F9 Cc"4}"DE< F< C*+
V ,
V C*+
V ,
V C*+ ,
 C*+ ,
 )6H.|<KDHH<=  >  27#A#A*.#A	#A #AJ 'ue4&ud3&tU3&tT2MM(<MBEM	M, -
1d D-1- - c]9 9 c488S!C "C c]5 5 c]7 7 c3& & 
 
 	
 	
 T T 
 
 	
 	
 P P P P c40& 1& c40& 1& c40& 1& c40& 1& c40& 1& 
 
 	
 	
 DH$I$I"$I+/$I6@$I	$I $IL !
Hf !659!
 	S#uc2S#uc2  ! ! ! ! dhh!  ! dhh
  
 dhh!  ! dhh5  5"% "%H 4L
5M
  
 dF
	 G
 dF
 G
 
   
 = =. = =. = =, d+
B ,
B C*+
 ,
 d+
B ,
B C*+
 ,
 C/2CCDC/2CCDC!36G!GHY I E EY C/2CCDC/2CCD< E E< C/2CCD" E"6 % %: 
 
 c & c
 
 c

 

 c

 

 c  	
 	
 C : !: 	% -.

	2

	2  !225TT
.. DHH_-E .E DHH34= 5= &.
"
": K 78 $ 9 $D H45!$ 6!$F F23& 4&$ G34& 5&& D01F23 4 2
 E50> 1> E50 1 E.?:;6 <6 DHH_0F/FFG8 H8 DHH_/EEF6 G62 E.?:;< << C"48J7J"JK	, L	, C*-??@, A, C"4eLD MD: ",88rE   c                 n   [        5       n U R                  nSSKJn  U" S[        [
        -  [        ) -  S9" UR                  5        U" S[        [
        -  [        -  S9" UR                  5        U" S5      " UR                  5        U" S[        [
        -  [        ) -  S9" UR                  5        U" S[        [
        -  [        -  S9" UR                  5        U" S5      " UR                  5        U" S[        S9" UR                  5        U" S[        S9" UR                  5        U" S[        S9" UR                  5        U" S	5      " UR                  5        U" S
5      " UR                  5        U" S[        S9" UR                  5        U" S5      " UR                  5        [        U [         5      $ )Nr3   )search/r   r   zc-szc-rr'  zc-cr  r  r   )r1   r   r   r  r   r"   r!    start_forward_incremental_search start_reverse_incremental_searchr   accept_searchreverse_incremental_searchforward_incremental_searchabort_searchr   r0   r   )r   r  r  s      rF   r6   r6     s   =LF "%66;W:WW --/ "%66:VV --/ 5M&99: "%66;W:WW --/ "%66:VV --/ 5M&99: 7<()=)=>
5&v'H'HI
5&v'H'HI
5M&%%&
5M&%%&
;56v7J7JK 8V))*!,88rE   )r   r1   rw   z%Callable[..., Callable[[_TOF], _TOF]])r   r1   rw   z#Callable[..., Callable[[_OF], _OF]])rw   r   )rw   r2   )X
__future__r   r   r   enumr   	itertoolsr   typingr   r   r   r	   "prompt_toolkit.application.currentr
   prompt_toolkit.bufferr   r   r   r   prompt_toolkit.clipboardr   prompt_toolkit.documentr   prompt_toolkit.filtersr   r   r   r   r   r   prompt_toolkit.filters.appr   r   r   r   r   r   r   r   r   r    r!   r"   r#   !prompt_toolkit.input.vt100_parserr$   #prompt_toolkit.key_binding.digraphsr%   (prompt_toolkit.key_binding.key_processorr&   r'   #prompt_toolkit.key_binding.vi_stater(   r)   prompt_toolkit.keysr*   prompt_toolkit.searchr+   prompt_toolkit.selectionr,   r-   r.   r   r0   r1   r2   named_commandsr4   __all__r   ascii_lowercaser  r9   rH   TextObjectFunctionr{   r   OperatorFunctionr   r   r   r   r   r   r   r5   r6   r?   rE   rF   <module>r     s   "      5 5 6 H H 2 ,     : 8 L H $ 1 M M O O ' 
 ((#l2 T e, e,R qc:o. v/0s!s!*s!n Q
OT12 e+,HH(HV 2 2   : : / /
 - -z9z7)9rE   