
    fR'                      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j                  ZGeGdz   ZH G d de      ZI G d d      ZJe	eFgeJf   ZK edeK      ZL	 	 	 	 d*d ZMe	eFeJgdf   ZN ed!eN      ZO	 	 	 	 d+d"ZPed,d#       ZQed,d$       ZRed,d%       ZSed,d&       ZTed,d'       ZUd-d(ZVd-d)ZWy).    )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y)TextObjectType	EXCLUSIVE	INCLUSIVELINEWISEBLOCKN)__name__
__module____qualname__r:   r;   r<   r=        a/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/key_binding/bindings/vi.pyr9   r9   <   s    IIHErB   r9   c                  n    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y	)
TextObjectz
    Return struct for functions wrapped in ``text_object``.
    Both `start` and `end` are relative to the current cursor position.
    r   c                .    || _         || _        || _        y N)startendtype)selfrH   rI   rJ   s       rC   __init__zTextObject.__init__I   s     
	rB   c                    | j                   t        j                  k(  rt        j                  S | j                   t        j
                  k(  rt        j
                  S t        j                  S rG   )rJ   r9   r<   r.   LINESr=   
CHARACTERSrK   s    rC   selection_typezTextObject.selection_typeP   sJ    99/// &&&99,,, &&& +++rB   c                    | j                   | j                  k  r| j                   | j                  fS | j                  | j                   fS )zA
        Return a (start, end) tuple where start <= end.
        )rH   rI   rP   s    rC   sortedzTextObject.sortedY   s:     :: ::txx''88TZZ''rB   c                j   | j                         \  }}|}| j                  t        j                  k(  r)|j	                  ||j
                  z         d   dk(  r|dz  }| j                  t        j                  k(  r|dz  }| j                  t        j                  k(  r|j	                  ||j
                  z         \  }}|j                  |d      |j
                  z
  }|j	                  ||j
                  z         \  }}|j                  |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   )rS   rJ   r9   r:   translate_index_to_positioncursor_positionr;   r<   translate_row_col_to_indexlenlines)rK   documentrH   rI   docrowcols          rC   operator_rangezTextObject.operator_rangeb   s    [[]
s II111//c6I6I0IJ1MQRR 1HC990001HC99///66us?R?R7RSHC223:S=P=PPE66sS=P=P7PQHC..sC		#4GH%%&  czrB   c                    | j                  |j                        \  }}||j                  z  }||j                  z  }|j                  j                  |      \  }}|j                  j                  |      \  }}||fS )z7
        Return a (start_line, end_line) pair.
        )r^   rZ   rV   rU   )rK   bufferfrom_to_s        rC   get_line_numberszTextObject.get_line_numbers   sx    
 ''8	r'''
f$$$ ??>>uEq;;B?AbyrB   c                D   | j                  |j                        \  }}||j                  z  }||j                  z  }| j                  t        j
                  k7  r|dz  }t        |j                  |t        || j                              }|j                         \  }}||fS )zA
        Turn text object into `ClipboardData` instance.
        r3   )original_cursor_positionrJ   )r^   rZ   rV   rJ   r9   r<   r   textr-   rQ   cut_selection)rK   r`   ra   rb   rZ   new_documentclipboard_datas          rC   cutzTextObject.cut   s     ''8	r'''
f$$$ 99///!GBKKE@S@ST
 (0'='='?$n^++rB   N)rH   intrI   rl   rJ   r9   )returnr.   )rm   tuple[int, int])rZ   r   rm   rn   )r`   r   rm   rn   )r`   r   rm   ztuple[Document, ClipboardData])r>   r?   r@   __doc__r9   r:   rL   propertyrQ   rS   r^   rd   rk   rA   rB   rC   rE   rE   C   sZ     &'~?W?W".< , ,(@,rB   rE   _TOF)boundc                F     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eagerc                (     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.)
        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rt   rw   c                >   | j                   j                  }t        |j                  xs d| j                  xs dz        | _         |       }|j                  }||	 || |       d | j                   j                  _        d | j                   j                  _        y Nr3   )appvi_statestroperator_argarg_argoperator_func)eventr~   text_objr   text_object_funcs       rC   _apply_operator_to_text_objectzvcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._apply_operator_to_text_object   s    
 !99-- ("7"7"<1a!PQ
 ,E2
 !) 6 6'M,E!%2 48		""026		""/rB   c                h     |       }| j                   xj                  |j                  z  c_        y)zK
                    Move handler for navigation mode.
                    N)current_bufferrV   rH   )r   text_objectr   s     rC   _move_in_navigation_modezpcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_navigation_mode   s,     #35"9K((88K<M<MM8rB   c                    |       }| j                   }|j                  }|y|j                  r|j                  |j                        \  }}||j
                  z  }||j
                  z  }||_        ||_        |j                  t        j                  k(  rt        j                  |_        yt        j                  |_        y| j                   xj
                  |j                  z  c_        y)zJ
                    Move handler for selection mode.
                    N)r   selection_staterI   r^   rZ   rV   rf   rJ   r9   r<   r.   rN   rO   rH   )r   r   buffr   rH   rI   r   s         rC   _move_in_selection_modezocreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator.<locals>._move_in_selection_mode   s     #35"9K //D&*&:&:O&. #%0%?%?%N
s!5!55t333CH@/2, '++~/F/FF3@3F3FO03@3K3KO0,,<<@Q@QQ<rB   r   Erm   Noneaddr#   r   r"   )
r   r   r   r   rw   rt   key_bindingskeysru   rv   s
   `   rC   	decoratorzNcreate_text_object_decorator.<locals>.text_object_decorator.<locals>.decorator   s    \=Fe77, #!!!;;()  NN (!!!;;'(  RR> $#rB   )r   rq   rm   rq   rA   )rt   ru   rv   rw   r   r   r   s   ````` rC   text_object_decoratorz;create_text_object_decorator.<locals>.text_object_decorator   s    *S	$ S	$j rB   )r   
