o
    e                  	   @   sx  d dl mZmZmZ d dlZd dlm  mZ d dlm  m	Z	 d dl
mZ d dl
mZ ddlmZ G dd dejZdZd	Zd
ZdZdZdZdZdZdZdZG dd dZG dd dZG dd dZdd Zdd Zdd Z d?ddZ!d?d d!Z"d?d"d#Z#d?d$d%Z$G d&d' d'e%Z&d?d(d)Z'd?d*d+Z(d?d,d-Z)d?d.d/Z*d?d0d1Z+d?d2d3Z,d4d5d6d7d8d9d:d;d<Z-d@d=d>Z.dS )A    )absolute_importprint_functionunicode_literalsN)log   )basemodec                       s
  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
ee
Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd=d#d$Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"  Z#S )>ViModevic                    s   t t| | d | _d S N)superr   __init___ViMode__vi_insert_mode)selfZrlobj	__class__ DD:\Projects\ConvertPro\env\Lib\site-packages\pyreadline3/modes/vi.pyr         
zViMode.__init__c                 C      dS )Nz<ViMode>r   r   r   r   r   __repr__      zViMode.__repr__c                 C   s   dd }|  }|| jv rt| jdkrt| j|| j}t	d||f  d }|r4||}| j
  || _|r?|   dS dS )Nc                 S   s   d S r
   r   )er   r   r   nop"   r   z$ViMode.process_keyevent.<locals>.nopr   zreadline from keyboard:%s->%sTF)tupleZexit_dispatchlineobjZ	EndOfLinel_bufferEOFErrorkey_dispatchgetvi_keyr   Z	push_undoZprevious_funcZ_update_line)r   Zkeyinfor   ZkeytupleZdispatch_funcrr   r   r   process_keyevent!   s    

zViMode.process_keyeventc                 C   sz  d| _ i | _d| _d| _d| _d| _d| _d| _d| _d| _	g | _
d| _d| _d| _d| _|   | d ttddD ]}| d	t| | j q=| d
| j | d| j | d| j | d| j | d| j | d| j | d| j | d| j | d| j | d| j | d| j | d| j  | d| j! | d| j" | d| j# | d| j$ dS )zInitialize vi editingmodeonNT r       z%sZ	BackSpaceEscapeReturnLeftRightZHomeZEndDeletez	Control-dz	Control-zz	Control-rZUpz	Control-pZDownz	Control-nZTab)%Zshow_all_if_ambiguousr   r   _vi_command_vi_command_edit_vi_key_find_char_vi_key_find_direction_vi_yank_buffer_vi_multiplier1_vi_multiplier2_vi_undo_stack_vi_undo_cursor_vi_current_vi_search_text_vi_search_positionvi_save_linevi_set_insert_moderangeordZ	_bind_keychrr    vi_backspace	vi_escapevi_accept_lineZbackward_charZforward_charbeginning_of_lineend_of_linedelete_charvi_eofvi_redovi_arrow_upvi_upvi_arrow_downvi_downvi_complete)r   r   cr   r   r   init_editing_mode:   sF   
zViMode.init_editing_modec                 C   sF   | j s	t| | _ n| j jr| j jr| j | _t| | _ | j |j d S r
   )r-   	ViCommandis_endis_editr.   add_charcharr   r   r   r   r   r    d   s   
zViMode.vi_keyc                 C   s   |    d S r
   )_bellr   r   r   r   vi_errorm      zViMode.vi_errorc                 C   s   | j S r
   )r   r   r   r   r   vi_get_is_insert_modep   s   zViMode.vi_get_is_insert_modec                 C   sj   | j r| jr| j|j nt| | _| d tj| j_	d S | jr/| jj
r/| j|j d S |   d S )NF)vi_is_insert_moder-   rP   rQ   rM   r:   r   ZPrevCharr   pointis_replace_onerT   rR   r   r   r   r?   t   s   

zViMode.vi_escapec                 C   s(   | j r| j |j d S | | j  d S r
   )r-   rP   rQ   _vi_do_backspacerR   r   r   r   r>      s   zViMode.vi_backspacec                 C   s   | j s
