
    MhR'                      d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZB ddlCmDZD ddgZEe3ZFejG        ZGeGdz   ZH G d de          ZI G d d          ZJe	eFgeJf         ZK edeK          ZLd1d$ZMe	eFeJgdf         ZN ed%eN          ZOd2d'ZPed3d)            ZQed3d*            ZRed3d+            ZSed3d,            ZTed3d-            ZUd4d/ZVd4d0ZWdS )5    )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                      e Zd ZdZdZdZdZdS )TextObjectType	EXCLUSIVE	INCLUSIVELINEWISEBLOCKN)__name__
__module____qualname__r:   r;   r<   r=        f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/key_binding/bindings/vi.pyr9   r9   <   s"        IIHEEErB   r9   c                  b    e Zd ZdZdej        fddZedd            ZddZ	ddZ
ddZddZdS )
TextObjectz
    Return struct for functions wrapped in ``text_object``.
    Both `start` and `end` are relative to the current cursor position.
    r   startintendtyper9   c                0    || _         || _        || _        d S N)rF   rH   rI   )selfrF   rH   rI   s       rC   __init__zTextObject.__init__I   s     
			rB   returnr.   c                    | j         t          j        k    rt          j        S | j         t          j        k    rt          j        S t          j        S rK   )rI   r9   r<   r.   LINESr=   
CHARACTERSrL   s    rC   selection_typezTextObject.selection_typeP   s=    9/// &&9,,, && ++rB   tuple[int, int]c                Z    | j         | j        k     r| j         | j        fS | j        | j         fS )zA
        Return a (start, end) tuple where start <= end.
        )rF   rH   rR   s    rC   sortedzTextObject.sortedY   s1     :  :tx''8TZ''rB   documentr   c                D   |                                  \  }}|}| j        t          j        k    r,|                    ||j        z             d         dk    r|dz  }| j        t          j        k    r|dz  }| j        t          j        k    r|                    ||j        z             \  }}|                    |d          |j        z
  }|                    ||j        z             \  }}|                    |t          |j
        |                             |j        z
  }||fS )a2  
        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   )rV   rI   r9   r:   translate_index_to_positioncursor_positionr;   r<   translate_row_col_to_indexlenlines)rL   rW   rF   rH   docrowcols          rC   operator_rangezTextObject.operator_rangeb   s    [[]]
s I111//c6I0IJJ1MQRRR 1HC90001HC9///66us?R7RSSHC223::S=PPE66sS=P7PQQHC..sC	#4G4GHH%&  czrB   bufferr   c                    |                      |j                  \  }}||j        z  }||j        z  }|j                            |          \  }}|j                            |          \  }}||fS )z7
        Return a (start_line, end_line) pair.
        )ra   rW   rZ   rY   )rL   rb   from_to_s        rC   get_line_numberszTextObject.get_line_numbers   su    
 ''88	r''
f$$ ?>>uEEq;;B??AbyrB   tuple[Document, ClipboardData]c                "   |                      |j                  \  }}||j        z  }||j        z  }| j        t          j        k    r|dz  }t          |j        |t          || j	                            }|
                                \  }}||fS )zA
        Turn text object into `ClipboardData` instance.
        r3   )original_cursor_positionrI   )ra   rW   rZ   rI   r9   r<   r   textr-   rS   cut_selection)rL   rb   rd   re   rW   new_documentclipboard_datas          rC   cutzTextObject.cut   s     ''88	r''
f$$ 9///!GBKE@STTT
 
 (0'='='?'?$n^++rB   N)rF   rG   rH   rG   rI   r9   )rN   r.   )rN   rT   )rW   r   rN   rT   )rb   r   rN   rT   )rb   r   rN   rh   )r>   r?   r@   __doc__r9   r:   rM   propertyrS   rV   ra   rg   ro   rA   rB   rC   rE   rE   C   s          &'~?W     , , , X,( ( ( (   @   , , , , , ,rB   rE   _TOF)boundkey_bindingsr1   rN   %Callable[..., Callable[[_TOF], _TOF]]c                8     t                      ddddd fd}|S )zY
    Create a decorator that can be used to register Vi text object implementations.
    F)filterno_move_handlerno_selection_handlereagerkeys
Keys | strrw   r   rx   boolry   rz   rN   Callable[[_TOF], _TOF]c                (     d fd}|S )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.)
        text_object_funcrr   rN   c                     j         t          z  dd	 fd            }s+ j         t           z  t          z  dd	 fd            }	s+ j         t           z  t          z  dd	 fd            } S )
Nrw   rz   eventErN   Nonec                    | j         j        }t          |j        pd| j        pdz            | _         |           }|j        }|| || |           d | j         j        _        d | j         j        _        d S Nr3   )appvi_statestroperator_argarg_argoperator_func)r   r   text_objr   r   s       rC   _apply_operator_to_text_objectzvcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._apply_operator_to_text_object   s    
 !9- ("7"<1a!PQQ
 ,+E22
 !) 6'M,E!M%222 48	"026	"///rB   c                R     |           }| j         xj        |j        z  c_        dS )zK
                    Move handler for navigation mode.
                    N)current_bufferrZ   rF   )r   text_objectr   s     rC   _move_in_navigation_modezpcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_navigation_mode   s5     #3"25"9"9K(88K<MM8888rB   c                x    |           }| j         }|j        }|dS |j        rz|                    |j                  \  }}||j        z  }||j        z  }||_        ||_        |j        t          j	        k    rt          j        |_        dS t          j        |_        dS | j         xj        |j        z  c_        dS )zJ
                    Move handler for selection mode.
                    N)r   selection_staterH   ra   rW   rZ   rj   rI   r9   r<   r.   rP   rQ   rF   )r   r   buffr   rF   rH   r   s         rC   _move_in_selection_modezocreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_selection_mode   s     #3"25"9"9K /D&*&:O&. # R%0%?%?%N%N
s!55t33CH@/2, '+~/FFF3@3FO0003@3KO000,<<@QQ<<<<rB   r   r   rN   r   addr#   r   r"   )
r   r   r   r   rz   rw   rt   r{   rx   ry   s
   `   rC   	decoratorzNcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator   s4   \=Fe  7 7 7 7 7 7, # N!!;;()    N N N N N N ( %R!!;;'(    R R R R R R> $#rB   )r   rr   rN   rr   rA   )rw   rx   ry   rz   r{   r   rt   s   ````` rC   text_object_decoratorz;create_text_object_decorator.<locals>.text_object_decorator   sS    *S	$ S	$ S	$ S	$ S	$ S	$ S	$ S	$ S	$ S	$ S	$j rB   )r{   r|   rw   r   rx   r}   ry   r}   rz   r}   rN   r~   r   )rt   r   s   ` rC   create_text_object_decoratorr      sN       %%*j j j j j j j jX ! rB   _OF#Callable[..., Callable[[_OF], _OF]]c                4     t                      ddd fd}|S )zK
    Create a decorator that can be used for registering Vi operators.
    Fr   r{   r|   rw   r   rz   r}   rN   Callable[[_OF], _OF]c                      d fd}|S )z
        Register a Vi operator.

        Usage::

            @operator('d', filter=...)
            def handler(event, text_object):
                # Do something with the text object here.
        r   r   rN   c                      j         t           z  t          z  dd fd            } j         t           z  t          z  dd fd            } S )	Nr   r   r   rN   r   c                V    | j         j        _        | j        | j         j        _        dS )zE
                Handle operator in navigation mode.
                N)r   r   r   r   r   )r   r   s    rC   _operator_in_navigationzicreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator.<locals>._operator_in_navigation@  s(     4A	"027)	"///rB   c                .   | j         }|j        }||j        t          j        k    rt
          j        }n.|j        t          j        k    rt
          j        }nt
          j        }t          |j
        |j        z
  |          } | |           d|_        dS dS )zD
                Handle operator in selection mode.
                NrI   )r   r   rI   r.   rP   r9   r<   r=   r;   rE   rj   rZ   )r   r   r   text_obj_typer   r   s        rC   _operator_in_selectionzhcreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator.<locals>._operator_in_selectionO  s     +"&"6".&+}/BBB(6(?(-1DDD(6(<(6(@",'@4CWW*# # #K "M%555 ,0D(((% /.rB   r   r   )r   r   r   rz   rw   rt   r{   s   `  rC   r   zHcreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator?  s    \77&@CUU  
< < < < < 
< \77&@CTT  
0 0 0 0 0 
06 ! rB   )r   r   rN   r   rA   )rw   rz   r{   r   rt   s   ``` rC   operator_decoratorz5create_operator_decorator.<locals>.operator_decorator2  s<    0	! 0	! 0	! 0	! 0	! 0	! 0	! 0	! 0	!d rB   )r{   r|   rw   r   rz   r}   rN   r   r   )rt   r   s   ` rC   create_operator_decoratorr   +  s?     -3HHE? ? ? ? ? ? ? ?B rB   r}   c                 2    t                      j        j        S rK   )r
   r   is_returnablerA   rB   rC   r   r   v  s    99#11rB   c                     t                      j        } t          | j        o| j        j        t
          j        k              S rK   )r
   r   r}   r   rI   r.   r=   )r   s    rC   in_block_selectionr   {  s9    99#DQ!5!:m>Q!Q  rB   c                 6    t                      j        j        d uS rK   )r
   r   digraph_symbol1rA   rB   rC   digraph_symbol_1_givenr     s    99-T99rB   c                 :    t                      j        j        dk    S )z-Returns True when the search buffer is empty. )r
   r   rk   rA   rB   rC   search_buffer_is_emptyr     s     99#(B..rB   c                 2    t                      j        j        S rK   )r
   r   tilde_operatorrA   rB   rC   r   r     s    99,,rB   r2   c                 T&   t                      } | j        }t          t          t          df         t          t
          t          gt          f         f         }dt                      d fdt                      d fdt                      d fdt                      d	 fd