Keys | strrt   r   ru   boolrv   r   rw   r   rm   zCallable[[_TOF], _TOF]r   )r   r   s   ` rC   create_text_object_decoratorr      s`       %%*jjj j #	j
 j 
 jX ! rB   _OFc                :     t               dd	 	 	 	 	 	 	 d fd}|S )zK
    Create a decorator that can be used for registering Vi operators.
    Frz   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.
        c                      j                   t         z  t        z  dd fd       } j                   t         z  t        z  dd fd       } S )Nrz   c                    | j                   j                  _        | j                  | j                   j                  _        y)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|_        yy)zD
                Handle operator in selection mode.
                NrJ   )r   r   rJ   r.   rN   r9   r<   r=   r;   rE   rf   rV   )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"6".&++}/B/BB(6(?(?(--1D1DD(6(<(<(6(@(@",'@@4CWCWW*#K "%5 ,0D(% /rB   r   r   )r   r   r   rw   rt   r   r   s   `  rC   r   zHcreate_operator_decorator.<locals>.operator_decorator.<locals>.decorator?  sy    \77&@CUU
<
< \77&@CTT
0
06 ! rB   )r   r   rm   r   rA   )rt   rw   r   r   r   s   ``` rC   operator_decoratorz5create_operator_decorator.<locals>.operator_decorator2  s    0	! 0	!d rB   )r   r   rt   r   rw   r   rm   zCallable[[_OF], _OF]r   )r   r   s   ` rC   create_operator_decoratorr   +  s:     -3HE??#)?=A?	?B rB   c                 >    t               j                  j                  S rG   )r
   r   is_returnablerA   rB   rC   r   r   v  s    9##111rB   c                     t               j                  } t        | j                  xr' | j                  j                  t
        j                  k(        S rG   )r
   r   r   r   rJ   r.   r=   )r   s    rC   in_block_selectionr   {  sA    9##DQ!5!5!:!:m>Q>Q!Q rB   c                 B    t               j                  j                  d uS rG   )r
   r~   digraph_symbol1rA   rB   rC   digraph_symbol_1_givenr     s    9--T99rB   c                 D    t               j                  j                  dk(  S )z-Returns True when the search buffer is empty. )r
   r   rg   rA   rB   rC   search_buffer_is_emptyr     s     9##((B..rB   c                 >    t               j                  j                  S rG   )r
   r~   tilde_operatorrA   rB   rC   r   r     s    9,,,rB   c                 |   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      dd       } |dt              dd       } |dt              dd       } |dt               |dt              dd              } |dt              dd       } |dt               |dt              dd              }	 |dt              dd       }
 |dt              dd       } |dt              dd        } |dt              dd!       } |d"t               |d#t              dd$              } |d%t              dd&       }  |d't        t        z        t        d(               |d't        t         z        t        d(              |d't         t        z        dd)       } |d*t              dd+       } |d*t              dd,       } |d-t        t         z        dd.       } |d/t        t         z        dd0       } |d1t        t         z        dd2       } |d3d3t        t         z         |d4t        t         z        dd5              } |d6t              dd7       } |d8d8t              dd9       } |d:t              dd;       } |d<t        t         z        dd=       } |d>t        t         z        dd?       } |d>t        t         z        dddA        |d/t        t         z        dfdB       } |dCt        t         z        ddD       } |dEdCt        t         z        ddF       } |dCt        t         z        ddG       } |dEdCt        t         z        ddH       }  |dIt              ddJ       }! |dKt              ddL       }" |dMt         j"                  dIt              ddN       }# |dMt         j"                  dKt              ddO       }$ |dPt              ddQ       }% |dRt              ddS       }& |dTt        t         z        ddU       }' |dVt        dW X      ddY       }( |dZt              dd[       }) |dt              dd\       }* |dZt              dd]       }+ |d^t              dd_       }, |d^t              dd`       }- |dt              dda       }. |d-dbt               |d-dct              ddd              }/ |d:t              dde       }0 |dft              ddg       }1 |dhdht               |dit              ddj              }2 |dkt              ddl       }3 |dmt              ddn       }4 |dodot               |dpt              ddq              }5 |drdrt               |dst              ddt              }6 |dut        t         z        ddv       }7 |dwt        t         z        ddx       }8 |dyt              ddz       }9 |dEdVdVt        t         z        dd{       }: |dEd|d|t        t         z        dd}       }; |dEdydyt        t         z        dd~       }< |dt              dd       }= |dt              dd       }> |dt              dd       }? |dt              dd       }@t%        |       t'        |        |t         j"                  t(              dd       }A	 d	 	 	 	 	 dfd}B |Bd@d@        |Bd@d        |Bdd@        |Bdd       	 	 	 	 	 	 	 	 dfd}C|D ]  \  }D}E}F C|E|Fg|D    dh      d d       }G dMt         j"                  dh      d d       }H do      d d       }I dr      d d       }J dEd      d d       }K d      dd       }L d      dd       }M d      dd       }N db      dd       }O dc      dd       }P d      dd       }Q d      dd       }R d<dbd      dd       }S d-dbd      dd       }T d<dcd      dd       }U d-dcd      dd       }V d-dId      dd       }W d      dd       }X d      dd       }Y	 d	 	 	 	 	 	 	 	 	 dfd}ZdD ],  }[dD ]  \  }\}] Z|\|][         Zdd[d        |Zdd|[d       .  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        |dd@        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              ddȄ       }m dd      ddʄ       }n |dt              dd˄       }o |ddkt        t        z         |ddt        t        z         |dd't        t        z        dd̈́                     }p |ddmt        t        z         |ddt        t        z        dd΄              }q |ddt        t        z        ddτ       }r dЫ      ddф       }s dҫ      ddӄ       }t dEdE      ddԄ       }u dEdի      ddք       }v dEd      ddׄ       }w dEd      dd؄       }x dEd٫      ddڄ       }y d۫      dd܄       }z |dt*              dd݄       }{dD ]%  }| |||t        t        z  t(        z        dd߄       }}'  |dt        t        z  t(        z  t*        z        dd       }~ |t         j"                  t,              dd       } |t         j"                  t.              dd       } |t         j"                  t0        d X      dd       } |dt0              dd       } |dt0              dd       } |dt0              dd       } |dt0              dd       } |dt0               |dt0              dd              } |ddt              dd       } |ddt              dd       } |dt        t,        z        dd       } |t         j"                  t2        t4         z        dd       } |t         j"                  t2        t4        z        dd       } |dt        t,        z        dd       } |dt         j"                  t        t6         z        dd       } |dt        t6        z        dd       } |dt         j"                  t        d@      dd       }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 rG   lowerr   s    rC   r   z"load_vi_bindings.<locals>.<lambda>      lflln rB   )r   Uc                $     | j                          S rG   upperr   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  r   rB   )r   ~c                $     | j                          S rG   swapcaser   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s    ofoo.? rB   )r   c                $     | j                          S rG   r   r   s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s    ?6??, rB   zc-vrt   zquoted-insertescaper   c                p   | j                   }| j                  j                  }|j                  t        j
                  t        j                  fv r-|xj                  |j                  j                         z  c_        t        j                  |_        t        |j                        r|j                          yy)z4
        Escape goes to vi navigation mode.
        N)r   r}   r~   