| jrT| jjrV| jjdkrR| j jd8  _| jjrEz| j| j d | jj }|| jj| jj< W d S  t	yD   | jj| jj= Y d S w | 
  | jj| jj= d S d S d S d S Nr   r   )rW   r-   	is_searchr   rX   	overwriter4   r5   line_buffer
IndexErrorr9   )r   vi_cmdprevr   r   r   rZ      s$   zViMode._vi_do_backspacec                 C   s`   | j r| j jr| j   dS d | _ | d g | _d| _d | _| jjr+| 	| j
  | |S )NFTr%   )r-   r\   	do_searchr:   r4   r5   r6   r   r^   Zadd_historycopyZaccept_linerR   r   r   r   r@      s   


zViMode.vi_accept_linec                 C   s   t r
   )r   rR   r   r   r   rD      r   zViMode.vi_eofc                 C   s4   | j |krd S || _ |r|   d| _d S d| _d S )N   d   )r   r9   Zcursor_size)r   valuer   r   r   r:      s   


zViMode.vi_set_insert_modec                 C   s*   | j j| j jd d  f}|g| _d| _d S Nr   )r   rX   r^   r4   r5   r   Ztpl_undor   r   r   vi_undo_restart   s   
zViMode.vi_undo_restartc                 C   sz   | j r| jdkr| j | jd d = | jj| jjd d  f}| j r,| j | j d |d kr;| j | |  jd7  _d S d S r[   )r4   r5   r   rX   r^   appendrh   r   r   r   r9      s   zViMode.vi_save_linec                 C   s$   | j t| jd kr|   d S d S Nr   )r5   lenr4   r9   r   r   r   r   vi_undo_prepare   s   zViMode.vi_undo_prepareTc                 C   s>   |    | jr| jdkr|   d S |  jd8  _|   d S r[   )rm   r4   r5   rT   vi_undo_assign)r   Zdo_popr   r   r   vi_undo   s   zViMode.vi_undoc                 C   s0   |    | jdkrd| _|   d S |   d S rg   )rm   r5   rn   rT   r   r   r   r   vi_undo_all   s
   
zViMode.vi_undo_allc                 C   s0   | j | j }|d d d  | j_|d | j_d S Nr   r   )r4   r5   r   r^   rX   rh   r   r   r   rn      s   zViMode.vi_undo_assignc                 C   s:   | j t| jd kr|   d S |  j d7  _ |   d S rk   )r5   rl   r4   rT   rn   rR   r   r   r   rE      s
   zViMode.vi_redoc                 C   sl   |D ]-}| j j| }| | j}|dkr/|| _|| j _t|j| j	_|| j	_
|    dS q|   dS )Nr   TF)_historyhistoryget_line_textfindr7   r8   history_cursorlistr^   r   rX   ri   rS   )r   rngiZline_historyposr   r   r   	vi_search   s   zViMode.vi_searchc                 C   s   d | jjdd  }|r|| _t| jjd | _n| jr%|  jd8  _n
|   | 	  d S | 
tt| jddsA| 	  d S d S )Nr$   r   r%   )joinr   r^   r7   rl   rr   rs   r8   rT   ro   r{   rw   r;   r   textr   r   r   vi_search_first   s   zViMode.vi_search_firstc                 C   s    |  tt| jd dd d S Nr   r%   )r{   rw   r;   r8   r   r   r   r   vi_search_again_backward       zViMode.vi_search_again_backwardc                 C   s&   |  tt| jd t| jj d S rk   )r{   rw   r;   r8   rl   rr   rs   r   r   r   r   vi_search_again_forward   s   zViMode.vi_search_again_forwardc                 C   s\   | j jt| j jkr| jjd d  | _| j | j | jr#| 	| n| 
| |   d S r
   )rr   rv   rl   rs   r   r^   r6   Zprevious_historyrW   rB   rA   ri   rR   r   r   r   rG     s   
zViMode.vi_upc                 C   s   | j jt| j jkr|   d S | j jt| j jd k r7| j | j | jr,| | n| 	| | 
  d S | jd urdt| j j| j _| j| j_| | | js_| jjdkr_| j jd8  _d | _d S |   d S rq   )rr   rv   rl   rs   rT   Znext_historyr   rW   rB   rA   ri   r6   r^   rX   rR   r   r   r   rI     s$   




zViMode.vi_downc                 C       |  d | | |   d S NT)r:   rG   r9   rR   r   r   r   rF   $     

zViMode.vi_arrow_upc                 C   r   r   )r:   rI   r9   rR   r   r   r   rH   )  r   zViMode.vi_arrow_downc                 C   s*   | j  }|r| s| |S | |S r
   )r   rt   isspaceZcompleter    )r   r   r~   r   r   r   rJ   .  s   


zViMode.vi_complete)T)$__name__
__module____qualname__moder   r   r"   rL   r    rT   rV   propertyrW   r?   r>   rZ   r@   rD   r:   ri   r9   rm   ro   rp   rn   rE   r{   r   r   r   rG   rI   rF   rH   rJ   __classcell__r   r   r   r   r      s@    *	
	
r   Zvi_beginZ	vi_multi1Z	vi_actionZ	vi_multi2Z	vi_motionZvi_motion_argumentZvi_replace_oneZvi_textr{   Zvi_endc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:e;e:Z<dqdr Z=e;e=Z>dsdt Z?e;e?Z@dudv ZAdwdx ZBdydz ZCdd}d~ZDdddZEdddZFdddZGdddZHdddZIdddZJdddZKdddZLdddZMdddZNdddZOdddZPdddZQdddZRdddZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd ZadS )rM   c                 C   s   || _ g | _t| _| j| _d | _d | _d | _d | _	d| _
d| _d| _d| _d| _d| _d| j _d| j _| d d| _d| _td| jtd| jtd| jtd| jtd	| jtd
| jtd| jtd| jtd| jtd| jd| j i| _!d S )NFr   r$      $^;,%./*|~   )"readlinelst_char	_VI_BEGINstatemovementactionmotionmotion_argumentr~   
pos_motionrO   is_overwriteis_erroris_stardelete_leftdelete_rightr2   r3   set_override_multiplierskip_multiplertabstopr<   
key_dollarkey_hatkey_semicolon	key_commakey_percentkey_dot	key_slashkey_starkey_bar	key_tildekey_backspacedct_fcn)r   r   r   r   r   r   G  s>   











zViCommand.__init__c                 C   sj  | j | | jtkr| jjr| j  t| _| jtkr.|dkr'| 	| d S | 
| d S | jtkri|dkr>| | d S |dkrW| j}d|| jjj|   }| 
| d S |dkrb| 	| d S | 
| d S | jtkru| | d S | jtkr| | d S z	| jt| }W n ty   t| d| d }Y nw |r|| d S | r| | d S |   d S )N	r&   zkey_%s)r   rj   r   r   r   rW   r9   _VI_TEXT
_VI_SEARCHr   set_textescaper   r   rX   _VI_MOTION_ARGUMENTset_motion_argument_VI_REPLACE_ONEreplace_oner   r<   BaseExceptiongetattrisdigit	key_digiterror)r   rQ   tswsZfcn_instancer   r   r   rP   i  sT   





	







zViCommand.add_charc                 C   s.   | j d u r	|| _ n|  j |7  _ | | d S r
   )r~   
set_bufferr}   r   r   r   r     s   
zViCommand.set_textc                 C   s   |D ]@}|  |s
q| jr-| jjjt| jjjk r$|| jjj| jjj< n| jjj| n| jjj| jjj| | jj jd7  _qd S rk   )	char_isprintr   r   r   rX   rl   r^   rj   insert)r   r~   rQ   r   r   r   r     s   



zViCommand.set_bufferc                 C   sz   |dkr
|    d S d| _| j  |  }| jjj}|| | jjj||| < |dkr7| jj j|d 7  _|    d S )Nr   Tr   )endrO   r   r9   get_multiplierr   rX   r^   )r   rQ   timescursorr   r   r   r     s   

zViCommand.replace_onec                 C   s    t |t dkot |t dkS )Nr&   r   )r<   r   rQ   r   r   r   r     r   zViCommand.char_isprintc                 C   s    | j | _d| _t| _|   d S rk   )motion_end_in_liner   r   
_VI_MOTIONr   applyr   r   r   r   r        zViCommand.key_dollarc                 C      | j | _t| _|   d S r
   )motion_beginning_of_liner   r   r   r   r   r   r   r   r        zViCommand.key_hatc                 C   s*   | j ttfv r| | d S | | d S r
   )r   r   
_VI_ACTIONr   r   r   r   r   r   key_0  s   zViCommand.key_0c                 C   s\   | j ttfv r| j j|7  _d| j_t| _ d S | j ttfv r,| j j|7  _t| _ d S d S )Nr$   )r   r   
_VI_MULTI1r   r2   r3   r   
_VI_MULTI2r   r   r   r   r     s   

zViCommand.key_digitc                 C   4   | j | jkr| | d S | j| _t| _|   d S r
   )r   changekey_emotion_word_shortr   r   r   r   r   r   r   r   key_w     
zViCommand.key_wc                 C   r   r
   )r   r   key_Emotion_word_longr   r   r   r   r   r   r   r   key_W  r   zViCommand.key_Wc                 C       | j | _t| _d| _|   d S rk   )motion_end_shortr   r   r   r   r   r   r   r   r   r     r   zViCommand.key_ec                 C   r   rk   )motion_end_longr   r   r   r   r   r   r   r   r   r     r   zViCommand.key_Ec                 C   r   r
   )motion_back_shortr   r   r   r   r   r   r   r   key_b  r   zViCommand.key_bc                 C   r   r
   )motion_back_longr   r   r   r   r   r   r   r   key_B  r   zViCommand.key_Bc                 C       d| j _| j| _d| _t| _d S NTr   )r   r0   motion_find_char_forwardr   r   r   r   r   r   r   r   key_f      
zViCommand.key_fc                 C   r   )NFr   )r   r0   motion_find_char_backwardr   r   r   r   r   r   r   r   key_F  r   zViCommand.key_Fc                 C   s   | j | _d| _t| _d S rk   )motion_to_char_forwardr   r   r   r   r   r   r   r   key_t  s   
zViCommand.key_tc                 C   s   | j | _t| _d S r
   )motion_to_char_backwardr   r   r   r   r   r   r   key_T  s   
zViCommand.key_Tc                 C      | j t| t| _d S r
   )r   rI   ViEvent_VI_ENDr   r   r   r   r   key_j  r   zViCommand.key_jc                 C   r   r
   )r   rG   r   r   r   r   r   r   r   key_k  r   zViCommand.key_kc                 C   D   | j jd u r|   d S | j jr| j| _n| j| _| | j j d S r
   )r   r/   r   r0   r   r   r   r   r   r   r   r   r        
zViCommand.key_semicolonc                 C   r   r
   )r   r/   r   r0   r   r   r   r   r   r   r   r   r   '  r   zViCommand.key_commac                 C   s    | j | _d| _t| _|   dS )find matching <([{}])>r   N)motion_matchingr   r   r   r   r   r   r   r   r   r   1  s   zViCommand.key_percentc                 C   s   | j j}|sd S |jr| | d S |  r|  }nd}t| j }|dkr1|| || n	|jr:||j |j	D ]}|
| q=|jrX| j jjdkrX| j j jd8  _| j d |   d S )Nr   r   F)r   r.   r   r   has_multiplierr   rM   r   override_multiplierr   rP   r   r   rX   r:   r   )r   rQ   Zvi_cmd_editcountr`   r   r   r   r   8  s*   