t          d fg}  |dt                    t          d                      |d          dd            } |dt                    dd            } |dt                    dd            } |dt                     |dt                    dd                        } |dt                    dd            } |dt                     |dt                    dd                        }	 |dt                    dd             }
 |d!t                    dd"            } |dt                    dd#            } |dt                    dd$            } |d%t                     |d&t                    dd'                        } |d(t                    dd)            }  |d*t          t          z            t          d+                       |d*t          t           z            t          d+                      |d*t           t          z            dd,            } |d-t                    dd.            } |d-t                    dd/            } |d0t          t           z            dd1            } |d2t          t           z            dd3            } |d4t          t           z            dd5            } |d6d6t          t           z             |d7t          t           z            dd8                        } |d9t                    dd:            } |d;d;t                    dd<            } |d=t                    dd>            } |d?t          t           z            dd@            } |dAt          t           z            ddB            } |dAt          t           z            dddF             |d2t          t           z            dfdG            } |dHt          t           z            ddI            } |dJdHt          t           z            ddK            } |dHt          t           z            ddL            } |dJdHt          t           z            ddM            }  |dNt                    ddO            }! |dPt                    ddQ            }" |dRt           j        dNt                    ddS            }# |dRt           j        dPt                    ddT            }$ |dUt                    ddV            }% |dWt                    ddX            }& |dYt          t           z            ddZ            }' |d[t          d\ ]          dd^            }( |d_t                    dd`            }) |dt                    dda            }* |d_t                    ddb            }+ |dct                    ddd            }, |dct                    dde            }- |dt                    ddf            }. |d0dgt                     |d0dht                    ddi                        }/ |d=t                    ddj            }0 |dkt                    ddl            }1 |dmdmt                     |dnt                    ddo                        }2 |dpt                    ddq            }3 |drt                    dds            }4 |dtdtt                     |dut                    ddv                        }5 |dwdwt                     |dxt                    ddy                        }6 |dzt          t           z            dd{            }7 |d|t          t           z            dd}            }8 |d~t                    dd            }9 |dJd[d[t          t           z            dd            }: |dJddt          t           z            dd            }; |dJd~d~t          t           z            dd            }< |dt                    dd            }= |dt                    dd            }> |dt                    dd            }? |dt                    dd            }@t%          |           t'          |            |t           j        t(                    dd            }A	 ddfd}B |BdCdC            |BdCd            |BddC            |Bdd           dfd}C|D ]\  }D}E}F |C|E|Fg|DR    dm          dd            }G dRt           j        dm          dd            }H dt          dd            }I dw          dd            }J dJd          dd            }K d          dd            }L d          dd            }M d          dd            }N dg          dd            }O dh          dd            }P d          dd            }Q d          dd            }R d?dgd          dd            }S d0dgd          dd            }T d?dhd          dd            }U d0dhd          dd            }V d0dNd          dd            }W d          dd            }X d          dd            }Y	 ddfd}ZdD ]3}[dD ]\  }\}] |Z|\|]|[            |Zdd|[d            |Zdd|[d           4 d          dd            }^ d          dd            }_ dt           j                  dd            }` dt           j                  ddĄ            }a dt           j                  ddƄ            }b dt           j                  ddȄ            }cdfdʄ}d |dd            |ddC            d˦           d̦          dd̈́                        }e dddΦ          ddτ            }f dddΦ          ddЄ            }g dѦ           dҦ           dӦ          ddԄ                                    }h dզ          ddք            }i dצ          dd؄            }j d٦          ddڄ            }k dd          dd܄            }l |dt                    dd݄            }m dd          dd߄            }n |dt                    dd            }o |ddpt          t          z             |ddt          t          z             |dd*t          t          z            dd                                    }p |ddrt          t          z             |ddt          t          z            dd                        }q |ddt          t          z            dd            }r d          dd            }s d          dd            }t dJdJ          dd            }u dJd          dd            }v dJd          dd            }w dJd          dd            }x dJd          dd            }y d          dd            }z |dt*                    dd            }{dD ]/}| |||t          t          z  t(          z            dd            }}0 |dt          t          z  t(          z  t*          z            dd            }~ |t           j        t,                    dd            } |t           j        t.                    dd            } |t           j        t0          d ]          dd            } |d!t0                    dd            } |dt0                    dd            } |dt0                    dd            } |dt0                    dd            } |dt0                     |dt0                    dd                        } |d dt                    dd            } |d dt                    dd            } |dt          t,          z            dd            } |t           j        t2          t4           z            dd            } |t           j        t2          t4          z            dd            } |d	t          t,          z            dd
            } |dt           j        t          t6           z            dd            } |dt          t6          z            dd            } |dt           j        t          dC          dd            }t9          | t:                    S (  z
    Vi extensions.

    # Overview of Readline Vi commands:
    # http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf
    .)g?c                ,    t          j        | d          S )Nrot_13)codecsencodestrings    rC   <lambda>z"load_vi_bindings.<locals>.<lambda>  s    6=:: rB   )r   uc                      | j                     S rK   lowerr   s    rC   r   z"load_vi_bindings.<locals>.<lambda>      lflnn rB   )r   Uc                      | j                     S rK   upperr   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  r   rB   )r   ~c                      | j                     S rK   swapcaser   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s    ofo.?.? rB   )r   c                      | j                     S rK   r   r   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s    ?6?,, rB   zc-vrw   zquoted-insertescaper   r   rN   r   c                .   | j         }| j        j        }|j        t          j        t          j        fv r'|xj        |j        	                                z  c_        t          j
        |_        t          |j                  r|                                 dS dS )z4
        Escape goes to vi navigation mode.
        N)r   r   r   
input_moder)   INSERTREPLACErZ   rW   get_cursor_left_position
NAVIGATIONr}   r   exit_selection)r   rb   r   s      rC   _back_to_navigationz-load_vi_bindings.<locals>._back_to_navigation  s    
 %9%9#3Y5F"GGG""fo&N&N&P&PP""'2&'' 	$!!#####	$ 	$rB   kc                F    | j                             | j                   dS )z-
        Arrow up in selection mode.
        countN)r   	cursor_upr   r   s    rC   _up_in_selectionz*load_vi_bindings.<locals>._up_in_selection  s&    
 	&&UY&77777rB   jc                F    | j                             | j                   dS )z/
        Arrow down in selection mode.
        r   N)r   cursor_downr   r   s    rC   _down_in_selectionz,load_vi_bindings.<locals>._down_in_selection  s&    
 	((uy(99999rB   upzc-pc                F    | j                             | j                   dS )zA
        Arrow up and ControlP in navigation mode go up.
        r   Nr   auto_upr   r   s    rC   _up_in_navigationz+load_vi_bindings.<locals>._up_in_navigation  s&     	$$59$55555rB   c                H    | j                             | j        d           dS )zd
        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    rC   _go_upz load_vi_bindings.<locals>._go_up  s5     	$$)D 	% 	
 	
 	
 	
 	
rB   downzc-nc                F    | j                             | j                   dS )z>
        Arrow down and Control-N in navigation mode.
        r   Nr   	auto_downr   r   s    rC   _go_downz"load_vi_bindings.<locals>._go_down  s&     	&&UY&77777rB   c                H    | j                             | j        d           dS )z\
        Go down, but if we enter a new history entry, go to the start of the line.
        Tr   Nr   r   s    rC   	_go_down2z#load_vi_bindings.<locals>._go_down2  s5    
 	&&)D 	' 	
 	
 	
 	
 	
rB   	backspacec                v    | j         xj        | j         j                            | j                  z  c_        dS )z2
        In navigation-mode, move cursor.
        r   N)r   rZ   rW   r   r   r   s    rC   _go_leftz"load_vi_bindings.<locals>._go_left  s=    
 	,, )BBBSS	
,,,,rB   c                z    | j         }|j        r|                                 d S |                    d           d S )NT)select_first)r   complete_statecomplete_nextstart_completionr   bs     rC   _complete_nextz(load_vi_bindings.<locals>._complete_next  sH      	2OOD11111rB   c                z    | j         }|j        r|                                 dS |                    d           dS )z4
        Control-P: To previous completion.
        T)select_lastN)r   r   complete_previousr   r   s     rC   _complete_prevz(load_vi_bindings.<locals>._complete_prev  sL    
   	1!!!!!400000rB   c-gzc-yc                    d| j         _        dS )z,
        Accept current completion.
        N)r   r   r   s    rC   _accept_completionz,load_vi_bindings.<locals>._accept_completion!  s     /3+++rB   zc-ec                8    | j                                          dS )zF
        Cancel completion. Go back to originally typed text.
        N)r   cancel_completionr   s    rC   _cancel_completionz,load_vi_bindings.<locals>._cancel_completion)  s    
 	..00000rB   enterzaccept-linec                    | j         }|                    | j                   |xj        |j                            d          z  c_        dS )z3
        Go to the beginning of next line.
        r   Tafter_whitespaceN)r   r   r   rZ   rW   get_start_of_line_positionr   s     rC   _start_of_next_linez-load_vi_bindings.<locals>._start_of_next_line9  sY    
  	EI&&&	QZBB! C 
 
 	