input_moder)   INSERTREPLACErV   rZ   get_cursor_left_position
NAVIGATIONr   r   exit_selection)r   r`   r~   s      rC   _back_to_navigationz-load_vi_bindings.<locals>._back_to_navigation  s    
 %%99%%9#3#3Y5F5F"GG""foo&N&N&PP"'22&&'!!# (rB   kc                P    | j                   j                  | j                         y)z-
        Arrow up in selection mode.
        countN)r   	cursor_upr   r   s    rC   _up_in_selectionz*load_vi_bindings.<locals>._up_in_selection  s    
 	&&UYY&7rB   jc                P    | j                   j                  | j                         y)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    
 	((uyy(9rB   upzc-pc                P    | j                   j                  | j                         y)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     	$$599$5rB   c                R    | j                   j                  | j                  d       y)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  s&     	$$))D 	% 	
rB   downzc-nc                P    | j                   j                  | j                         y)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     	&&UYY&7rB   c                R    | j                   j                  | j                  d       y)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  s&    
 	&&))D 	' 	
rB   	backspacec                    | j                   xj                  | j                   j                  j                  | j                        z  c_        y)z2
        In navigation-mode, move cursor.
        r   N)r   rV   rZ   r   r   r   s    rC   _go_leftz"load_vi_bindings.<locals>._go_left  s<    
 	,,  ))BBBS	
,rB   c                z    | j                   }|j                  r|j                          y |j                  d       y )NT)select_first)r   complete_statecomplete_nextstart_completionr   bs     rC   _complete_nextz(load_vi_bindings.<locals>._complete_next  s1      OOD1rB   c                z    | j                   }|j                  r|j                          y|j                  d       y)z4
        Control-P: To previous completion.
        T)select_lastN)r   r   complete_previousr   r   s     rC   _complete_prevz(load_vi_bindings.<locals>._complete_prev  s5    
   !40rB   c-gzc-yc                &    d| j                   _        y)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                   j                          y)zF
        Cancel completion. Go back to originally typed text.
        N)r   cancel_completionr   s    rC   _cancel_completionz,load_vi_bindings.<locals>._cancel_completion)  s    
 	..0rB   enterzaccept-linec                    | j                   }|j                  | j                         |xj                  |j                  j                  d      z  c_        y)z3
        Go to the beginning of next line.
        r   Tafter_whitespaceN)r   r   r   rV   rZ   get_start_of_line_positionr   s     rC   _start_of_next_linez-load_vi_bindings.<locals>._start_of_next_line9  sL    
   	EII&	QZZBB! C 
 	
rB   insertc                V    t         j                  | j                  j                  _        y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(8		%rB   c                V    t         j                  | j                  j                  _        y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                  j                         z  c_        t        j
                  | j                  j                  _        y rG   )	r   rV   rZ   get_cursor_right_positionr)   r   r}   r~   r   r   s    rC   _azload_vi_bindings.<locals>._aV  sM     	,,  ))CCE	
, )2(8(8		%rB   Ac                    | j                   xj                  | j                   j                  j                         z  c_        t        j
                  | j                  j                  _        y rG   )	r   rV   rZ   get_end_of_line_positionr)   r   r}   r~   r   r   s    rC   _Azload_vi_bindings.<locals>._A_  sK    ,,  ))BBD	
, )2(8(8		%rB   Cc                   | j                   }|j                  |j                  j                               }| j                  j
                  j                  |       t        j                  | j                  j                  _
        y)z_
        Change to end of line.
        Same as 'c$' (which is implemented elsewhere.)
        r   N)r   deleterZ   r  r}   	clipboardset_textr)   r   r~   r   r   r`   deleteds      rC   _change_until_end_of_linez3load_vi_bindings.<locals>._change_until_end_of_linef  s\     %%--foo&N&N&P-Q		$$W-(1(8(8		%rB   cSc                   | j                   }t        |j                  j                  t        j
                        }| j                  j                  j                  |       |xj                  |j                  j                  d      z  c_	        |j                  |j                  j                                t        j                  | j                  j                  _        y)z%
        Change current line
        Tr	  r   N)r   r   rZ   current_liner.   rN   r}   r  set_datarV   r  r  r  r)   r   r~   r   )r   r`   datas      rC   _change_current_linez.load_vi_bindings.<locals>._change_current_liner  s     %% V__99=;N;NO		$$T* 	&//"L"L! #M #
 	
 	FOODDFG(1(8(8		%rB   Dc                    | j                   }|j                  |j                  j                               }| j                  j
                  j                  |       y)zH
        Delete from cursor position until the end of the line.
        r   N)r   r  rZ   r  r}   r  r   r!  s      rC   _delete_until_end_of_linez3load_vi_bindings.<locals>._delete_until_end_of_line  sD    
 %%--foo&N&N&P-Q		$$W-rB   dc           	        | j                   }|j                  j                  }dj                  |d|j                  j                         }dj                  ||j                  j                  |j                  j                  | j
                  z          }dj                  ||j                  j                  | j
                  z   d       }|r|r|dz   }t        ||z   t        |      t        |      z   t        |j                  d            z
        |_        | j                  j                  j                  t        |t        j                               y)z<
        Delete line. (Or the following 'n' lines.)
        
N )rg   rV   )r   rZ   rY   joincursor_position_rowr   r   rX   lstripr}   r  r(  r   r.   rN   )r   r`   rY   beforer"  afters         rC   _delete_linez&load_vi_bindings.<locals>._delete_line  s   
 %% %%5!F6??#F#FGH))33foo6Y6Y))7
 		% C Ceii O QRS ed]F #%K#e*4s5<<;L7MM
 			$$]7M<O<O%PQrB   xc                    | j                   j                         }| j                  j                  j	                  |       y)zB
        Cut selection.
        ('x' is not an operator.)
        N)r   rh   r}   r  r(  )r   rj   s     rC   _cutzload_vi_bindings.<locals>._cut  s0     --;;=		$$^4rB   ic                V    t         j                  | j                  j                  _        y rG   r  r   s    rC   _izload_vi_bindings.<locals>._i  s    (1(8(8		%rB   Ic                    t         j                  | j                  j                  _        | j
                  xj                  | j
                  j                  j                  d      z  c_        y )NTr	  )	r)   r   r}   r~   r   r   rV   rZ   r  r   s    rC   _Izload_vi_bindings.<locals>._I  sT    (1(8(8		%,,  ))DD!% E 	
,rB   Fc                `   | j                   }g }|rdd}ndd}t        |j                  j                               D ]/  \  }}|j	                   ||             |dk(  s# ||      |_        1 ||_        t        j                  | j                  j                  _        |j                          y)z1
        Insert in block selection mode.
        c                    | d   S r|   rA   from_tos    rC   get_poszDload_vi_bindings.<locals>.insert_in_block_selection.<locals>.get_pos      qz!rB   c                    | d   S )Nr   rA   rC  s    rC   rE  zDload_vi_bindings.<locals>.insert_in_block_selection.<locals>.get_pos  rF  rB   r   N)rD  rn   rm   rl   )r   	enumeraterZ   selection_rangesappendrV   multiple_cursor_positionsr)   INSERT_MULTIPLEr}   r~   r   r   )r   r6  r   	positionsrE  r;  rD  s          rC   insert_in_block_selectionz3load_vi_bindings.<locals>.insert_in_block_selection  s    
 ## 	"
" $DMM$B$B$DE 	8JAwWW-.Av'.w'7$	8
 *3& )2(A(A		%rB   c                     | d       y )NT)r6  rA   )r   rN  s    rC   _append_after_blockz-load_vi_bindings.<locals>._append_after_block  s    !%t4rB   Jc                l    t        | j                        D ]  }| j                  j                           y)z
        Join lines.
        Nranger   r   join_next_liner   r;  s     rC   _joinzload_vi_bindings.<locals>._join  s.    
 uyy! 	2A  //1	2rB   r   c                p    t        | j                        D ]  }| j                  j                  d         y)z+
        Join lines without space.
        r   	separatorNrS  rV  s     rC   _join_nospacez'load_vi_bindings.<locals>._join_nospace  s3    
 uyy! 	>A  //"/=	>rB   c                8    | j                   j                          y)z&
        Join selected lines.
        Nr   join_selected_linesr   s    rC   _join_selectionz)load_vi_bindings.<locals>._join_selection  s    
 	002rB   c                <    | j                   j                  d       y)z4
        Join selected lines without space.
        r   rY  Nr]  r   s    rC   _join_selection_nospacez1load_vi_bindings.<locals>._join_selection_nospace  s    
 	0020>rB   pc                    | j                   j                  | j                  j                  j	                         | j
                  t        j                         y)z
        Paste after
        r   
paste_modeN)r   paste_clipboard_datar}   r  get_datar   r,   VI_AFTERr   s    rC   _pastez load_vi_bindings.<locals>._paste  sC    
 	11II((*)) )) 	2 	
rB   Pc                    | j                   j                  | j                  j                  j	                         | j
                  t        j                         y)z
        Paste before
        rd  N)r   rf  r}   r  rg  r   r,   	VI_BEFOREr   s    rC   _paste_beforez'load_vi_bindings.<locals>._paste_before  sC    
 	11II((*)) ** 	2 	
rB   "c                   | j                   d   j                  }|t        v ri| j                  j                  j
                  j                  |      }|r7| j                  j                  || j                  t        j                         yyy)z,
        Paste from named register.
        r3   rd  N)key_sequencer)  vi_register_namesr}   r~   named_registersgetr   rf  r   r,   rh  r   r$  r)  s      rC   _paste_registerz)load_vi_bindings.<locals>._paste_register  sz    
 q!&&!!99%%5599!<D$$99		i6H6H :   "rB   c                   | j                   d   j                  }|t        v ri| j                  j                  j
                  j                  |      }|r7| j                  j                  || j                  t        j                         yyy)z5
        Paste (before) from named register.
        r3   rd  N)rp  r)  rq  r}   r~   rr  rs  r   rf  r   r,   rl  rt  s      rC   _paste_register_beforez0load_vi_bindings.<locals>._paste_register_before)  sz    
 q!&&!!99%%5599!<D$$99		i6I6I :   "rB   rc                V    t         j                  | j                  j                  _        y)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                V    t         j                  | j                  j                  _        y)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(9		%rB   sc                    | j                   j                  | j                        }| j                  j                  j                  |       t        j                  | j                  j                  _	        y)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   rg   s     rC   _substitutez%load_vi_bindings.<locals>._substituteD  sQ     ##***;		$$T*(1(8(8		%rB   r   c                     y)NFrA   es    rC   r   z"load_vi_bindings.<locals>.<lambda>N      rB   )rt   save_beforec                l    t        | j                        D ]  }| j                  j                           y rG   )rT  r   r   undorV  s     rC   _undozload_vi_bindings.<locals>._undoN  s,    uyy! 	(A  %%'	(rB   Vc                X    | j                   j                  t        j                         y)z(
        Start lines selection.
        rQ   N)r   start_selectionr.   rN   r   s    rC   _visual_linez&load_vi_bindings.<locals>._visual_lineS  !    
 	,,M<O<O,PrB   c                X    | j                   j                  t        j                         y)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                  }|N|j                  t        j                  k7  rt        j                  |_        y| j                   j                          yy)zn
        Exit line selection mode, or go from non line selection mode to line
        selection mode.
        N)r   r   rJ   r.   rN   r   r   r   s     rC   _visual_line2z'load_vi_bindings.<locals>._visual_line2a  T      ..>>&##}':'::'4':':$$$335	 'rB   vc                X    | j                   j                  t        j                         y)z1
        Enter character selection mode.
        r  N)r   r  r.   rO   r   s    rC   _visualz!load_vi_bindings.<locals>._visualo  s!    
 	,,M<T<T,UrB   c                    | j                   j                  }|N|j                  t        j                  k7  rt        j                  |_        y| j                   j                          yy)z}
        Exit character selection mode, or go from non-character-selection mode
        to character selection mode.
        N)r   r   rJ   r.   rO   r   r  s     rC   _visual2z"load_vi_bindings.<locals>._visual2v  sT      ..>>&##}'?'??'4'?'?$$$335	 'rB   c                    | j                   j                  }|N|j                  t        j                  k7  rt        j                  |_        y| j                   j                          yy)zq
        Exit block selection mode, or go from non block selection mode to block
        selection mode.
        N)r   r   rJ   r.   r=   r   r  s     rC   _visual_block2z(load_vi_bindings.<locals>._visual_block2  r  rB   wWc                    | j                   }|j                  rH|j                  j                  t        j                  k(  r t        j
                  |j                  _        yyy)zP
        Switch from visual linewise mode to visual characterwise mode.
        N)r   r   rJ   r.   rN   rO   r   r`   s     rC   _visual_auto_wordz+load_vi_bindings.<locals>._visual_auto_word  sS     %% ""&&++}/B/BB*7*B*BF""' C #rB   c                
   | j                   }t        | j                  t        |j                  j
                              }|rB| j                   j                  |      }| j                  j                  j                  |       yy)z#
        Delete character.
        r   N)