zViCommand.key_dotc                 C   s*   | j   dg| j j_d| j j_t| _d S )Nr   r   )r   r9   r   r^   rX   r   r   r   r   r   r   r   S  s   


zViCommand.key_slashc                 C   s   d| _ d| _| j  | j }|rFd|d }t|| jjj| jj	| jj
d < | jj
| jj	 }| jj jt|| 7  _| jd n|   t| _d S )NTr&   r   )r   rO   r   r9   Z_get_completionsr|   rw   r   r^   ZbegidxZendidxrX   rl   r:   r   r   r   )r   rQ   Zcompletionsr~   
prefix_lenr   r   r   r   Y  s   


zViCommand.key_starc                 C   r   r
   )motion_columnr   r   r   r   r   r   r   r   r   i  r   zViCommand.key_barc              	   C   s   d| _ | j  t|  D ]B}z6| jjj| jjj }| r,|	 | jjj| jjj< n|
 r<| | jjj| jjj< | jj jd7  _W q tyP   Y  nw |   d S r   )rO   r   r9   r;   r   r   r^   rX   isupperlowerislowerupperr_   r   )r   rQ   ry   rK   r   r   r   r   n  s   
zViCommand.key_tildec                 C   r   r
   )motion_leftr   r   r   r   r   r   r   r   key_h  r   zViCommand.key_hc                 C   s   | j ttfv r.| jr-t| jr-| jd d | _z| j  | j  W n ty,   Y nw n| | | j	