rB   insertc                <    t           j        | j        j        _        dS z*
        Pressing the Insert key.
        Nr)   r   r   r   r   r   s    rC   _insert_modez&load_vi_bindings.<locals>._insert_modeH  s    
 )2(8	%%%rB   c                <    t           j        | j        j        _        dS r  )r)   r   r   r   r   r   s    rC   _navigation_modez*load_vi_bindings.<locals>._navigation_modeO  s    
 )2(<	%%%rB   ac                    | j         xj        | j         j                                        z  c_        t          j        | j        j        _        d S rK   )	r   rZ   rW   get_cursor_right_positionr)   r   r   r   r   r   s    rC   _azload_vi_bindings.<locals>._aV  sH     	,, )CCEE	
,, )2(8	%%%rB   Ac                    | j         xj        | j         j                                        z  c_        t          j        | j        j        _        d S rK   )	r   rZ   rW   get_end_of_line_positionr)   r   r   r   r   r   s    rC   _Azload_vi_bindings.<locals>._A_  sF    ,, )BBDD	
,, )2(8	%%%rB   Cc                    | j         }|                    |j                                                  }| j        j                            |           t          j        | j        j	        _
        dS )z_
        Change to end of line.
        Same as 'c$' (which is implemented elsewhere.)
        r   N)r   deleterW   r  r   	clipboardset_textr)   r   r   r   r   rb   deleteds      rC   _change_until_end_of_linez3load_vi_bindings.<locals>._change_until_end_of_linef  s\     %--fo&N&N&P&P-QQ	$$W---(1(8	%%%rB   cSc                |   | j         }t          |j        j        t          j                  }| j        j                            |           |xj	        |j        
                    d          z  c_	        |                    |j                                                   t          j        | j        j        _        dS )z%
        Change current line
        Tr  r   N)r   r   rW   current_liner.   rP   r   r$  set_datarZ   r  r#  r  r)   r   r   r   )r   rb   datas      rC   _change_current_linez.load_vi_bindings.<locals>._change_current_liner  s     % V_9=;NOO	$$T*** 	&/"L"L! #M #
 #
 	
 	FODDFFGGG(1(8	%%%rB   Dc                    | j         }|                    |j                                                  }| j        j                            |           dS )zH
        Delete from cursor position until the end of the line.
        r   N)r   r#  rW   r  r   r$  r%  r&  s      rC   _delete_until_end_of_linez3load_vi_bindings.<locals>._delete_until_end_of_line  sL    
 %--fo&N&N&P&P-QQ	$$W-----rB   dc           	     |   | j         }|j        j        }d                    |d|j        j                           }d                    ||j        j        |j        j        | j        z                      }d                    ||j        j        | j        z   d                   }|r|r|dz   }t          ||z   t          |          t          |          z   t          |                    d                    z
            |_        | j	        j
                            t          |t          j                             dS )z<
        Delete line. (Or the following 'n' lines.)
        
N )rk   rZ   )r   rW   r]   joincursor_position_rowr   r   r\   lstripr   r$  r-  r   r.   rP   )r   rb   r]   beforer'  afters         rC   _delete_linez&load_vi_bindings.<locals>._delete_line  s0   
 % %5!F6?#F!FGHH))3fo6Y)7 
 
 		% Cei O Q QRSS  	#e 	#d]F #%KK#e**4s5<<;L;L7M7MM
 
 
 		$$]7M<O%P%PQQQQQrB   xc                v    | j                                         }| j        j                            |           dS )zB
        Cut selection.
        ('x' is not an operator.)
        N)r   rl   r   r$  r-  )r   rn   s     rC   _cutzload_vi_bindings.<locals>._cut  s7     -;;==	$$^44444rB   ic                <    t           j        | j        j        _        d S rK   r  r   s    rC   _izload_vi_bindings.<locals>._i  s    (1(8	%%%rB   Ic                    t           j        | j        j        _        | j        xj        | j        j                            d          z  c_        d S )NTr  )	r)   r   r   r   r   r   rZ   rW   r  r   s    rC   _Izload_vi_bindings.<locals>._I  sQ    (1(8	%,, )DD!% E  	
,,,,rB   Fr;  r}   c                Z   | j         }g }|rd	d}nd	d}t          |j                                                  D ]9\  }}|                     ||                     |dk    r ||          |_        :||_        t          j        | j	        j
        _        |                                 dS )
z1
        Insert in block selection mode.
        from_torT   rN   rG   c                    | d         S r   rA   rG  s    rC   get_poszDload_vi_bindings.<locals>.insert_in_block_selection.<locals>.get_pos      qz!rB   c                    | d         S )Nr   rA   rI  s    rC   rJ  zDload_vi_bindings.<locals>.insert_in_block_selection.<locals>.get_pos  rK  rB   r   N)rG  rT   rN   rG   )r   	enumeraterW   selection_rangesappendrZ   multiple_cursor_positionsr)   INSERT_MULTIPLEr   r   r   r   )r   r;  r   	positionsrJ  r@  rG  s          rC   insert_in_block_selectionz3load_vi_bindings.<locals>.insert_in_block_selection  s    
 # 	 	"" " " " "
" " " " $DM$B$B$D$DEE 	8 	8JAwWWW--...Avv'.ww'7'7$)2& )2(A	%rB   c                "     | d           d S )NT)r;  rA   )r   rS  s    rC   _append_after_blockz-load_vi_bindings.<locals>._append_after_block  s    !!%t444444rB   Jc                f    t          | j                  D ]}| j                                         dS )z
        Join lines.
        Nranger   r   join_next_liner   r@  s     rC   _joinzload_vi_bindings.<locals>._join  s?    
 uy!! 	2 	2A //1111	2 	2rB   r   c                j    t          | j                  D ]}| j                            d           dS )z+
        Join lines without space.
        r   	separatorNrX  r[  s     rC   _join_nospacez'load_vi_bindings.<locals>._join_nospace  sD    
 uy!! 	> 	>A //"/====	> 	>rB   c                8    | j                                          dS )z&
        Join selected lines.
        Nr   join_selected_linesr   s    rC   _join_selectionz)load_vi_bindings.<locals>._join_selection  s    
 	0022222rB   c                <    | j                             d           dS )z4
        Join selected lines without space.
        r   r^  Nrb  r   s    rC   _join_selection_nospacez1load_vi_bindings.<locals>._join_selection_nospace  s$    
 	0020>>>>>rB   pc                    | j                             | j        j                                        | j        t          j                   dS )z
        Paste after
        r   
paste_modeN)r   paste_clipboard_datar   r$  get_datar   r,   VI_AFTERr   s    rC   _pastez load_vi_bindings.<locals>._paste  sM    
 	11I((**) ) 	2 	
 	
 	
 	
 	
rB   Pc                    | j                             | j        j                                        | j        t          j                   dS )z
        Paste before
        ri  N)r   rk  r   r$  rl  r   r,   	VI_BEFOREr   s    rC   _paste_beforez'load_vi_bindings.<locals>._paste_before  sM    
 	11I((**) * 	2 	
 	
 	
 	
 	
rB   "c                    | j         d         j        }|t          v rT| j        j        j                            |          }|r0| j                            || j	        t          j                   dS dS dS )z,
        Paste from named register.
        r3   ri  N)key_sequencer.  vi_register_namesr   r   named_registersgetr   rk  r   r,   rm  r   r)  r.  s      rC   _paste_registerz)load_vi_bindings.<locals>._paste_register  s    
 q!&!!!9%599!<<D $99	i6H :      "! rB   c                    | j         d         j        }|t          v rT| j        j        j                            |          }|r0| j                            || j	        t          j                   dS dS dS )z5
        Paste (before) from named register.
        r3   ri  N)ru  r.  rv  r   r   rw  rx  r   rk  r   r,   rq  ry  s      rC   _paste_register_beforez0load_vi_bindings.<locals>._paste_register_before)  s    
 q!&!!!9%599!<<D $99	i6I :      "! rB   rc                <    t           j        | j        j        _        dS )z.
        Go to 'replace-single'-mode.
        N)r)   REPLACE_SINGLEr   r   r   r   s    rC   _replacez"load_vi_bindings.<locals>._replace6  s    
 )2(@	%%%rB   Rc                <    t           j        | j        j        _        dS )z'
        Go to 'replace'-mode.
        N)r)   r   r   r   r   r   s    rC   _replace_modez'load_vi_bindings.<locals>._replace_mode=  s    
 )2(9	%%%rB   sc                    | j                             | j                  }| j        j                            |           t          j        | j        j        _	        dS )z_
        Substitute with new text
        (Delete character(s) and go to insert mode.)
        r   N)