r   minr   rX   rZ   current_line_after_cursorr  r}   r  r   r   r   r   rg   s       rC   _deletez!load_vi_bindings.<locals>._delete  sg    
 ##EIIs4==#J#JKL''..U.;DII((. rB   Xc                
   | j                   }t        | j                  t        |j                  j
                              }|rB| j                   j                  |      }| j                  j                  j                  |       y y )Nr   )
r   r  r   rX   rZ   current_line_before_cursordelete_before_cursorr}   r  r   r  s       rC   _delete_before_cursorz/load_vi_bindings.<locals>._delete_before_cursor  se    ##EIIs4==#K#KLM''<<5<IDII((. rB   yYc                    dj                  | j                  j                  j                  d| j                         }| j
                  j                  j                  t        |t        j                               y)z&
        Yank the whole line.
        r0  N)r2  r   rZ   lines_from_currentr   r}   r  r(  r   r.   rN   r  s     rC   
_yank_linez$load_vi_bindings.<locals>._yank_line  sT     yy--66II+EIIVW		$$]49L9L%MNrB   +c                    | j                   }|xj                  |j                  j                  | j                        z  c_        |xj                  |j                  j                  d      z  c_        y)z;
        Move to first non whitespace of next line
        r   Tr	  N)r   rV   rZ   get_cursor_down_positionr   r  r  s     rC   
_next_linez$load_vi_bindings.<locals>._next_line  sk    
 %%&//"J"J)) #K #
 	
 	&//"L"L! #M #
 	
rB   -c                    | j                   }|xj                  |j                  j                  | j                        z  c_        |xj                  |j                  j                  d      z  c_        y)z?
        Move to first non whitespace of previous line
        r   Tr	  N)r   rV   rZ   get_cursor_up_positionr   r  r  s     rC   
_prev_linez$load_vi_bindings.<locals>._prev_line  sk    
 %%&//"H"H)) #I #
 	
 	&//"L"L! #M #
 	
rB   >zc-tc                |    | j                   }|j                  j                  }t        |||| j                  z          y)z
        Indent lines.
        N)r   rZ   r3  r   r   )r   r`   current_rows      rC   _indentz!load_vi_bindings.<locals>._indent  s3     %%oo99v{K%))$;<rB   <zc-dc                    | j                   j                  j                  }t        | j                   ||| j                  z          y)z!
        Unindent lines.
        N)r   rZ   r3  r   r   )r   r  s     rC   	_unindentz#load_vi_bindings.<locals>._unindent  s6     **33GG%%{K%))4KLrB   Oc                    | j                   j                  t                       t        j                  | j
                  j                  _        y)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  8    
 	..};N.O(1(8(8		%rB   oc                    | j                   j                  t                       t        j                  | j
                  j                  _        y)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                  }|(|dk7  r"|j                  |j	                         d       yyy)zL
        Reverse case of current character and move cursor forward.
        Nr0  T	overwrite)r   rZ   current_charinsert_textr   )r   r`   r$  s      rC   _reverse_casez'load_vi_bindings.<locals>._reverse_case  sI    
 %%OO((=Q$Yqzz|t< '=rB   c                @    | j                   }|j                  d        y)z)
        Lowercase current line.
        c                "    | j                         S rG   r   r  s    rC   r   z;load_vi_bindings.<locals>._lowercase_line.<locals>.<lambda>
      aggi rB   Nr   transform_current_liner   r   s     rC   _lowercase_linez)load_vi_bindings.<locals>._lowercase_line      
 ####$78rB   r   c                @    | j                   }|j                  d        y)z)
        Uppercase current line.
        c                "    | j                         S rG   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                   }|j                  d        y)z0
        Swap case of the current line.
        c                "    | j                         S rG   r   r  s    rC   r   z:load_vi_bindings.<locals>._swapcase_line.<locals>.<lambda>  s    ajjl rB   Nr  r  s     rC   _swapcase_linez(load_vi_bindings.<locals>._swapcase_line  s    
 ####$:;rB   #c                    | j                   }| j                  j                  }|j                  j	                         |_        t        j                  |_        |j                  || j                  d       y)z9
        Go to previous occurrence of this word.
        Fr   include_current_positionN)r   r}   current_search_staterZ   get_word_under_cursorrg   r+   BACKWARD	directionapply_searchr   r   r   search_states      rC   _prev_occurrencez*load_vi_bindings.<locals>._prev_occurrence  sW    
   yy55JJ<<>!0!9!9	|599uUrB   *c                    | j                   }| j                  j                  }|j                  j	                         |_        t        j                  |_        |j                  || j                  d       y)z5
        Go to next occurrence of this word.
        Fr  N)r   r}   r  rZ   r  rg   r+   FORWARDr  r  r   r  s      rC   _next_occurrencez*load_vi_bindings.<locals>._next_occurrence)  sW    
   yy55JJ<<>!0!8!8	|599uUrB   (c                     y rG   rA   r   s    rC   _begin_of_sentencez,load_vi_bindings.<locals>._begin_of_sentence6       	rB   )c                     y rG   rA   r   s    rC   _end_of_sentencez*load_vi_bindings.<locals>._end_of_sentence<  r  rB   c                L    | j                   j                  j                          y)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   c                t     rdt         j                  d    f}nd    } |dt         id fd       }y)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.
        rn  cdrt   c                   d }| j                   }|r|j                  |      \  }}||_        |rx|j                  rlrE| j                  d   j
                  }|t        v rI|| j                  j                  j                  |<   n%| j                  j                  j                  |       s*t        j                  | j                  j                  _        y y r|   )r   rk   rZ   rg   rp  r)  rq  r}   r~   rr  r  r(  r)   r   r   )r   r   rj   r   ri   reg_namedelete_onlywith_registers         rC   delete_or_change_operatorz_load_vi_bindings.<locals>.create_delete_and_change_operators.<locals>.delete_or_change_operator_  s    !N''D/:t/D,n , ."5"5 $11!499H#44GU		**::8DII''00@ 090@0@		""- rB   Nr   r   r   rE   rm   r   )r*   Anyr   )r   r  handler_keysr  operators   ``  rC   "create_delete_and_change_operatorsz<load_vi_bindings.<locals>.create_delete_and_change_operatorsP  sG     4+<=L,L	<	6	6	A 