|  | j tkrH| j	jjsJt| _ d S d S d S )Nr%   )r   r   r   r~   rl   r   popr_   r
  r   rZ   r   r^   r   r   r   r   r   r     s"   



zViCommand.key_backspacec                 C   r   r
   )motion_rightr   r   r   r   r   r   r   r   key_l  r   zViCommand.key_lc                 C   s   d| _ t| _| jd d S r   )rO   r   r   r   r:   r   r   r   r   key_i  s   zViCommand.key_ic                 C   s&   d| _ t| _| jd d| jj_d S NTr   )rO   r   r   r   r:   r   rX   r   r   r   r   key_I  s   zViCommand.key_Ic                 C   s@   d| _ t| _| jd t| jjjr| jj jd7  _d S d S r   	rO   r   r   r   r:   rl   r   r^   rX   r   r   r   r   key_a  s   zViCommand.key_ac                 C   s0   d| _ t| _| jd t| jjj| jj_d S r   r  r   r   r   r   key_A  s   zViCommand.key_Ac                 C      d| _ t| _| j| _d S r   )rO   r   r   deleter   r   r   r   r   key_d     zViCommand.key_dc                 C       d| _ t| _| j| _|   d S r   )rO   r   r   delete_end_of_liner   r   r   r   r   r   key_D     zViCommand.key_Dc                 C   r  r   )rO   r   r   rC   r   r   r   r   r   r   key_x  r  zViCommand.key_xc                 C   r  r   )rO   r   r   delete_prev_charr   r   r   r   r   r   key_X  r  zViCommand.key_Xc                 C   sN   d| _ | jjj}| jjj|   }d| _| jd | jjj||= t| _	d S r   )
