o
    3g                     @  s|   d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddd
dZdd Zdd ZdddZdddZdS )z-
Terminal size utility
---------------------
    )annotationsN)Struct)localP      defaulttuple[int, int]returnc                 C  s`   t  }|dkrt }|st }n|dv s|drt }n
tjddd t }|du r.| S |S )z
    Get width and height of console; works on linux, os x, windows and cygwin

    Adapted from https://gist.github.com/jtriley/1108174
    Originally from: http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python
    Windows)LinuxDarwinFreeBSDSunOSCYGWINzRPlumbum does not know the type of the current OS for term size, defaulting to UNIX   )
stacklevelN)platformsystem_get_terminal_size_windows_get_terminal_size_tput
startswith_get_terminal_size_linuxwarningswarn)r   
current_ossize r   L/home/garg/my-data/venv/lib/python3.10/site-packages/plumbum/cli/termsize.pyget_terminal_size   s$   r   c                  C  s   zCddl m} m} d}|j|}td}| |j}|j||}|rA||j	\}}}}}}}	}
}}}|
| d ||	 d fW S W d S  t
yM   Y d S w )Nr   )create_string_bufferwindllihhhhHhhhhhh   )ctypesr    r!   kernel32GetStdHandler   r   GetConsoleScreenBufferInfounpackraw	Exception)r    r!   STDERR_HANDLEhcsbi_structcsbires_lefttoprightbottomr   r   r   r   0   s   
"r   c                  C  s@   zt d } t| d}t| d}||fW S  ty   Y d S w )Ntputcolslines)r   intr*   )r5   r6   rowsr   r   r   r   A   s   
r   fdr8   tuple[int, int] | Nonec                 C  sF   t d}zdd l}dd l}||| |jdW S  ty"   Y d S w )Nhhr   s   1234)r   fcntltermiosr(   ioctl
TIOCGWINSZr*   )r:   yxr=   r>   r   r   r   _ioctl_GWINSZM   s   rB   c                  C  s   t dpt dpt d} | s5tt tt tj}t |} t| W d    n1 s0w   Y  | sRzt	tj
d t	tj
d f} W n
 tyQ   Y d S w | d | d fS )Nr   r#   r   LINESCOLUMNS)rB   
contextlibsuppressr*   osopenctermidO_RDONLYcloser8   environ)crr:   r   r   r   r   Y   s    r   )r   )r   r	   r
   r	   )r:   r8   r
   r;   )r
   r;   )__doc__
__future__r   rE   rG   r   r   structr   plumbumr   r   r   r   rB   r   r   r   r   r   <module>   s    