7	ArB   Tc                :     |d| t          z  idfd       }y )Nrt   c                   | j                   }|j                  |j                        \  }}||k  r[|j                  |j                  |z   |j                  |z          |xj                  |j
                  xs |j                  z  c_        yy)zX
            Apply transformation (uppercase, lowercase, rot13, swap case).
            N)r   r^   rZ   transform_regionrV   rI   rH   )r   r   r   rH   rI   transform_funcs        rC   rc   z=load_vi_bindings.<locals>.create_transform_handler.<locals>._}  s    
 ''D$33DMMBJE3s{%%((50((3." $$(L;;L;LL$ rB   r  )r   )rt   r  r  rc   r  s    `  rC   create_transform_handlerz2load_vi_bindings.<locals>.create_transform_handlerz  s*     
1	4V|m3	4	M 
5	MrB   c                    |j                  | j                        \  }}|j                  r&| j                  j                  j                  |       yy)z-
        Yank operator. (Copy text.)
        N)rk   r   rg   r}   r  r(  )r   r   rc   rj   s       rC   _yankzload_vi_bindings.<locals>._yank  sC    
 (OOE,@,@A>II((8 rB   c                    | j                   d   j                  }|t        v rB|j                  | j                        \  }}|| j
                  j                  j                  |<   yy)z3
        Yank selection to named register.
        r3   N)rp  r)  rq  rk   r   r}   r~   rr  )r   r   r$  rc   rj   s        rC   _yank_to_registerz+load_vi_bindings.<locals>._yank_to_register  s[    
 q!&&!! +0D0D EA~4BEII..q1 "rB   c                |    | j                   }|j                  |      \  }}t        |||dz   | j                         y)z
        Indent.
        r3   r   N)r   rd   r   r   r   r   r   ra   rb   s        rC   _indent_text_objectz-load_vi_bindings.<locals>._indent_text_object  s9    
 ##006	rtUBF%))4rB   c                |    | j                   }|j                  |      \  }}t        |||dz   | j                         y)z
        Unindent.
        r3   r   N)r   rd   r   r   r  s        rC   _unindent_text_objectz/load_vi_bindings.<locals>._unindent_text_object  s9    
 ##006	rub1fEII6rB   qc                ^    | j                   }|j                  |      \  }}t        |||       y)z
        Reshape text.
        N)r   rd   r   r  s        rC   _reshapez"load_vi_bindings.<locals>._reshape  s/    
 ##006	rT5"%rB   r   c                |    t        | j                  j                  j                  | j                        xs d      S )z.
        Move one word or token left.
        r   r   rE   r   rZ   find_start_of_previous_wordr   r   s    rC   _bzload_vi_bindings.<locals>._b  s:    
   ))EEEIIEV 
 	
rB   Bc                ~    t        | j                  j                  j                  | j                  d      xs d      S )z.
        Move one non-blank word left
        Tr   WORDr   r  r   s    rC   _Bzload_vi_bindings.<locals>._B  sD    
   ))EEiid F   	
 	
rB   $c                \    t        | j                  j                  j                               S )zL
        'c$', 'd$' and '$':  Delete/change/move until end of line.
        )rE   r   rZ   r  r   s    rC   _dollarz!load_vi_bindings.<locals>._dollar  s$    
 %..77PPRSSrB   c                    t        | j                  j                  j                  | j                        xs$ | j                  j                  j                               S )zO
        'word' forward. 'cw', 'dw', 'w': Delete/change/move one word.
        r   rE   r   rZ   find_next_word_beginningr   get_end_of_document_positionr   s    rC   _word_forwardz'load_vi_bindings.<locals>._word_forward  sP    
   ))BBBS L##,,IIK
 	
rB   c                    t        | j                  j                  j                  | j                  d      xs$ | j                  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  sZ    
   ))BBiid C  L ##,,IIK	
 	
rB   r  c                    | j                   j                  j                  | j                        }t	        |r|dz
  ndt
        j                        S )z0
        End of 'word': 'ce', 'de', 'e'
        r   r3   r   r   r   rZ   find_next_word_endingr   rE   r9   r;   r   rI   s     rC   _end_of_wordz&load_vi_bindings.<locals>._end_of_word  sB    
 ""++AA		ARS#'an6N6NOOrB   c                    | j                   j                  j                  | j                  d      }t	        |r|dz
  ndt
        j                        S )z0
        End of 'WORD': 'cE', 'dE', 'E'
        Tr  r3   r   r   r-  r/  s     rC   _end_of_WORDz&load_vi_bindings.<locals>._end_of_WORD   sL    
 ""++AA))$ B 
 S#'an6N6NOOrB   ru   c                h    | j                   j                  j                         \  }}t        ||      S )z+
        Inner 'word': ciw and diw
        r   rZ   find_boundaries_of_current_wordrE   r   rH   rI   s      rC   _inner_wordz%load_vi_bindings.<locals>._inner_word
  s/    
 ))22RRT
s%%%rB   c                l    | j                   j                  j                  d      \  }}t        ||      S )z'
        A 'word': caw and daw
        T)include_trailing_whitespacer5  r7  s      rC   _a_wordz!load_vi_bindings.<locals>._a_word  s<    
 ))22RR(, S 

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

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

s %%%rB   c                    | j                   j                  j                         }| j                   j                  j                  | j                        }t        ||      S )z!
        Auto paragraph.
        r   )r   rZ   start_of_paragraphend_of_paragraphr   rE   r7  s      rC   
_paragraphz$load_vi_bindings.<locals>._paragraph0  sN    
 $$--@@B""++<<599<M%%%rB   ^c                `    t        | j                  j                  j                  d            S )z9'c^', 'd^' and '^': Soft start of line, after whitespace.Tr	  rE   r   rZ   r  r   s    rC   _start_of_linez(load_vi_bindings.<locals>._start_of_line9  s4       ))DD!% E 
 	
rB   0c                `    t        | j                  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	  rF  r   s    rC   _hard_start_of_linez-load_vi_bindings.<locals>._hard_start_of_lineB  s4       ))DD!& E 
 	