rO   r   r   rX   r   r   r:   r^   r   r   )r   rQ   i1i2r   r   r   key_s  s   

zViCommand.key_sc                 C   s0   d| _ | jd g | jj_d| jj_t| _d S r  rO   r   r:   r   r^   rX   r   r   r   r   r   r   key_S  s
   


zViCommand.key_Sc                 C   r  r   )rO   r   r   r   r   r   r   r   r   key_c  r  zViCommand.key_cc                 C   s2   d| _ | jd | jjj| jjjd = t| _d S r   r"  r   r   r   r   key_C  s   
zViCommand.key_Cc                 C   s
   t | _d S r
   )r   r   r   r   r   r   key_r     
zViCommand.key_rc                 C   s,   d| _ d| _d| jj_| jd t| _d S r   )rO   r   r   r   r]   r:   r   r   r   r   r   r   key_R  s
   

zViCommand.key_Rc                 C   s   t | _| j| _d S r
   )r   _stateyankr   r   r   r   r   key_y     zViCommand.key_yc                 C   s   | j j | j _|   d S r
   )r   r   rt   r1   r   r   r   r   r   key_Y  s   zViCommand.key_Yc                 C   sd   | j jsd S d| _| j   | j j jd7  _| j j| j j|    | j j jd8  _t| _	d S r   )
r   r1   rO   r9   r   rX   insert_textr   r   r   r   r   r   r   key_p  s   

zViCommand.key_pc                 C   sR   | j jsd S d| _| j   | j j| j j|    | j j jd8  _t| _	d S r   )
r   r1   rO   r9   r   r.  r   rX   r   r   r   r   r   r   key_P  s   

zViCommand.key_Pc                 C      | j   t| _d S r
   )r   ro   r   r   r   r   r   r   key_u     

