U
    fw%Z{  ã                   @   s4   d dl Z d dlZd dlZd dlZG dd„ deƒZdS )é    Nc                   @   sX   e Zd 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S )ÚPhysicalTerminalz.Handle interaction with the physical terminal.c                 C   s"   d | _ d | _d | _d | _d | _d S ©N)Ú	_terminalÚ_cuuÚ_cudÚ_crÚ_el©Úself© r   ú//usr/lib/python3/dist-packages/ttystatus/tty.pyÚ__init__   s
    zPhysicalTerminal.__init__c                 C   sn   t ddƒ| _t d | j ¡ ¡ dD ].}t |¡}|d k	r"t| d| t |d¡ƒ q"t d¡| _t d¡| _	d S )Nz/dev/ttyÚwb)ZcuuZcudÚ_é   ZcrZel)
Úopenr   ÚcursesZ	setuptermÚfilenoZtigetstrÚsetattrZtparmr   r   )r
   ÚnameÚsr   r   r   Úopen_tty"   s    
zPhysicalTerminal.open_ttyc                 C   s(   | j d k	o&| jd k	o&| jd k	o&| jd k	S r   )r   r   r   r   r	   r   r   r   Úhas_capabilities.   s    
ÿþýz!PhysicalTerminal.has_capabilitiesc                 C   s   | j d k	st‚| j S r   )r   ÚAssertionErrorr	   r   r   r   Úget_up_sequence4   s    z PhysicalTerminal.get_up_sequencec                 C   s   | j d k	st‚| j S r   )r   r   r	   r   r   r   Úget_down_sequence8   s    z"PhysicalTerminal.get_down_sequencec                 C   s   | j d k	st‚| j S r   )r   r   r	   r   r   r   Úget_carriage_return_sequence<   s    z-PhysicalTerminal.get_carriage_return_sequencec                 C   s   | j d k	st‚| j S r   )r   r   r	   r   r   r   Úget_erase_line_sequence@   s    z(PhysicalTerminal.get_erase_line_sequencec                 C   st   d}d}| j dk	rlzDt ddddd¡}t | j  ¡ tj|¡}t d|¡dd… \}}W n t	k
rj   Y nX ||fS )z“Return width, height of terminal in characters, rows.

        If this fails, assume 80 by 24.

        Borrowed and adapted from bzrlib.

        éP   é   NZHHHHr   é   )
r   ÚstructZpackÚfcntlZioctlr   ÚtermiosZ
TIOCGWINSZZunpackÚIOError)r
   ÚwidthZheightr   Úxr   r   r   Úget_sizeD   s    	
  ÿzPhysicalTerminal.get_sizec                 C   sP   t |tƒs| ¡ }| jdk	rLz| j |¡ | j ¡  W n tk
rJ   Y nX dS )zVWrite raw data to terminal.

        We ignore IOErrors for terminal output.

        N)Ú
isinstanceÚbytesÚencoder   ÚwriteÚflushr$   )r
   Úraw_datar   r   r   r+   [   s    

zPhysicalTerminal.writeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r'   r+   r   r   r   r   r      s   r   )r   r"   r!   r#   Úobjectr   r   r   r   r   Ú<module>   s   