rB   c                     d fd}|)  d    d      |         d   d      |       y  d   |d      |       y)z
        Delete/Change string between this start and stop character. But keep these characters.
        This implements all the ci", ci<, ci{, ci(, di", di<, ca", ca<, ... combinations.
        c                   k(  rO| j                   j                  j                  d      }| j                   j                  j                  d      }nL| j                   j                  j	                        }| j                   j                  j                        }||rdnd}t        |dz   |z
  ||z         S t        d      S )NF)in_current_liner   r3   )r   rZ   find_backwardsfindfind_enclosing_bracket_leftfind_enclosing_bracket_rightrE   )r   rH   rI   offsetci_endci_startinners       rC   handlerz?load_vi_bindings.<locals>.create_ci_ca_handles.<locals>.handlerW  s    6!,,55DDe E  **3388QV8W ,,55QQf **33PPf  S_#!%!)f"4cFlCC "!}$rB   NaiTr3  r   r   rm   rE   rA   )rT  rS  rU  keyrV  r   s   ```  rC   create_ci_ca_handlesz.load_vi_bindings.<locals>.create_ci_ca_handlesN  sT    	%. ;DKUXtDWMBKUVTB7K?KUS$?HrB   )FT))rn  rn  )'r[  )`r\  )[])r  r  ){})r  r  r_  r`  c                z    | j                   j                  j                  | j                  d      }t	        |      S )zi
        Move to previous blank-line separated section.
        Implements '{', 'c{', 'd{', 'y{'
        T)r   r5  )r   rZ   rA  r   rE   r   indexs     rC   _previous_sectionz+load_vi_bindings.<locals>._previous_section  s<     $$--@@))D A 
 %  rB   c                z    | j                   j                  j                  | j                  d      }t	        |      S )ze
        Move to next blank-line separated section.
        Implements '}', 'c}', 'd}', 'y}'
        T)r   r6  )r   rZ   rB  r   rE   rb  s     rC   _next_sectionz'load_vi_bindings.<locals>._next_section  s;     $$-->>))4 ? 
 %  rB   fc                (   t        | j                  d      | j                  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rM  r   r   r   r(   r)  r}   r~   last_character_findr   rZ   rO  r   rE   r9   r;   r   matchs     rC   _find_next_occurrencez/load_vi_bindings.<locals>._find_next_occurrence  ss     2?uzz51Q		.$$--22JJEII 3 
 e.*B*BCCa= rB   Fc                    t        | j                  d      | j                  j                  _        t        | j                  j                  j                  | j                  d| j                        xs d      S )z
        Go to previous occurrence of character. Typing 'Fx' will move the
        cursor to the previous occurrence of character. 'x'.
        Tri  r   )
r(   r)  r}   r~   rk  rE   r   rZ   rN  r   r   s    rC   _find_previous_occurrencez3load_vi_bindings.<locals>._find_previous_occurrence  sf     2?uzz41P		.  ))88

D		 9   	
 	
rB   tc                .   t        | j                  d      | j                  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.
        FTri  r3   r   r   rj  rl  s     rC   _tzload_vi_bindings.<locals>._t  sw    
 2?uzz51Q		.$$--22JJEII 3 
 eain.F.FGGa= rB   Tc                   t        | j                  d      | j                  j                  _        | j
                  j                  j                  | j                  d| j                        }t        |r	|dz         S d      S )zS
        Move left to the previous occurrence of c, then one char forward.
        Tri  r3   r   )
r(   r)  r}   r~   rk  r   rZ   rN  r   rE   rl  s     rC   _Tzload_vi_bindings.<locals>._T  sl    
 2?uzz41P		.$$--<<JJEII = 
 u%!)44!44rB   c                2       rdnd      d fd       }y)z.
        Create ',' and ';' commands.
        ,;c                   d}| j                   j                  }t        j                  }|j                  r|j                  j
                  }|j                  j                  }r| }|r3| j                  j                  j                  |d| j                        }nB| j                  j                  j                  |d| j                        }t        j                  }|rt        ||      S t        d      S )zB
            Repeat the last 'f'/'F'/'t'/'T' command.
            r   Tri  r   )r}   r~   r9   r:   rk  	character	backwardsr   rZ   rN  r   rO  r;   rE   )r   posr~   rJ   charr}  reverses         rC   rc   z+load_vi_bindings.<locals>.repeat.<locals>._  s    
  Cyy))H!++D++33==$88BB	$-I..77FFd%)) G C  ..77<<d%)) = C *33D!#D11!!}$rB   NrX  rA   )r  rc   r   s   ` rC   repeatz load_vi_bindings.<locals>.repeat  s     
 
GS	-	% 
.	%rB   hleftc                t    t        | j                  j                  j                  | j                              S )z:
        Implements 'ch', 'dh', 'h': Cursor left.
        r   )rE   r   rZ   r   r   r   s    rC   _leftzload_vi_bindings.<locals>._left  s2       ))BBBS
 	
rB   )ru   rv   c                    t        | j                  j                  j                  | j                        t
        j                        S )z<
        Implements 'cj', 'dj', 'j', ... Cursor up.
        r   r   )rE   r   rZ   r  r   r9   r<   r   s    rC   _downzload_vi_bindings.<locals>._down   s;       ))BBBS((
 	
rB   c                    t        | j                  j                  j                  | j                        t
        j                        S )z<
        Implements 'ck', 'dk', 'k', ... Cursor up.
        r   r   )rE   r   rZ   r  r   r9   r<   r   s    rC   _upzload_vi_bindings.<locals>._up  s;    
   ))@@uyy@Q((
 	
rB   lr1  rightc                t    t        | j                  j                  j                  | j                              S )zL
        Implements 'cl', 'dl', 'l', 'c ', 'd ', ' '. Cursor right.
        r   )rE   r   rZ   r  r   r   s    rC   _rightz load_vi_bindings.<locals>._right  s2       ))CC%))CT
 	
rB   Hc                t   | j                   j                  j                  }| j                  }|rP|j                  rD|j
                  j                  |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_inforZ   rW   first_visible_linerV   rX   text_before_cursorrE   r9   r<   r   r  r   r~  s       rC   _top_of_screenz(load_vi_bindings.<locals>._top_of_screen"  s     II++   

55MM444NPQ ##$  qzz4455C#N$;$;<<rB   Mc                p   | j                   j                  j                  }| j                  }|rN|j                  rB|j
                  j                  |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  rZ   rW   center_visible_linerV   rX   r  rE   r9   r<   r  s       rC   _middle_of_screenz+load_vi_bindings.<locals>._middle_of_screen:  s     II++   

55MM557 ##$  qzz4455C#N$;$;<<rB   Lc                r   | j                   j                  j                  }| j                  }|rP|j                  rD|j
                  j                  |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  rZ   rW   last_visible_linerV   rX   text_after_cursorrE   r9   r<   r  s       rC   _end_of_screenz(load_vi_bindings.<locals>._end_of_screenR  s    
 II++   

55MM333NPQ ##$  ajj223C#N$;$;<<rB   nc                    | j                   }| j                  j                  }|j                  |d| j                        }t        ||j                  z
        S )z
        Search next.
        Fr  r   r   r}   r  get_search_positionr   rE   rV   r   r   r  rV   s       rC   _search_nextz&load_vi_bindings.<locals>._search_nexti  sV    
 ##yy55225		 3 
 /D,@,@@AArB   c                    | j                   j                  }| j                  j                  |d| j                         y)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  s7    
 yy55))5		 	* 	
rB   Nc                    | j                   }| 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  sX    
 ##yy5522ME 3 
 /D,@,@@AArB   c                    | j                   j                  }| j                  j                  | d| j                         y)zV
        Search previous in navigation mode. (This goes through the history.)
        Fr  Nr  r  s     rC   _search_previous2z+load_vi_bindings.<locals>._search_previous2  s9    
 yy55))ME 	* 	