zViCommand.key_uc                 C   r1  r
   )r   rp   r   r   r   r   r   r   key_U  r3  zViCommand.key_Uc                 C   s8   t | jjj}t|j| jj_d| jj_d| _t| _	d S )Nr   T)
ViExternalEditorr   r   r^   rw   resultrX   rO   r   r   )r   rQ   Zeditorr   r   r   key_v  s
   

zViCommand.key_vc                 C   s   | j   d| _d S r   )r   rS   r   r   r   r   r   r     r3  zViCommand.errorc                 C   
   | j tkS r
   )r   r   r   r   r   r   state_is_end   r'  zViCommand.state_is_endc                 C   r8  r
   )r   r   r   r   r   r   state_is_search$  r'  zViCommand.state_is_searchc                 C   r8  r
   )r   r   r   r   r   r   state_is_replace_one(  r'  zViCommand.state_is_replace_onec                 C   r1  r
   )r   r   r   r   r   r   r   r   rb   ,  r3  zViCommand.do_searchc                 C   r1  r
   )r   r   r   r   r   r   r   r   key_n0  r3  zViCommand.key_nc                 C   r1  r
   )r   r   r   r   r   r   r   r   key_N4  r3  zViCommand.key_Nr   r   c                 K   r   rg   r   r   lineindexr  kwr   r   r   r   8  r   z"ViCommand.motion_beginning_of_linec                 K   s   t dt| jjjd S r[   )maxrl   r   r   r^   r>  r   r   r   r   ;  s   zViCommand.motion_end_in_linec                 K      t |||S r
   )vi_pos_word_shortr>  r   r   r   r   >  rU   zViCommand.motion_word_shortc                 K   rC  r
   )vi_pos_word_longr>  r   r   r   r   A  rU   zViCommand.motion_word_longc                 K   rC  r
   )vi_pos_end_shortr>  r   r   r   r   D  rU   zViCommand.motion_end_shortc                 K   rC  r
   )vi_pos_end_longr>  r   r   r   r   G  rU   zViCommand.motion_end_longc                 K   rC  r
   )vi_pos_back_shortr>  r   r   r   r   J  rU   zViCommand.motion_back_shortc                 K   rC  r
   )vi_pos_back_longr>  r   r   r   r   M  rU   zViCommand.motion_back_longNc                 C      || j _t||||S r
   )r   r/   vi_pos_find_char_forwardr   r?  r@  r  rQ   r   r   r   r   P     z"ViCommand.motion_find_char_forwardc                 C   rJ  r
   )r   r/   vi_pos_find_char_backwardrL  r   r   r   r   T  rM  z#ViCommand.motion_find_char_backwardc                 C      t ||||S r
   )vi_pos_to_char_forwardrL  r   r   r   r   X     z ViCommand.motion_to_char_forwardc                 C   rO  r
   )vi_pos_to_char_backwardrL  r   r   r   r   [  rQ  z!ViCommand.motion_to_char_backwardc                 C   s   t d|| S rg   rB  rL  r   r   r   r	  ^  rQ  zViCommand.motion_leftc                 C   s   t t||| S r
   )minrl   rL  r   r   r   r  a  s   zViCommand.motion_rightc                 C   
   t ||S r
   )vi_pos_matchingrL  r   r   r   r   d  r'  zViCommand.motion_matchingc                 C   s   t d|d S r[   rS  rL  r   r   r   r  g  rQ  zViCommand.motion_columnc                 C   s   | j p
| jjp
| jjS r
   )r  r   r2   r3   r   r   r   r   r   j  s   zViCommand.has_multiplierc                 C   sZ   | j rt| j S | jjdkrd}nt| jj}| jjdkr#d}|| S t| jj}|| S )Nr$   r   )r  intr   r2   r3   )r   m1m2r   r   r   r   m  s   
zViCommand.get_multiplierc                 C   
   || _ d S r
   )r  )r   r  r   r   r   r   z  r'  z!ViCommand.set_override_multiplierc                 C   sd   | j r!| j | jjj| jjj|  | jd| _| jdk r!|   d S | 	  | j
tkr0|   d S d S )NrQ   r   )r   r   r   r^   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   }  s   