r   r#  r   r   r$  r%  r)   r   r   r   r   rk   s     rC   _substitutez%load_vi_bindings.<locals>._substituteD  sN     #***;;	$$T***(1(8	%%%rB   r   c                    dS )NFrA   es    rC   r   z"load_vi_bindings.<locals>.<lambda>N  s    5 rB   )rw   save_beforec                f    t          | j                  D ]}| j                                         d S rK   )rY  r   r   undor[  s     rC   _undozload_vi_bindings.<locals>._undoN  s=    uy!! 	( 	(A %%''''	( 	(rB   Vc                P    | j                             t          j                   dS )z(
        Start lines selection.
        rS   N)r   start_selectionr.   rP   r   s    rC   _visual_linez&load_vi_bindings.<locals>._visual_lineS  '    
 	,,M<O,PPPPPrB   c                P    | j                             t          j                   dS )z-
        Enter block selection mode.
        r  N)r   r  r.   r=   r   s    rC   _visual_blockz'load_vi_bindings.<locals>._visual_blockZ  r  rB   c                    | j         j        }|C|j        t          j        k    rt          j        |_        dS | j                                          dS dS )zn
        Exit line selection mode, or go from non line selection mode to line
        selection mode.
        N)r   r   rI   r.   rP   r   r   r   s     rC   _visual_line2z'load_vi_bindings.<locals>._visual_line2a  Z      .>&#}':::'4':$$$$3355555	 '&rB   vc                P    | j                             t          j                   dS )z1
        Enter character selection mode.
        r  N)r   r  r.   rQ   r   s    rC   _visualz!load_vi_bindings.<locals>._visualo  s'    
 	,,M<T,UUUUUrB   c                    | j         j        }|C|j        t          j        k    rt          j        |_        dS | j                                          dS dS )z}
        Exit character selection mode, or go from non-character-selection mode
        to character selection mode.
        N)r   r   rI   r.   rQ   r   r  s     rC   _visual2z"load_vi_bindings.<locals>._visual2v  sZ      .>&#}'???'4'?$$$$3355555	 '&rB   c                    | j         j        }|C|j        t          j        k    rt          j        |_        dS | j                                          dS dS )zq
        Exit block selection mode, or go from non block selection mode to block
        selection mode.
        N)r   r   rI   r.   r=   r   r  s     rC   _visual_block2z(load_vi_bindings.<locals>._visual_block2  r  rB   wWc                    | j         }|j        r2|j        j        t          j        k    rt          j        |j        _        dS dS dS )zP
        Switch from visual linewise mode to visual characterwise mode.
        N)r   r   rI   r.   rP   rQ   r   rb   s     rC   _visual_auto_wordz+load_vi_bindings.<locals>._visual_auto_word  sT     % "	C&+}/BBB*7*BF"'''		C 	CBBrB   c                    | j         }t          | j        t          |j        j                            }|r<| j                             |          }| j        j        	                    |           dS dS )z#
        Delete character.
        r   N)
r   minr   r\   rW   current_line_after_cursorr#  r   r$  r%  r   r   r   rk   s       rC   _deletez!load_vi_bindings.<locals>._delete  st    
 #EIs4=#JKKLL 	/'..U.;;DI((.....	/ 	/rB   Xc                    | j         }t          | j        t          |j        j                            }|r<| j                             |          }| j        j        	                    |           d S d S )Nr   )
r   r  r   r\   rW   current_line_before_cursordelete_before_cursorr   r$  r%  r  s       rC   _delete_before_cursorz/load_vi_bindings.<locals>._delete_before_cursor  sr    #EIs4=#KLLMM 	/'<<5<IIDI((.....	/ 	/rB   yYc                    d                     | j        j        j        d| j                           }| j        j                            t          |t          j
                             dS )z&
        Yank the whole line.
        r5  N)r7  r   rW   lines_from_currentr   r   r$  r-  r   r.   rP   r  s     rC   
_yank_linez$load_vi_bindings.<locals>._yank_line  sU     yy-6I+EI+VWW	$$]49L%M%MNNNNNrB   +c                    | j         }|xj        |j                            | j                  z  c_        |xj        |j                            d          z  c_        dS )z;
        Move to first non whitespace of next line
        r   Tr  N)r   rZ   rW   get_cursor_down_positionr   r  r  s     rC   
_next_linez$load_vi_bindings.<locals>._next_line  sx    
 %&/"J"J) #K #
 #
 	
 	&/"L"L! #M #
 #
 	
rB   -c                    | j         }|xj        |j                            | j                  z  c_        |xj        |j                            d          z  c_        dS )z?
        Move to first non whitespace of previous line
        r   Tr  N)r   rZ   rW   get_cursor_up_positionr   r  r  s     rC   
_prev_linez$load_vi_bindings.<locals>._prev_line  sx    
 %&/"H"H) #I #
 #
 	
 	&/"L"L! #M #
 #
 	
rB   >zc-tc                ^    | j         }|j        j        }t          |||| j        z              dS )z
        Indent lines.
        N)r   rW   r8  r   r   )r   rb   current_rows      rC   _indentz!load_vi_bindings.<locals>._indent  s5     %o9v{K%)$;<<<<<rB   <zc-dc                d    | j         j        j        }t          | j         ||| j        z              dS )z!
        Unindent lines.
        N)r   rW   r8  r   r   )r   r  s     rC   	_unindentz#load_vi_bindings.<locals>._unindent  s4     *3G%{K%)4KLLLLLrB   Oc                    | j                             t                                  t          j        | j        j        _        dS )z:
        Open line above and enter insertion mode
        copy_marginN)r   insert_line_abover   r)   r   r   r   r   r   s    rC   _open_abovez%load_vi_bindings.<locals>._open_above  ;    
 	..};N.OOO(1(8	%%%rB   oc                    | j                             t                                  t          j        | j        j        _        dS )z:
        Open line below and enter insertion mode
        r  N)r   insert_line_belowr   r)   r   r   r   r   r   s    rC   _open_belowz%load_vi_bindings.<locals>._open_below  r  rB   r   c                    | j         }|j        j        }|1|dk    r-|                    |                                d           dS dS dS )zL
        Reverse case of current character and move cursor forward.
        Nr5  T	overwrite)r   rW   current_charinsert_textr   )r   rb   r)  s      rC   _reverse_casez'load_vi_bindings.<locals>._reverse_case  sU    
 %O(=Q$YYqzz||t<<<<< =YYrB   c                @    | j         }|                    d            dS )z)
        Lowercase current line.
        c                *    |                                  S rK   r   r  s    rC   r   z;load_vi_bindings.<locals>._lowercase_line.<locals>.<lambda>
      aggii rB   Nr   transform_current_liner   r   s     rC   _lowercase_linez)load_vi_bindings.<locals>._lowercase_line  *    
 ###$7$788888rB   r   c                @    | j         }|                    d            dS )z)
        Uppercase current line.
        c                *    |                                  S rK   r   r  s    rC   r   z;load_vi_bindings.<locals>._uppercase_line.<locals>.<lambda>  r  rB   Nr  r  s     rC   _uppercase_linez)load_vi_bindings.<locals>._uppercase_line  r  rB   c                @    | j         }|                    d            dS )z0
        Swap case of the current line.
        c                *    |                                  S rK   r   r  s    rC   r   z:load_vi_bindings.<locals>._swapcase_line.<locals>.<lambda>  s    ajjll rB   Nr  r  s     rC   _swapcase_linez(load_vi_bindings.<locals>._swapcase_line  s*    
 ###$:$:;;;;;rB   #c                    | j         }| j        j        }|j                                        |_        t          j        |_        |	                    || j
        d           dS )z9
        Go to previous occurrence of this word.
        Fr   include_current_positionN)r   r   current_search_staterW   get_word_under_cursorrk   r+   BACKWARD	directionapply_searchr   r   r   search_states      rC   _prev_occurrencez*load_vi_bindings.<locals>._prev_occurrence  sW    
  y5J<<>>!0!9	|59uUUUUUrB   *c                    | j         }| j        j        }|j                                        |_        t          j        |_        |	                    || j
        d           dS )z5
        Go to next occurrence of this word.
        Fr  N)r   r   r  rW   r  rk   r+   FORWARDr  r  r   r  s      rC   _next_occurrencez*load_vi_bindings.<locals>._next_occurrence)  sW    
  y5J<<>>!0!8	|59uUUUUUrB   (c                    d S rK   rA   r   s    rC   _begin_of_sentencez,load_vi_bindings.<locals>._begin_of_sentence6  	     	rB   )c                    d S rK   rA   r   s    rC   _end_of_sentencez*load_vi_bindings.<locals>._end_of_sentence<  r  rB   c                B    | j         j                                         dS )zF
        Unknown key binding while waiting for a text object.
        N)r   outputbellr   s    rC   _unknown_text_objectz.load_vi_bindings.<locals>._unknown_text_objectE  s!    
 		rB   delete_onlywith_registerc                     rdt           j        d          f}nd          } |dt           id fd
            }dS )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.
        rs  cdrw   r   r   r   rE   rN   r   c                N   d }| j         }|r|                    |          \  }}||_        |rX|j        rQr0| j        d         j        }|t          v r|| j        j        j	        |<   n| j        j
                            |           st          j        | j        j        _        d S d S r   )r   ro   rW   rk   ru  r.  rv  r   r   rw  r$  r-  r)   r   r   )r   r   rn   r   rm   reg_namer   r  s         rC   delete_or_change_operatorz_load_vi_bindings.<locals>.create_delete_and_change_operators.<locals>.delete_or_change_operator_  s    !N'D -/:t/D/D,n ,  A."5 A  A$1!49H#444GU	*:8DI'00@@@  A090@	"---A ArB   Nr   r   r   rE   rN   r   )r*   Anyr   )r   r  handler_keysr  operators   ``  rC   "create_delete_and_change_operatorsz<load_vi_bindings.<locals>.create_delete_and_change_operatorsP  s      	-4+<=LL,L	<	6	6	6	A 	A 	A 	A 	A 	A 
7	6	A 	A 	ArB   Trw   r   transform_funcCallable[[str], str]r   c                D     |d| t            z  id	fd            }d S )
Nrw   r   r   r   rE   rN   r   c                    | j         }|                    |j                  \  }}||k     rE|                    |j        |z   |j        |z              |xj        |j        p|j        z  c_        dS dS )zX
            Apply transformation (uppercase, lowercase, rot13, swap case).
            N)r   ra   rW   transform_regionrZ   rH   rF   )r   r   r   rF   rH   r  s        rC   rf   z=load_vi_bindings.<locals>.create_transform_handler.<locals>._}  s    
 'D$33DMBBJE3s{{%%(50(3."   $$(L;;LL$$$$ {rB   r  )r   )rw   r  r  rf   r
  s    `  rC   create_transform_handlerz2load_vi_bindings.<locals>.create_transform_handlerz  sW     
1	4V|m3	4	4	M 	M 	M 	M 	M 
5	4	M 	M 	MrB   r   rE   c                    |                     | j                  \  }}|j        r!| j        j                            |           dS dS )z-
        Yank operator. (Copy text.)
        N)ro   r   rk   r   r$  r-  )r   r   rf   rn   s       rC   _yankzload_vi_bindings.<locals>._yank  sQ    
 (OOE,@AA> 	9I((88888	9 	9rB   c                    | j         d         j        }|t          v r3|                    | j                  \  }}|| j        j        j        |<   dS dS )z3
        Yank selection to named register.
        r3   N)ru  r.  rv  ro   r   r   r   rw  )r   r   r)  rf   rn   s        rC   _yank_to_registerz+load_vi_bindings.<locals>._yank_to_register  sY    
 q!&!!! +0D E EA~4BEI.q111 "!rB   c                z    | j         }|                    |          \  }}t          |||dz   | j                   dS )z
        Indent.
        r3   r   N)r   rg   r   r   r   r   r   rd   re   s        rC   _indent_text_objectz-load_vi_bindings.<locals>._indent_text_object  sF    
 #0066	rtUBF%)444444rB   c                z    | j         }|                    |          \  }}t          |||dz   | j                   dS )z
        Unindent.
        r3   r   N)r   rg   r   r   r  s        rC   _unindent_text_objectz/load_vi_bindings.<locals>._unindent_text_object  sF    
 #0066	rub1fEI666666rB   qc                f    | j         }|                    |          \  }}t          |||           dS )z
        Reshape text.
        N)r   rg   r   r  s        rC   _reshapez"load_vi_bindings.<locals>._reshape  s;    
 #0066	rT5"%%%%%rB   r   c                j    t          | j        j                            | j                  pd          S )z.
        Move one word or token left.
        r   r   rE   r   rW   find_start_of_previous_wordr   r   s    rC   _bzload_vi_bindings.<locals>._b  s:    
  )EEEIEVV 
 
 	
rB   Bc                l    t          | j        j                            | j        d          pd          S )z.
        Move one non-blank word left
        Tr   WORDr   r  r   s    rC   _Bzload_vi_bindings.<locals>._B  sF    
  )EEid F    	
 
 	
rB   $c                X    t          | j        j                                                  S )zL
        'c$', 'd$' and '$':  Delete/change/move until end of line.
        )rE   r   rW   r  r   s    rC   _dollarz!load_vi_bindings.<locals>._dollar  s$    
 %.7PPRRSSSrB   c                    t          | j        j                            | j                  p| j        j                                                  S )zO
        'word' forward. 'cw', 'dw', 'w': Delete/change/move one word.
        r   rE   r   rW   find_next_word_beginningr   get_end_of_document_positionr   s    rC   _word_forwardz'load_vi_bindings.<locals>._word_forward  sM    
  )BBBSS L#,IIKK
 
 	
rB   c                    t          | j        j                            | j        d          p| j        j                                                  S )zO
        'WORD' forward. 'cW', 'dW', 'W': Delete/change/move one WORD.
        Tr$  r+  r   s    rC   _WORD_forwardz'load_vi_bindings.<locals>._WORD_forward  sY    
  )BBid C   L #,IIKK	
 
 	
rB   r  c                    | j         j                            | j                  }t	          |r|dz
  ndt
          j                  S )z0
        End of 'word': 'ce', 'de', 'e'
        r   r3   r   r   r   rW   find_next_word_endingr   rE   r9   r;   r   rH   s     rC   _end_of_wordz&load_vi_bindings.<locals>._end_of_word  sE    
 "+AA	ARRS/#''an6NOOOOrB   c                    | j         j                            | j        d          }t	          |r|dz
  ndt
          j                  S )z0
        End of 'WORD': 'cE', 'dE', 'E'
        Tr$  r3   r   r   r2  r4  s     rC   _end_of_WORDz&load_vi_bindings.<locals>._end_of_WORD   sQ    
 "+AA)$ B 
 
 S/#''an6NOOOOrB   rx   c                d    | j         j                                        \  }}t          ||          S )z+
        Inner 'word': ciw and diw
        r   rW   find_boundaries_of_current_wordrE   r   rF   rH   s      rC   _inner_wordz%load_vi_bindings.<locals>._inner_word
  s/    
 )2RRTT
s%%%%rB   c                h    | j         j                            d          \  }}t          ||          S )z'
        A 'word': caw and daw
        T)include_trailing_whitespacer:  r<  s      rC   _a_wordz!load_vi_bindings.<locals>._a_word  s>    
 )2RR(, S 
 

s %%%%rB   c                h    | j         j                            d          \  }}t          ||          S )z+
        Inner 'WORD': ciW and diW
        T)r%  r:  r<  s      rC   _inner_WORDz%load_vi_bindings.<locals>._inner_WORD  s>    
 )2RR S 
 

s %%%%rB   c                j    | j         j                            dd          \  }}t          ||          S )z'
        A 'WORD': caw and daw
        T)r%  r?  r:  r<  s      rC   _a_WORDz!load_vi_bindings.<locals>._a_WORD&  s@    
 )2RR4 S 
 

s %%%%rB   c                    | j         j                                        }| j         j                            | j                  }t          ||          S )z!
        Auto paragraph.
        r   )r   rW   start_of_paragraphend_of_paragraphr   rE   r<  s      rC   
_paragraphz$load_vi_bindings.<locals>._paragraph0  sI    
 $-@@BB"+<<59<MM%%%%rB   ^c                \    t          | j        j                            d                    S )z9'c^', 'd^' and '^': Soft start of line, after whitespace.Tr  rE   r   rW   r  r   s    rC   _start_of_linez(load_vi_bindings.<locals>._start_of_line9  s8      )DD!% E  
 
 	
rB   0c                \    t          | j        j                            d                    S )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  rK  r   s    rC   _hard_start_of_linez-load_vi_bindings.<locals>._hard_start_of_lineB  s8      )DD!& E  
 
 	
rB   Nci_startci_endinnerkey
str | Nonec                     d
 fd}|<  d          d	          |             d         d	          |           dS   d         |d	          |           dS )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.
        r   r   rN   rE   c                z   k    rC| j         j                            d          }| j         j                            d          }n@| j         j                                      }| j         j                                      }|!|rdnd}t          |dz   |z
  ||z             S t          d          S )NF)in_current_liner   r3   )r   rW   find_backwardsfindfind_enclosing_bracket_leftfind_enclosing_bracket_rightrE   )r   rF   rH   offsetrQ  rP  rR  s       rC   handlerz?load_vi_bindings.<locals>.create_ci_ca_handles.<locals>.handlerW  s    6!!,5DDe E   *388QV8WW ,5QQf  *3PPf   S_#*!%!)f"4cFlCCC "!}}$rB   NaiTr8  r   r   rN   rE   rA   )rP  rQ  rR  rS  r]  r   s   ```  rC   create_ci_ca_handlesz.load_vi_bindings.<locals>.create_ci_ca_handlesN  s    	% 	% 	% 	% 	% 	% 	% 	%. ;DKKUXtDDDWMMMBKKUVTBBB7KKKKK?KKUS$???HHHHHrB   )FT))rs  rs  )'ra  )`rb  )[])r  r  ){})r  r  re  rf  c                l    | j         j                            | j        d          }t	          |          S )zi
        Move to previous blank-line separated section.
        Implements '{', 'c{', 'd{', 'y{'
        T)r   r:  )r   rW   rF  r   rE   r   indexs     rC   _previous_sectionz+load_vi_bindings.<locals>._previous_section  s<     $-@@)D A 
 
 %   rB   c                l    | j         j                            | j        d          }t	          |          S )ze
        Move to next blank-line separated section.
        Implements '}', 'c}', 'd}', 'y}'
        T)r   r;  )r   rW   rG  r   rE   rh  s     rC   _next_sectionz'load_vi_bindings.<locals>._next_section  s;     $->>)4 ? 
 
 %   rB   fc                    t          | j        d          | j        j        _        | j        j                            | j        d| j                  }|rt          |t          j                  S t          d          S )z
        Go to next occurrence of character. Typing 'fx' will move the
        cursor to the next occurrence of character. 'x'.
        FTrW  r   r   r   r(   r.  r   r   last_character_findr   rW   rY  r   rE   r9   r;   r   matchs     rC   _find_next_occurrencez/load_vi_bindings.<locals>._find_next_occurrence  st     2?uz51Q1Q	.$-22JEI 3 
 
  	!e.*BCCCCa== rB   Fc                    t          | j        d          | j        j        _        t          | j        j                            | j        d| j	                  pd          S )z
        Go to previous occurrence of character. Typing 'Fx' will move the
        cursor to the previous occurrence of character. 'x'.
        Tro  r   )
r(   r.  r   r   rq  rE   r   rW   rX  r   r   s    rC   _find_previous_occurrencez3load_vi_bindings.<locals>._find_previous_occurrence  sb     2?uz41P1P	. )88
D	 9    	
 
 	
rB   tc                    t          | j        d          | j        j        _        | j        j                            | j        d| j                  }|rt          |dz
  t          j                  S t          d          S )zQ
        Move right to the next occurrence of c, then one char backward.
        FTro  r3   r   r   rp  rr  s     rC   _tzload_vi_bindings.<locals>._t  sx    
 2?uz51Q1Q	.$-22JEI 3 
 
  	!eain.FGGGGa== rB   Tc                    t          | j        d          | j        j        _        | j        j                            | j        d| j                  }t          |r|dz   nd          S )zS
        Move left to the previous occurrence of c, then one char forward.
        Tro  r3   r   )
r(   r.  r   r   rq  r   rW   rX  r   rE   rr  s     rC   _Tzload_vi_bindings.<locals>._T  se    
 2?uz41P1P	.$-<<JEI = 
 
 u3%!))!444rB   reversec                @       rdnd          d	 fd            }dS )
z.
        Create ',' and ';' commands.
        ,;r   r   rN   rE   c                ~   d}| j         j        }t          j        }|j        rz|j        j        }|j        j        }r| }|r(| j        j        	                    |d| j
                  }n3| j        j                            |d| j
                  }t          j        }|rt          ||          S t          d          S )zB
            Repeat the last 'f'/'F'/'t'/'T' command.
            r   Tro  r   )r   r   r9   r:   rq  	character	backwardsr   rW   rX  r   rY  r;   rE   )r   posr   rI   charr  r~  s         rC   rf   z+load_vi_bindings.<locals>.repeat.<locals>._  s    
  Cy)H!+D+ 43=$8B	 .$-I 4.7FFd%) G  CC  .7<<d%) =  C *3D %!#D1111!!}}$rB   Nr_  rA   )r~  rf   r   s   ` rC   repeatz load_vi_bindings.<locals>.repeat  sL    
 
G,SS	-	-	% 	% 	% 	% 	% 
.	-	% 	% 	%rB   hleftc                f    t          | j        j                            | j                            S )z:
        Implements 'ch', 'dh', 'h': Cursor left.
        r   )rE   r   rW   r   r   r   s    rC   _leftzload_vi_bindings.<locals>._left  s2      )BBBSS
 
 	
rB   )rx   ry   c                ~    t          | j        j                            | j                  t
          j                  S )z<
        Implements 'cj', 'dj', 'j', ... Cursor up.
        r   r   )rE   r   rW   r  r   r9   r<   r   s    rC   _downzload_vi_bindings.<locals>._down   s=      )BBBSS(
 
 
 	
rB   c                ~    t          | j        j                            | j                  t
          j                  S )z<
        Implements 'ck', 'dk', 'k', ... Cursor up.
        r   r   )rE   r   rW   r  r   r9   r<   r   s    rC   _upzload_vi_bindings.<locals>._up  s=    
  )@@uy@QQ(
 
 
 	
rB   lr6  rightc                f    t          | j        j                            | j                            S )zL
        Implements 'cl', 'dl', 'l', 'c ', 'd ', ' '. Cursor right.
        r   )rE   r   rW   r  r   r   s    rC   _rightz load_vi_bindings.<locals>._right  s2      )CC%)CTT
 
 	
rB   Hc                (   | j         j        j        }| j        }|rD|j        r=|j                            |j                            d          d          |j        z
  }nt          |j        j
                   }t          |t          j                  S )zz
        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_inforW   r[   first_visible_linerZ   r\   text_before_cursorrE   r9   r<   r   r  r   r  s       rC   _top_of_screenz(load_vi_bindings.<locals>._top_of_screen"  s     I+  	6 	6 
55M444NNPQ  #$ C qz4555C#N$;<<<<rB   Mc                $   | j         j        j        }| j        }|rB|j        r;|j                            |j                                        d          |j        z
  }nt          |j        j
                   }t          |t          j                  S )zp
        Moves cursor to the vertical center of the visible region.
        Implements 'cM', 'dM', 'M'.
        r   r   )r   r  r  r   r  rW   r[   center_visible_linerZ   r\   r  rE   r9   r<   r  s       rC   _middle_of_screenz+load_vi_bindings.<locals>._middle_of_screen:  s     I+  	6 	6 
55M5577  #$ C qz4555C#N$;<<<<rB   Lc                &   | j         j        j        }| j        }|rD|j        r=|j                            |j                            d          d          |j        z
  }nt          |j        j
                  }t          |t          j                  S )zT
        Moves to the end of the visible region. (Above the scroll offset.)
        T)before_scroll_offsetr   r   )r   r  r  r   r  rW   r[   last_visible_linerZ   r\   text_after_cursorrE   r9   r<   r  s       rC   _end_of_screenz(load_vi_bindings.<locals>._end_of_screenR  s    
 I+  	4 	4 
55M333NNPQ  #$ C aj233C#N$;<<<<rB   nc                    | j         }| j        j        }|                    |d| j                  }t          ||j        z
            S )z
        Search next.
        Fr  r   r   r   r  get_search_positionr   rE   rZ   r   r   r  rZ   s       rC   _search_nextz&load_vi_bindings.<locals>._search_nexti  sQ    
 #y5225	 3 
 
 /D,@@AAArB   c                b    | j         j        }| j                            |d| j                   dS )zR
        Search next in navigation mode. (This goes through the history.)
        Fr  Nr   r  r   r  r   r   r  s     rC   _search_next2z'load_vi_bindings.<locals>._search_next2v  sA    
 y5))5	 	* 	
 	
 	
 	
 	
rB   Nc                    | j         }| j        j        }|                    | d| j                  }t          ||j        z
            S )z"
        Search previous.
        Fr  r  r  s       rC   _search_previousz*load_vi_bindings.<locals>._search_previous  sS    
 #y522ME 3 
 
 /D,@@AAArB   c                d    | j         j        }| j                            | d| j                   dS )zV
        Search previous in navigation mode. (This goes through the history.)
        Fr  Nr  r  s     rC   _search_previous2z+load_vi_bindings.<locals>._search_previous2  sC    
 y5))ME 	* 	
 	
 	
 	
 	
rB   zc                T    | j         }|j        j        | j        j        j        _        dS )zd
        Scrolls the window to makes the current line the first line in the visible region.
        N)r   rW   r8  r   r  r  vertical_scrollr   s     rC   _scroll_topz%load_vi_bindings.<locals>._scroll_top  s'      :;*:X	'777rB   c                2    d| j         j        j        _        dS )zc
        Scrolls the window to makes the current line the last line in the visible region.
        r   N)r   r  r  r  r   s    rC   _scroll_bottomz(load_vi_bindings.<locals>._scroll_bottom  s     ;<	'777rB   c                *   | j         j        j        }| j        }|rv|j        rq|j        }|j        dz  }t          d|j        j        dz
            }d}|dk    r0|	                    |          }||z   |k     r||z  }|dz  }nn|dk    0||_
        dS dS dS )z9
        Center Window vertically around cursor.
        r/   r   r3   N)r   r  r  r   r  window_heightmaxrW   r8  get_height_for_liner  )r   r  r   infoscroll_heightr  heightline_heights           rC   _scroll_centerz(load_vi_bindings.<locals>._scroll_center  s    
 I+  	" 	"=D !.!3MAqz59::AFa%%"66q99K'-77k)FFAA a%% !"A%	" 	" 	" 	"rB   %c                   | j         }| j        rd| j        cxk     rdk    rkn nh|j                            t          | j        |j        j        z  dz
  dz            d          }t          ||j        j        z
  t          j
                  S t          d          S |j                                        }|rt          |t          j                  S t          d          S )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   rW   r[   rG   
line_countrE   rZ   r9   r<   find_matching_bracket_positionr;   )r   rb   absolute_indexrs  s       rC   _goto_corresponding_bracketz5load_vi_bindings.<locals>._goto_corresponding_bracket  s     %: 	% 59#########!'!K!KV_%??!CsJKKQ" " ""V_%DD'0   
 "!}}$ OBBDDE %!%n.FGGGG!!}}$rB   |c                j    t          | j        j                            | j        dz
                      S )z
        Move to the n-th column (you may specify the argument n by typing it on
        number keys, for example, 20|).
        r3   )rE   r   rW   get_column_cursor_positionr   r   s    rC   
_to_columnz$load_vi_bindings.<locals>._to_column  s4      )DDUYQR]SS
 
 	
rB   c                    | j         j        }| j        r?t          |                    | j        dz
  d          |j        z
  t          j                  S t          |	                                t          j                  S )z_
        Go to the start of the very first line.
        Implements 'gg', 'cgg', 'ygg'
        r3   r   r   )
r   rW   r   rE   r[   r   rZ   r9   r<   get_start_of_document_position)r   r3  s     rC   _goto_first_linez*load_vi_bindings.<locals>._goto_first_line  s      ): 
	,,UY]A>>ARR#,    00229P   rB   rf   c                p    t          | j        j                                        t          j                  S )zQ
        Go to last non-blank of line.
        'g_', 'cg_', 'yg_', etc..
        r   )rE   r   rW   'last_non_blank_of_current_line_positionr9   r;   r   s    rC   _goto_last_linez)load_vi_bindings.<locals>._goto_last_line  s6      )QQSS)
 
 
 	
rB   c                    | j         j                            | j                  }t	          ||dz
  ndt
          j                  S )zZ
        Go to last character of previous word.
        'ge', 'cge', 'yge', etc..
        r   Nr3   r   r   r   rW   find_previous_word_endingr   rE   r9   r;   r   prev_ends     rC   _gezload_vi_bindings.<locals>._ge  sX     '0JJ) K 
 
 $0HqLLan>V
 
 
 	
rB   c                    | j         j                            | j        d          }t	          ||dz
  ndt
          j                  S )zZ
        Go to last character of previous WORD.
        'gE', 'cgE', 'ygE', etc..
        Tr$  Nr3   r   r   r  r  s     rC   _gEzload_vi_bindings.<locals>._gE  sZ     '0JJ)$ K 
 
 $0HqLLan>V
 
 
 	
rB   mc           	     Z   | j         j        j        }| j        }|r|j        r||j        j        }|j                            d          }|t          t          |dz  t          |j        j                                      z  }t          |t          j                  S t          d          S )zY
        Like g0, but half a screenwidth to the right. (Or as much as possible.)
        Fr  r/   r   r   )r   r  r  r   r  window_widthrW   r  rG   r  r\   r,  rE   r9   r;   )r   r  r   widthrF   s        rC   _gmzload_vi_bindings.<locals>._gm+  s    
 I+# 	D 	DM.EM<<e<TTESUQYDM,F(G(GHHIIIEe.*BCCCC!}}rB   Gc                    | j         }t          |j                            |j        j        dz
  d          |j        z
  t          j                  S )zL
        Go to the end of the document. (If no arg has been given.)
        r3   r   r   )r   rE   rW   r[   r  rZ   r9   r<   )r   bufs     rC   
_last_linez$load_vi_bindings.<locals>._last_line;  sT    
 "L33CL4Ka4OQRSS!"(
 
 
 	
rB   c                J    | j                             | j        dz
             dS )zh
        If an argument is given, move to this line in the  history. (for
        example, 15G)
        r3   N)r   go_to_historyr   r   s    rC   _to_nth_history_linez.load_vi_bindings.<locals>._to_nth_history_lineK  s'     	**59q=99999rB   	123456789c                :    |                      | j                   dS )zK
            Always handle numerics in navigation mode as arg.
            Nappend_to_arg_countr.  r   s    rC   r   zload_vi_bindings.<locals>._argU  s      %%ej11111rB   c                :    |                      | j                   dS )z9
        Zero when an argument was already give.
        Nr  r   s    rC   _0_argz load_vi_bindings.<locals>._0_arga  s      	!!%*-----rB   c                H    | j                             | j        d           dS )z1
        Insert data at cursor position.
        Tr  N)r   r  r.  r   s    rC   _insert_textz&load_vi_bindings.<locals>._insert_textn  s(    
 	((t(DDDDDrB   c                    | j                             | j        d           | j         xj        dz  c_        t          j        | j        j        _        dS )z>
        Replace single character at cursor position.
        Tr  r3   N)	r   r  r.  rZ   r)   r   r   r   r   r   s    rC   _replace_singlez)load_vi_bindings.<locals>._replace_singleu  sO    
 	((t(DDD,,1,,(1(<	%%%rB   c                    | j          S rK   )	is_repeatr  s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s
    1; rB   c                   | j         }|j        }g }d}|j        D ];}|                    |||                    |                    | j                   |}<|                    ||d                    d t          |j                  D             }d                    |          |_        ||_        |xj        dz  c_        dS )z
        Insert data at multiple cursor positions at once.
        (Usually a result of pressing 'I' or 'A' in block-selection mode.)
        r   Nc                $    g | ]\  }}||z   d z   S )r3   rA   ).0r@  r  s      rC   
<listcomp>zKload_vi_bindings.<locals>._insert_text_multiple_cursors.<locals>.<listcomp>  s1      
  
  
"AsC!GaK 
  
  
rB   r   r3   )r   rk   rP  rO  r.  rM  r7  rZ   )r   r   original_textrk   rg  p2new_cursor_positionss          rC   _insert_text_multiple_cursorsz7load_vi_bindings.<locals>._insert_text_multiple_cursors~  s     #	 0 	 	BKKad+,,,KK
###AAM!""%&&& 
  
&/0N&O&O 
  
  

 GGDMM	)=&!rB   c                0   | j         }|j        }d}g }d}|j        D ]Y}|dk    r2||dz
           dk    r#|                    |||dz
                      d}n|                    |||                    |}Z|                    ||d                    |rcd |dd         D             }t	          t          |                    }d	                    |          |_        ||_        |xj        dz  c_        dS | j        j	        
                                 dS )
z4
        Backspace, using multiple cursors.
        Fr   r3   r5  TNc                ,    g | ]}t          |          S rA   r\   r  parts     rC   r  zMload_vi_bindings.<locals>._delete_before_multiple_cursors.<locals>.<listcomp>      777Ts4yy777rB   r   )r   rk   rP  rO  listr   r7  rZ   r   r  r  )	r   r   r  deleted_somethingrk   rg  r  lengthsr  s	            rC   _delete_before_multiple_cursorsz9load_vi_bindings.<locals>._delete_before_multiple_cursors  sC   
 #	 "0 	 	BAvv-Q/477M!b1f*5666$(!!M!B$/000AAM!""%&&& 
	$77T#2#Y777G#'
7(;(;#<#<  DI-AD*  A%    I!!#####rB   r#  c                   | j         }|j        }d}g }g }d}|j        D ]H}|                    |||                    |t	          |          k    s||         dk    r|}A|dz   }d}I|                    ||d                    |rSd |dd         D             }t          t          |                    }d	                    |          |_        ||_        dS | j        j	        
                                 dS )
z1
        Delete, using multiple cursors.
        Fr   r5  r3   TNc                ,    g | ]}t          |          S rA   r  r  s     rC   r  zLload_vi_bindings.<locals>._delete_after_multiple_cursors.<locals>.<listcomp>  r  rB   r  r   )r   rk   rP  rO  r\   r  r   r7  r   r  r  )	r   r   r  r  rk   r  rg  r  r	  s	            rC   _delete_after_multiple_cursorsz8load_vi_bindings.<locals>._delete_after_multiple_cursors  s%   
 #	 "!0 	) 	)BKKad+,,,S''''=+<+D+DF$(!!M!""%&&& 		$77T#2#Y777G#'