rB   zc                    | j                   }|j                  j                  | j                  j                  j
                  _        y)zd
        Scrolls the window to makes the current line the first line in the visible region.
        N)r   rZ   r3  r}   r  r  vertical_scrollr   s     rC   _scroll_topz%load_vi_bindings.<locals>._scroll_top  s1       :;**:X:X		''7rB   c                N    d| j                   j                  j                  _        y)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     ;<		''7rB   c                j   | j                   j                  j                  }| j                  }|r|j                  rx|j                  }|j
                  dz  }t        d|j                  j                  dz
        }d}|dkD  r+|j                  |      }||z   |k  r||z  }|dz  }nn|dkD  r+||_
        yyy)z9
        Center Window vertically around cursor.
        r/   r   r3   N)r}   r  r  r   r  window_heightmaxrZ   r3  get_height_for_liner  )r   r  r   infoscroll_heightr  heightline_heights           rC   _scroll_centerz(load_vi_bindings.<locals>._scroll_center  s    
 II++  ==D !..!3MAqzz559:AFa%"66q9K'-7k)FFA a% !"A% 1rB   %c                   | j                   }| j                  rd| j                  cxk  rdk  rn t        d      S |j                  j	                  t        | j                  |j                  j                  z  dz
  dz        d      }t        ||j                  j                  z
  t        j                        S t        d      S |j                  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   rZ   rW   rl   
line_countrE   rV   r9   r<   find_matching_bracket_positionr;   )r   r`   absolute_indexrm  s       rC   _goto_corresponding_bracketz5load_vi_bindings.<locals>._goto_corresponding_bracket  s     %%:: 599## "!}$ "(!K!KV__%?%??!CsJKQ" ""V__%D%DD'00 
 "!}$ OOBBDE!%n.F.FGG!!}$rB   |c                x    t        | j                  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   rZ   get_column_cursor_positionr   r   s    rC   
_to_columnz$load_vi_bindings.<locals>._to_column  s4       ))DDUYYQR]S
 	
rB   c                "   | j                   j                  }| j                  rEt        |j	                  | j
                  dz
  d      |j                  z
  t        j                        S t        |j                         t        j                        S )z_
        Go to the start of the very first line.
        Implements 'gg', 'cgg', 'ygg'
        r3   r   r   )
r   rZ   r   rE   rW   r   rV   r9   r<   get_start_of_document_position)r   r.  s     rC   _goto_first_linez*load_vi_bindings.<locals>._goto_first_line  sx       ))::,,UYY]A>ARARR#,,  0029P9P rB   rc   c                |    t        | j                  j                  j                         t        j
                        S )zQ
        Go to last non-blank of line.
        'g_', 'cg_', 'yg_', etc..
        r   )rE   r   rZ   'last_non_blank_of_current_line_positionr9   r;   r   s    rC   _goto_last_linez)load_vi_bindings.<locals>._goto_last_line  s2       ))QQS))
 	
rB   c                    | j                   j                  j                  | j                        }t	        ||dz
  ndt
        j                        S )zZ
        Go to last character of previous word.
        'ge', 'cge', 'yge', etc..
        r   r3   r   r   r   rZ   find_previous_word_endingr   rE   r9   r;   r   prev_ends     rC   _gezload_vi_bindings.<locals>._ge  sR     ''00JJ)) K 
 $0HqLan>V>V
 	
rB   c                    | j                   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  r3   r   r   r  r  s     rC   _gEzload_vi_bindings.<locals>._gE  sT     ''00JJ))$ K 
 $0HqLan>V>V
 	
rB   mc           	        | j                   j                  j                  }| j                  }|r|j                  r|j                  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_widthrZ   r  rl   r  rX   r'  rE   r9   r;   )r   r  r   widthrH   s        rC   _gmzload_vi_bindings.<locals>._gm+  s    
 II++##MM..EMM<<e<TESUQYDMM,F,F(GHIIEe.*B*BCC!}rB   Gc                    | j                   }t        |j                  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   rZ   rW   r  rV   r9   r<   )r   bufs     rC   
_last_linez$load_vi_bindings.<locals>._last_line;  sW    
 ""LL33CLL4K4Ka4OQRS!!"((
 	
rB   c                T    | j                   j                  | j                  dz
         y)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      	**599q=9rB   	123456789c                :    | j                  | j                         y)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     %%ejj1rB   c                :    | j                  | j                         y)z9
        Zero when an argument was already give.
        Nr  r   s    rC   _0_argz load_vi_bindings.<locals>._0_arga  s     	!!%**-rB   c                R    | j                   j                  | j                  d       y)z1
        Insert data at cursor position.
        Tr  N)r   r  r)  r   s    rC   _insert_textz&load_vi_bindings.<locals>._insert_textn  s!    
 	((t(DrB   c                    | j                   j                  | j                  d       | j                   xj                  dz  c_        t        j
                  | j                  j                  _        y)z>
        Replace single character at cursor position.
        Tr  r3   N)	r   r  r)  rV   r)   r   r}   r~   r   r   s    rC   _replace_singlez)load_vi_bindings.<locals>._replace_singleu  sP    
 	((t(D,,1,(1(<(<		%rB   c                    | j                    S rG   )	is_repeatr  s    rC   r   z"load_vi_bindings.<locals>.<lambda>  s    1;; rB   c                   | j                   }|j                  }g }d}|j                  D ]3  }|j                  |||        |j                  | j                         |}5 |j                  ||d        t        |j                        D cg c]  \  }}||z   dz    }}}dj                  |      |_        ||_        |xj                  dz  c_        yc c}}w )z
        Insert data at multiple cursor positions at once.
        (Usually a result of pressing 'I' or 'A' in block-selection mode.)
        r   Nr3   r   )r   rg   rK  rJ  r)  rH  r2  rV   )	r   r   original_textrg   rb  p2r;  r~  new_cursor_positionss	            rC   _insert_text_multiple_cursorsz7load_vi_bindings.<locals>._insert_text_multiple_cursors~  s     ##		 00 	BKKa+,KK

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

 GGDM	)=&! 
s   Cc                $   | j                   }|j                  }d}g }d}|j                  D ]B  }|dkD  r%||dz
     dk7  r|j                  |||dz
          d}n|j                  |||        |}D |j                  ||d        |rb|dd D cg c]  }t	        |       }}t        t        |            }	dj                  |      |_        |	|_        |xj                  dz  c_        y| j                  j                  j                          yc c}w )	z4
        Backspace, using multiple cursors.
        Fr   r3   r0  TNr   )r   rg   rK  rJ  rX   listr   r2  rV   r}   r  r  )
r   r   r  deleted_somethingrg   rb  r  partlengthsr  s
             rC   _delete_before_multiple_cursorsz9load_vi_bindings.<locals>._delete_before_multiple_cursors  s   
 ##		 "00 	BAv-Q/47M!b1f56$(!M!B/0A	 	M!"%&-1#2Y7Ts4y7G7#'
7(;#<  DI-AD*  A% II!!# 8s   Dr  c                   | j                   }|j                  }d}g }g }d}|j                  D ]6  }|j                  |||        |t	        |      k\  s||   dk(  r|}0|dz   }d}8 |j                  ||d        |rM|dd D cg c]  }t	        |       }	}t        t        |	            }dj                  |      |_        ||_        y| j                  j                  j                          yc c}w )	z1
        Delete, using multiple cursors.
        Fr   r0  r3   TNr  r   )r   rg   rK  rJ  rX   r  r   r2  r}   r  r  )
r   r   r  r  rg   r  rb  r  r  r  s
             rC   _delete_after_multiple_cursorsz8load_vi_bindings.<locals>._delete_after_multiple_cursors  s    
 ##		 "!00 	)BKKa+,S''=+<+DF$(!	) 	M!"%&-1#2Y7Ts4y7G7#'
7(;#<  DI-AD*II!!# 8s   C.c                   | j                   }g }|j                  D ]9  }|j                  j                  |      d   dkD  r|dz  }|j	                  |       ; ||_        |j                  j
                  dkD  r|xj                  dz  c_        yy)z`
        Move all cursors to the left.
        (But keep all cursors on the same line.)
        r3   r   N)r   rK  rZ   rU   rJ  cursor_position_colrV   )r   r   new_positionsrb  s       rC   _left_multiplez(load_vi_bindings.<locals>._left_multiple  s     ##// 	$A}}88;A>BQ  #	$
 *7&==,,q0  A%  1rB   c                Z   | j                   }g }|j                  D ][  }|j                  j                  |      \  }}|t	        |j                  j
                  |         k  r|dz  }|j                  |       ] ||_        |j                  j                  s|xj                  dz  c_        yy)za
        Move all cursors to the right.
        (But keep all cursors on the same line.)
        r3   N)	r   rK  rZ   rU   rX   rY   rJ  is_cursor_at_the_end_of_linerV   )r   r   r  rb  r\   columns         rC   _right_multiplez)load_vi_bindings.<locals>._right_multiple  s     ##// 	$A--CCAFKCDMM//455Q  #		$ *7&}}99  A%  :rB   c                     y)zN
        Ignore all up/down key presses when in multiple cursor mode.
        NrA   r   s    rC   _updown_multiplez*load_vi_bindings.<locals>._updown_multiple  r  rB   zc-xzc-lc                8    | j                   j                          y)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                     y)z&
        Complete file names.
        NrA   r   s    rC   _complete_filenamez,load_vi_bindings.<locals>._complete_filename  s     	rB   zc-kc                :    d| j                   j                  _        y)z'
        Go into digraph mode.
        TN)r}   r~   waiting_for_digraphr   s    rC   _digraphz"load_vi_bindings.<locals>._digraph%  s    
 26		.rB   c                N    | j                   | j                  j                  _        y)z'
        First digraph symbol.
        N)r)  r}   r~   r   r   s    rC   	_digraph1z#load_vi_bindings.<locals>._digraph1,  s    
 .3ZZ		*rB   c                   	 | j                   j                  j                  xs d| j                  f}|t        vr|ddd   }t        |   }| j                   j                  j
                  t        j                  k(  }| j                  j                  t        |      |       d| j                   j                  _        d| j                   j                  _        d| j                   j                  _        y# t        $ r' | j                   j                  j                          Y fw xY w# 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28b