zViCommand.applyc                 C   s@   | j t| jjjkr| j | jj_d S t| jjjd | jj_d S rk   )r   rl   r   r   r^   rX   r   r   r   r   r     s   zViCommand.movementc                 C   sn   | j | jjjkr| jjj| jjj| j | j  }ntd| j | j }| jjj|| jjj| j  }|| j_d S rg   )	r   r   r   rX   r^   r   rB  r   r1   )r   sr@  r   r   r   r*    s   "
zViCommand.yankc                 C   s   | j   |   | j| j jjkr:| j jj| j jj| j| j = | j jjt| j jjkr8t| j jj| j j_d S d S t	d| j| j
 }| j jj|| j jj| j = || j j_d S rg   )r   r9   r*  r   r   rX   r^   r   rl   rB  r   )r   r@  r   r   r   r    s    


zViCommand.deletec                 C   s^   | j   | j j }|d | j jj }| j j| | j jjdkr-| j j jd8  _d S d S r[   )r   r9   r   rt   rX   Zset_line)r   Z	line_textr   r   r   r    s   
zViCommand.delete_end_of_linec                 C   sR   | j jj|   | _|   tdt| j jd }| j jj|kr'|| j j_d S d S r[   )r   r   rX   r   r   r  rB  rl   )r   r   r   r   r   rC     s   zViCommand.delete_charc                 C   s    | j jj|   | _|   d S r
   )r   r   rX   r   r   r  r   r   r   r   r    s   zViCommand.delete_prev_charc                 C   s$   | j d |   d| _t| _d S r   )r   r:   r  r   r   r   r   r   r   r   r     s   
zViCommand.changec                 C   sH   | j tkr| js|  }|dkr| jr| j|d  }| | t| _ d S rk   )r   r   r   r   r~   r   r   )r   rQ   r   extrar   r   r   r     s   


zViCommand.escapec                 C   s   || _ |   d S r
   )r   r   r   r   r   r   r     r,  zViCommand.set_motion_argumentc                 C   sD   t | _| jjjt| jjjkr tdt| jjjd | jj_d S d S r[   )r   r   r   r   rX   rl   r^   rB  r   r   r   r   r     s   
zViCommand.endr   r   )r   r   N)br   r   r   r   rP   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&  r(  r+  r-  r/  r0  r2  r4  r7  r   r9  r   rN   r:  r\   r;  rY   rb   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  rC   r  r   r   r   r   r   r   r   r   rM   F  s    "*	

	















		
	rM   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )r5  c                 C   st   t |tg rd|}|  }| |d}|| |  | | | |d}| | _	|  | 
| d S )Nr$   wr!   )
isinstancetyper|   get_tempfile	file_openwriteclose
run_editorreadr6  file_remove)r   r?  Zfile_tmpZfp_tmpr   r   r   r     s   



zViExternalEditor.__init__c                 C   s   dd l }|jdddS )Nr   z	readline-z.py)prefixsuffix)tempfilemktemp)r   rk  r   r   r   rb    rM  zViExternalEditor.get_tempfilec                 C   rU  r
   )file)r   filenamer   r   r   r   rc    r'  zViExternalEditor.file_openc                 C      t | d S r
   )osremove)r   rn  r   r   r   rh    rQ  zViExternalEditor.file_removec                 C   s"   zt jd W S  ty   Y dS w )NZEDITORZnotepad)rp  environKeyErrorr   r   r   r   
get_editor  s
   zViExternalEditor.get_editorc                 C   s   d|   |f }| | d S )Nz%s %s)rt  run_command)r   rn  cmdr   r   r   rf    s   zViExternalEditor.run_editorc                 C   ro  r
   )rp  system)r   commandr   r   r   ru    rQ  zViExternalEditor.run_commandN)