7(;(;#<#<  DI-AD***I!!#####rB   c                    | j         }g }|j        D ]@}|j                            |          d         dk    r|dz  }|                    |           A||_        |j        j        dk    r|xj        dz  c_        dS dS )z`
        Move all cursors to the left.
        (But keep all cursors on the same line.)
        r3   r   N)r   rP  rW   rY   rO  cursor_position_colrZ   )r   r   new_positionsrg  s       rC   _left_multiplez(load_vi_bindings.<locals>._left_multiple  s     #/ 	$ 	$A}88;;A>BBQ  ####)6&=,q00  A%     10rB   c                *   | j         }g }|j        D ]\}|j                            |          \  }}|t	          |j        j        |                   k     r|dz  }|                    |           ]||_        |j        j        s|xj        dz  c_        dS dS )za
        Move all cursors to the right.
        (But keep all cursors on the same line.)
        r3   N)	r   rP  rW   rY   r\   r]   rO  is_cursor_at_the_end_of_linerZ   )r   r   r  rg  r_   columns         rC   _right_multiplez)load_vi_bindings.<locals>._right_multiple  s     #/ 	$ 	$A-CCAFFKCDM/45555Q  ####)6&}9 	&  A%    	& 	&rB   c                    dS )zN
        Ignore all up/down key presses when in multiple cursor mode.
        NrA   r   s    rC   _updown_multiplez*load_vi_bindings.<locals>._updown_multiple  s      rB   zc-xzc-lc                8    | j                                          dS )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    rC   _complete_linez(load_vi_bindings.<locals>._complete_line  s     	;;=====rB   zc-fc                    dS )z&
        Complete file names.
        NrA   r   s    rC   _complete_filenamez,load_vi_bindings.<locals>._complete_filename  s	     	rB   zc-kc                (    d| j         j        _        dS )z'
        Go into digraph mode.
        TN)r   r   waiting_for_digraphr   s    rC   _digraphz"load_vi_bindings.<locals>._digraph%  s    
 26	...rB   c                2    | j         | j        j        _        dS )z'
        First digraph symbol.
        N)r.  r   r   r   r   s    rC   	_digraph1z#load_vi_bindings.<locals>._digraph1,  s    
 .3Z	***rB   c                    	 | j         j        j        pd| j        f}|t          vr|ddd         }t          |         }| j         j        j        t          j        k    }| j        	                    t          |          |           d| j         j        _        n.# t          $ r! | j         j                                         Y nw xY wd| j         j        _        d| j         j        _        dS # d| j         j        _        d| j         j        _        w xY w)z!
        Insert digraph.
        r   Nr  r  F)r   r   r   r.  r%   r   r)   r   r   r  chrr  KeyErrorr  r  )r   codesymbolr  s       rC   _create_digraphz)load_vi_bindings.<locals>._create_digraph3  s   
	6 	"28b