%D 8#DbDzd^F 		**559J9JJI  ,,S[I,N5:EII25:EII215EII.  	$II!!#	$ 6;EII215EII.s+   A	C4 A2D' 4-D$!D' #D$$D' '8Ezc-oc                :    d| j                   j                  _        y)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<		4rB   c                    | j                   d   j                  }|t        v r%| j                  j                  }||_        d|_        yy)z(
        Start recording macro.
        r3   r   N)rp  r)  rq  r}   r~   recording_registercurrent_recording)r   r$  r~   s      rC   _start_macroz&load_vi_bindings.<locals>._start_macroT  sG    
 q!&&!!yy))H*+H')+H&	 "rB   c                    | j                   j                  }|j                  r;t        |j                        |j
                  |j                  <   d|_        d|_        yy)z'
        Stop recording macro.
        Nr   )r}   r~   r  r   r  rr  )r   r~   s     rC   _stop_macroz%load_vi_bindings.<locals>._stop_macro`  sZ    
 99%% &&DQ**EH$$X%@%@A +/H')+H& 'rB   @)rt   record_in_macroc                   | j                   d   j                  }	 | j                  j                  j                  |   }g }t        |j                        }|j                  |j                         |j                          t        | j                        D ])  }| j                  j                  j                  |d       + y# t
        $ r Y yw xY w)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)rp  r)  r}   r~   rr  r  r$   rJ  feedrg   flushrT  r   key_processorfeed_multiple)r   r$  macror   parserrc   s         rC   _execute_macroz(load_vi_bindings.<locals>._execute_macroo  s     q!&&	II&&66q9E  "T[[)EJJ uyy! 	DAII##11$d1C	D  		s   #C 	CCr   )F)r   r   r6  r   rm   r   )r   r   r  r   rm   r   )rt   r   r  zCallable[[str], str]r  r   rm   r   r  rX  rG   )
rT  r   rS  r   rU  r   rY  z
str | Nonerm   r   )r  r   rm   r   )r1   r   r   r   r   r   r   r   r   r4   r"   r   r   r   r   r   r*   r  r   r   r#   r   r   r    r   r   r   r   r0   r   )r   handleTransformFunctionvi_transform_functionsr   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r#  r*  r-  r7  r:  r=  r@  rP  rW  r[  r_  ra  ri  rm  ru  rw  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   rg  funcr  r  r  r  r  r  r!  r$  r)  r+  r0  r2  r8  r;  r=  r?  rC  rG  rJ  rZ  rU  rT  rS  rd  rf  rn  rq  rt  rw  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"  r-  rN  r  r   s                                                                                                                                                   @@@rC   r5   r5     s     =LF
 eCHovxs
7KKL
 H:	
 
VX<=	VX<=	VX?@,	
7* )F5(_)EFH$ $ C)*8 +8 C)*: +: D+,E,-6 . -6 C*+
 ,
 F-.E,-8 . /8 C*+
 ,
 K 23
 4
 E.)2 *2 E.)	1 *	1 E.)E.)3 * *3 E.)1 *1 ?F7-=>M" :F7=L=89+m:TUG]N-??@
 A
 H/09 19 H^,= -= C*l]:;9 <9 C*l]:;9 <9 C*l]:;	9 <	9 C/<-?@C*l]:;9 < A9" C*+. ,. C/0R 1R@ C)*5 +5 C*l]:;9 <9 C*l]:;
 <
 C*l]:; << C*l]:;5 <5 C*l]:;2 <2 C/<-?@> A> C)\M9:3 ;3 C.,>?? @? C*+
 ,
 C*+
 ,
 C3'9:
 ;
 C3'9:
 ;
 C*+A ,A C*+: ,: C*l]:;9 <9 C*J( K( C*+Q ,Q E,-Q .Q C)*6 +6 C*+V ,V C)*6 +6 E+,6 -6 C./C./
C 0 0
C C*+/ ,/ C*+/ ,/ C/0C*+O , 1O C*+

 ,

 C*+

 ,

 C/0E.)= * 1= C/0E.)M * 1M C*l]:;9 <9 C*l]:;9 <9 C*+= ,= Cc"4}"DE9 F9 Cc"4}"DE9 F9 Cc"4}"DE< F< C*+
V ,
V C*+
V ,
V C*+ ,
 C*+ ,
 )6H.|<KDHH<=  >  27#A#A*.#A	#AJ 'ue4&ud3&tU3&tT2MM(<MBEM	M, - .
1d D-1-. c]9 9 c488S!C "C c]5 5 c]7 7 c3& & 
 
 	
 	
 T T 
 
 	
 	
 P P P P c40& 1& c40& 1& c40& 1& c40& 1& c40& 1& 
 
 	
 	
 DH$I$I"$I+/$I6@$I	$IL  3!
 		:Hf !659		: 	S#uc2S#uc23 ! ! ! ! dhh!  ! dhh
  
 dhh!  ! dhh5  5"%H 4L
5M
  
 dF
	 G
 dF
 G
 
   
 = =. = =. = =, d+
B ,
B C*+
 ,
 d+
B ,
B C*+
 ,
 C/2CCDC/2CCDC!36G!GHY I E EY C/2CCDC/2CCD< E E< C/2CCD" E"6 % %: 
 
 c & c
 
 c

 

 c

 

 c  	
 	
 C : !:  2	% -.

	2

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