r   r   r   r   rb  rc  rh  rt  rf  ru  r   r   r   r   r5    s    r5  c                   @   s   e Zd Zdd ZdS )r   c                 C   rZ  r
   r[  r   r   r   r   r     r'  zViEvent.__init__N)r   r   r   r   r   r   r   r   r     s    r   c                 C   s,   t dt| | f  |  p|  p| dkS )Nzxx vi_is_word: type(%s), %s_)r   ra  isalphar   r[  r   r   r   
vi_is_word  s   r{  c                 C   s   |   S r
   )r   r[  r   r   r   vi_is_space  s   r|  c                 C   s   t | pt| S r
   )r{  r|  r[  r   r   r   vi_is_word_or_space  s   r}  c                 C   s   zCt |D ];}t| | }|s t| | s|d7 }t| | rnt| | r0|d7 }t| | s&t| | r@|d7 }t| | s6q|W S  tyP   t|  Y S w rk   )r;   r{  r|  r_   rl   r?  r@  r  ry   Zin_wordr   r   r   rD    s&   rD  c                 C   s   z2t |D ]*}t| | }|st| | s|d7 }t| | rt| | r/|d7 }t| | s%q|W S  ty?   t|  Y S w rk   )r;   r|  r_   rl   )r?  r@  r  ry   Zin_spacer   r   r   rE  +  s   rE  c                 C   s   zIt |D ]?}|d7 }t| | r|d7 }t| | st| | }|s4t| | s3|d7 }t| | r)qt| | rD|d7 }t| | s:q|d W S  ty[   tdt| d  Y S w rq   )r;   r|  r{  r}  r_   rB  rl   r~  r   r   r   rF  9  s(   
rF  c                 C   s   z0t |D ]&}|d7 }t| | r|d7 }t| | st| | s+|d7 }t| | r!q|d W S  tyB   tdt| d  Y S w rq   )r;   r|  r_   rB  rl   r?  r@  r  ry   r   r   r   rG  K  s   
rG  c                   @   s   e Zd ZdZdd ZdS )vi_listz0This is a list that cannot have a negative indexc                 C   s4   z
t |dk r	tW n	 ty   Y nw t| |S rg   )rW  r_   
ValueErrorrw   __getitem__)r   keyr   r   r   r  [  s   zvi_list.__getitem__N)r   r   r   __doc__r  r   r   r   r   r  X  s    r  c                 C   s   t | } zIt|D ]?}|d8 }t| | r|d8 }t| | st| | }|r8t| | r7|d8 }t| | s-q	t| | sH|d8 }t| | r>q	|d W S  tyW   Y dS w rq   )r  r;   r|  r{  r}  r_   r~  r   r   r   rH  d  s*   
rH  c                 C   s~   t | } z0t|D ]&}|d8 }t| | r|d8 }t| | st| | s/|d8 }t| | r%q	|d W S  ty>   Y dS w rq   )r  r;   r|  r_   r  r   r   r   rI  w  s   
rI  c                 C   sR   zt |D ]}|d7 }| | |kr|d7 }| | |ksq|W S  ty(   Y dS w r   r;   r_   r?  rQ   r@  r  ry   r   r   r   rK    s   rK  c                 C   s\   z#t |D ]}|d8 }	 |dk r W dS | | |krn|d8 }qq|W S  ty-   Y dS w )Nr   Tr   r%   r  r  r   r   r   rN    s   rN  c                 C   s"   t | |||}|dkr|d S |S r[   )rK  r?  rQ   r@  r  r   r   r   rP       rP  c                 C   s"   t | |||}|dkr|d S |S r[   )rN  r  r   r   r   rR    r  rR  )>r   )<r%   ))r   )(r%   )]r   )[r%   )}r   ){r%   )r  r  r  r  r  r  r  r  c                 C   s   d}d}d}d}zK	 |du r,zt | |  \}}| | }d}W n0 ty+   |d7 }Y q	w |dk r3W dS | | |kr>|d7 }n| | |krO|d8 }|dkrO|W S ||7 }q
 ty]   Y dS w )r   Nr   r   Tr%   )_vi_dct_matchingrs  r_   )r?  r@  anchortargetdeltar  r   r   r   rV    s8   
rV  r^  )r   )/
__future__r   r   r   rp  Zpyreadline3.lineeditor.historyZ
lineeditorrs   Zpyreadline3.lineeditor.lineobjr   Zpyreadline3.loggerloggerr   r$   r   ZBaseModer   r   r   r   r   r   r   r   r   r   r   rM   r5  r   r{  r|  r}  rD  rE  rF  rG  rw   r  rH  rI  rK  rN  rP  rR  r  rV  r   r   r   r   <module>   s`   
  #     &