%D 8##DDbDzd^F 	*59JJI ,,S[[I,NNN5:EI22  	$ 	$ 	$I!!#####	$ 6;EI215EI... 6;EI215EI.5555s)   ;B AC) (C?C) CC) )$Dzc-oc                (    d| j         j        _        dS )z<
        Go into normal mode for one single action.
        TN)r   r   temporary_navigation_moder   s    rC   _quick_normal_modez,load_vi_bindings.<locals>._quick_normal_modeM  s    
 8<	444rB   c                t    | j         d         j        }|t          v r| j        j        }||_        d|_        dS dS )z(
        Start recording macro.
        r3   r   N)ru  r.  rv  r   r   recording_registercurrent_recording)r   r)  r   s      rC   _start_macroz&load_vi_bindings.<locals>._start_macroT  sH    
 q!&!!!y)H*+H')+H&&&	 "!rB   c                    | j         j        }|j        r1t          |j                  |j        |j        <   d|_        d|_        dS dS )z'
        Stop recording macro.
        Nr   )r   r   r,  r   r-  rw  )r   r   s     rC   _stop_macroz%load_vi_bindings.<locals>._stop_macro`  s_    
 9% & 	,DQ*E EH$X%@A +/H')+H&&&	, 	,rB   @)rw   record_in_macroc                v   | j         d         j        }	 | j        j        j        |         }n# t
          $ r Y dS w xY wg }t          |j                  }|                    |j	                   |
                                 t          | j                  D ]#}| j        j                            |d           $dS )al  
        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)ru  r.  r   r   rw  r$  r$   rO  feedrk   flushrY  r   key_processorfeed_multiple)r   r)  macror{   parserrf   s         rC   _execute_macroz(load_vi_bindings.<locals>._execute_macroo  s     q!&	I&6q9EE 	 	 	FF	
  "T[))EJ uy!! 	D 	DAI#11$d1CCCC	D 	Ds   , 
::r   )F)r   r   r;  r}   rN   r   )r   r}   r  r}   rN   r   )rw   r   r  r  r  r   rN   r   r  r_  rK   )
rP  r   rQ  r   rR  r}   rS  rT  rN   r   )r~  r}   rN   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   )rt   handleTransformFunctionvi_transform_functionsr   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r(  r/  r2  r<  r?  rB  rE  rU  r\  r`  rd  rf  rn  rr  rz  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   rm  funcr  r  r  r  r  r!  r&  r)  r.  r0  r5  r7  r=  r@  rB  rD  rH  rL  rO  r`  rR  rP  rQ  rj  rl  rt  rw  rz  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  r  r  r  r  r!  r'  r*  r.  r0  r;  rS  r
  r   s                                                                                                                                                   @@@rC   r5   r5     s     ==LF
 eCHovxs
7KKL
 HH::	
 
VXX<<=	VXX<<=	VXX??@,,	
7* )FF5(((_)E)EFFFVH$ $ $ $ VC)***8 8 8 +*8 VC)***: : : +*: VD+,,,VE,---6 6 6 .- -,6 VC*+++
 
 
 ,+
 VF-...VE,---8 8 8 .- /.8 VC*+++
 
 
 ,+
 VK 2333
 
 
 43
 VE.)))2 2 2 *)2 VE.)))	1 	1 	1 *)	1 VE.)))VE.)))3 3 3 *) *)3 VE.)))1 1 1 *)1 ?FF7-=>>>M""   :FF7=L=8999+m:T:TUUUVG]N-??@@@
 
 
 A@
 VH/0009 9 9 109 VH^,,,= = = -,= VC*l]:;;;9 9 9 <;9 VC*l]:;;;9 9 9 <;9 VC*l]:;;;	9 	9 	9 <;	9 VC/<-?@@@VC*l]:;;;9 9 9 <; A@9" VC*+++. . . ,+. VC/000R R R 10R@ VC)***5 5 5 +*5 VC*l]:;;;9 9 9 <;9 VC*l]:;;;
 
 
 <;
 VC*l]:;;;    <;< VC*l]:;;;5 5 5 5 5 <;5 VC*l]:;;;2 2 2 <;2 VC/<-?@@@> > > A@> VC)\M9:::3 3 3 ;:3 VC.,>???? ? ? @?? VC*+++
 
 
 ,+
 VC*+++
 
 
 ,+
 VC3'9:::
 
 
 ;:
 VC3'9:::
 
 
 ;:
 VC*+++A A A ,+A VC*+++: : : ,+: VC*l]:;;;9 9 9 <;9 VC*JJJ( ( ( KJ( VC*+++Q Q Q ,+Q VE,---Q Q Q .-Q VC)***6 6 6 +*6 VC*+++V V V ,+V VC)***6 6 6 +*6 VE+,,,6 6 6 -,6 VC.///VC.///
C 
C 
C 0/ 0/
C VC*+++/ / / ,+/ VC*+++/ / / ,+/ VC/000VC*+++O O O ,+ 10O VC*+++

 

 

 ,+

 VC*+++

 

 

 ,+

 VC/000VE.)))= = = *) 10= VC/000VE.)))M M M *) 10M VC*l]:;;;9 9 9 <;9 VC*l]:;;;9 9 9 <;9 VC*+++= = = ,+= VCc"4}"DEEE9 9 9 FE9 VCc"4}"DEEE9 9 9 FE9 VCc"4}"DEEE< < < FE< VC*+++
V 
V 
V ,+
V VC*+++
V 
V 
V ,+
V VC*+++   ,+
 VC*+++   ,+
 )66H.|<<KVDH<===      >=  27#A #A #A #A #A #A #AJ '&ue444&&ud333&&tU333&&tT222M M M M M M, - . .
1d  D-1-----Xc]]9 9 9 ]9 Xc48S!!C C C "!C Xc]]5 5 5 ]5 Xc]]7 7 7 ]7 Xc3& & & & [
 
 
 
 [	
 	
 	
 	
 [T T T T [
 
 
 
 [	
 	
 	
 	
 [P P P P [P P P P [c4000& & & 10& [c4000& & & 10& [c4000& & & 10& [c4000& & & 10& [c4000& & & 10& [
 
 
 
 [	
 	
 	
 	
 DH$I $I $I $I $I $I $IL  3 3!
 		: 		:Hf ! 659999S#uc222S#uc2222[! ! ! ! [! ! ! ! [dh! ! !  ! [dh
 
 
  
 [dh! ! !  ! [dh5 5 5  5"% "% "% "% "% "%H F4LLL
F5MMM[[
 
 
  
 [dFFF
 
 
	 GF
 [dFFF
 
 
 GF
 [[[
 
 
   
 [= = = =. [= = = =. [= = = =, [d+++
B 
B 
B ,+
B VC*+++
 
 
 ,+
 [d+++
B 
B 
B ,+
B VC*+++
 
 
 ,+
 VC/2CCDDDVC/2CCDDDVC!36G!GHHHY Y Y IH ED EDY VC/2CCDDDVC/2CCDDD< < < ED ED< VC/2CCDDD" " " ED"6 [% % % %: [
 
 
 
 [c   & [c
 
 
 
 [c

 

 

 

 [c

 

 

 

 [c    [	
 	
 	
 	
 VC   : : : ! :  2 2	% -.

 

 

	2 	2 	2

 

	2 	2 V!225TT
  . . . . VDH_---E E E .-E VDH3444= = = 54= V&..  
" " " 
": VK 7888 $  $  $ 98 $D VH4555!$ !$ !$ 65!$F VF2333& & & 43&$ VG3444& & & 54&& VD0111VF2333   43 21
 VE5000> > > 10> VE5000   10 VE.?:;;;6 6 6 <;6 VDH_0F/FFGGG8 8 8 HG8 VDH_/EEFFF6 6 6 GF62 VE.?:;;;< < < <;< VC"48J7J"JKKK	, 	, 	, LK	, VC*-??@@@, , , A@, VC"4eLLLD D D MLD: ",888rB   c                    t                      } | j        }ddlm}   |dt          t
          z  t           z            |j                     |dt          t
          z  t          z            |j                     |d          |j                     |dt          t
          z  t           z            |j                     |dt          t
          z  t          z            |j                     |d          |j                     |dt                    |j
                     |dt                    |j                     |dt                    |j                     |d	          |j                     |d
          |j                     |dt                    |j                     |d          |j
                   t          | t                     S )Nr3   )search/r   r   zc-szc-rr  zc-cr  r   r   )r1   r   r   rA  r   r"   r!    start_forward_incremental_search start_reverse_incremental_searchr   accept_searchreverse_incremental_searchforward_incremental_searchabort_searchr   r0   r   )rt   r<  rA  s      rC   r6   r6     sY   ==LFFF"%66;W:WW   -/ / /FF"%66:VV   -/ / / FF5MM&9:::FF"%66;W:WW   -/ / /FF"%66:VV   -/ / / FF5MM&9::: )FF7<((()=>>>&FF5&&&v'HIII&FF5&&&v'HIIIFF5MM&%&&&FF5MM&%&&&6FF;5666v7JKKK FF8V)***!,888rB   )rt   r1   rN   ru   )rt   r1   rN   r   )rN   r}   )rN   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.   rt   r0   r1   r2   named_commandsr4   __all__r   ascii_lowercaserv  r9   rE   TextObjectFunctionrr   r   OperatorFunctionr   r   r   r   r   r   r   r5   r6   rA   rB   rC   <module>r_     sY   " " " " " "                     5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 H H H H H H H H H H H H 2 2 2 2 2 2 , , , , , ,                                             : 9 9 9 9 9 8 8 8 8 8 8 L L L L L L L L H H H H H H H H $ $ $ $ $ $ 1 1 1 1 1 1 M M M M M M M M M M O O O O O O O O O O ' ' ' ' ' ' 
 (#l2     T   e, e, e, e, e, e, e, e,R qc:o. wv/000s! s! s! s!n Q
OT12 ge+,,,H H H HV 2 2 2 2     : : : : / / / /
 - - - -z9 z9 z9 z9z7)9 )9 )9 )9 )9 )9rB   