o
    tf                     @   s>   d Z ddlmZmZmZ G dd deZG dd dejZdS )zD A generic Emacs-style kill ring, as well as a Qt-specific version.
    )QtCore	QtWidgetsQtGuic                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )KillRingz& A generic Emacs-style kill ring.
    c                 C   s   |    d S )N)clearself r	   \/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/qtconsole/kill_ring.py__init__   s   zKillRing.__init__c                 C   s   d| _ g | _dS ) Clears the kill ring.
        N_index_ringr   r	   r	   r
   r      s   
zKillRing.clearc                 C      | j | dS z, Adds some killed text to the ring.
        N)r   appendr   textr	   r	   r
   kill      zKillRing.killc                 C   s   t | j| _|  S )zr Yank back the most recently killed text.

        Returns
        -------
        A text string or None.
        )lenr   r   rotater   r	   r	   r
   yank    s   zKillRing.yankc                 C   s(   |  j d8  _ | j dkr| j| j  S dS )z{ Rotate the kill ring, then yank back the new top.

        Returns
        -------
        A text string or None.
           r   Nr   r   r	   r	   r
   r   *   s   
zKillRing.rotateN)	__name__
__module____qualname____doc__r   r   r   r   r   r	   r	   r	   r
   r      s    
r   c                       sP   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
  ZS )
QtKillRingz/ A kill ring attached to Q[Plain]TextEdit.
    c                    sL   t |tjtjfsJ t   t | _d| _d| _	|| _
|j| j dS )zD Create a kill ring attached to the specified Qt text edit.
        NF)
isinstancer   Z	QTextEditZQPlainTextEditsuperr   r   r   
_prev_yank_skip_cursor
_text_editZcursorPositionChangedconnect_cursor_position_changed)r   Z	text_edit	__class__r	   r
   r   >   s   
zQtKillRing.__init__c                 C   s   | j   d| _dS )r   N)r   r   r#   r   r	   r	   r
   r   K   s   

zQtKillRing.clearc                 C   r   r   )r   r   r   r	   r	   r
   r   Q   r   zQtKillRing.killc                 C   s&   |  }|r|  | | dS dS )z5 Kills the text selected by the give cursor.
        N)ZselectedTextZremoveSelectedTextr   )r   cursorr   r	   r	   r
   kill_cursorV   s
   zQtKillRing.kill_cursorc                 C   s6   | j  }|rd| _| j }|| || _dS dS )z2 Yank back the most recently killed text.
        TN)r   r   r$   r%   
textCursor
insertTextr#   r   r   r*   r	   r	   r
   r   ^   s   



zQtKillRing.yankc                 C   s^   | j r+| j }|r-d| _| j }|jtjj	tjj
t| j d || || _ dS dS dS )z; Rotate the kill ring, then yank back the new top.
        T)nN)r#   r   r   r$   r%   r,   ZmovePositionr   ZQTextCursorZLeftZ
KeepAnchorr   r-   r.   r	   r	   r
   r   h   s   




zQtKillRing.rotatec                 C   s   | j rd| _ d S d | _d S )NF)r$   r#   r   r	   r	   r
   r'   |   s   

z#QtKillRing._cursor_position_changed)r   r   r   r   r   r   r   r+   r   r   r'   __classcell__r	   r	   r(   r
   r    6   s    
r    N)	r   Zqtpyr   r   r   objectr   ZQObjectr    r	   r	   r	   r
   <module>   s    (