
    Cj%                       S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
JrJr  S SKJrJrJrJrJrJrJrJr  S SKJrJrJrJrJr  S SKJr  S SKJr  S S	K J!r!J"r"  S S
K#J$r$  \(       a  S SK%J&r&  \RN                  " SSS9r(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0Sr1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9\(Rt                  r:\R                   /\:l;        \R"                  \:l<         " S S\	5      r= " S S\
5      r> " S S \	5      r? " S! S"\	5      r@ " S# S$\	5      rA " S% S&\	5      rB " S' S(\	5      rC " S) S*\
5      rD " S+ S,\	5      rES3S- jrFS4S. jrGS5S/ jrHS6S7S0 jjrI " S1 S2\R                  5      rKg)8    )annotationsN)AbstractEventLooprun_coroutine_threadsafe)	StructureUnionbyrefwintypes)BOOLCHARDWORDHANDLESHORTUINTWCHARWORD)IOTYPE_CHECKINGCallableListOptional)	constants)XTermParser)EventResize)Size)Appkernel32T)use_last_error                   @      i   iii  c                  (    \ rS rSrSrS\4S\4/rSrg)COORD2   z:https://docs.microsoft.com/en-us/windows/console/coord-strXY N)__name__
__module____qualname____firstlineno____doc__r   _fields___static_attributes__r,       g/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/drivers/win32.pyr(   r(   2   s    D 
e	eHr4   r(   c                  (    \ rS rSrSrS\4S\4/rSrg)uChar;   Ehttps://docs.microsoft.com/en-us/windows/console/key-event-record-str	AsciiCharUnicodeCharr,   N)	r-   r.   r/   r0   r1   r   r   r2   r3   r,   r4   r5   r7   r7   ;   s    O 
d	Hr4   r7   c                  @    \ rS rSrSrS\4S\4S\4S\4S\4S\4/r	S	r
g
)KEY_EVENT_RECORDD   r9   bKeyDownwRepeatCountwVirtualKeyCodewVirtualScanCoder7   dwControlKeyStater,   N)r-   r.   r/   r0   r1   r
   r   r7   r   r2   r3   r,   r4   r5   r=   r=   D   s>    O 
T		D!	T"	%	e$Hr4   r=   c                  4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	MOUSE_EVENT_RECORDQ   zGhttps://docs.microsoft.com/en-us/windows/console/mouse-event-record-strdwMousePositiondwButtonStaterC   dwEventFlagsr,   N)	r-   r.   r/   r0   r1   r(   r   r2   r3   r,   r4   r5   rE   rE   Q   s.    Q 
E"	% 	e$		Hr4   rE   c                  "    \ rS rSrSrS\4/rSrg)WINDOW_BUFFER_SIZE_RECORD\   zNhttps://docs.microsoft.com/en-us/windows/console/window-buffer-size-record-strdwSizer,   N)r-   r.   r/   r0   r1   r(   r2   r3   r,   r4   r5   rK   rK   \   s    X5!"Hr4   rK   c                  "    \ rS rSrSrS\4/rSrg)MENU_EVENT_RECORDb   zFhttps://docs.microsoft.com/en-us/windows/console/menu-event-record-strdwCommandIdr,   N)r-   r.   r/   r0   r1   r   r2   r3   r,   r4   r5   rO   rO   b   s    P%&Hr4   rO   c                  "    \ rS rSrSrS\4/rSrg)FOCUS_EVENT_RECORDh   zGhttps://docs.microsoft.com/en-us/windows/console/focus-event-record-str	bSetFocusr,   N)r-   r.   r/   r0   r1   r
   r2   r3   r,   r4   r5   rS   rS   h   s    Qd#$Hr4   rS   c                  :    \ rS rSrSrS\4S\4S\4S\4S\	4/r
Srg	)

InputEventn   Ahttps://docs.microsoft.com/en-us/windows/console/input-record-strKeyEvent
MouseEventWindowBufferSizeEvent	MenuEvent
FocusEventr,   N)r-   r.   r/   r0   r1   r=   rE   rK   rO   rS   r2   r3   r,   r4   r5   rW   rW   n   s;    K 
%&	)*	 ";<	'(	)*Hr4   rW   c                  <    \ rS rSrSrS\R                  4S\4/rSr	g)INPUT_RECORDz   rY   	EventTyper   r,   N)
r-   r.   r/   r0   r1   r	   r   rW   r2   r3   r,   r4   r5   r`   r`   z   s    Khmm,w
.CDHr4   r`   c                x    [         R                  " U R                  5       5      n[        R	                  X!5      nU$ )zSet the console mode for a given file (stdout or stdin).

Args:
    file: A file like object.
    mode: New mode.

Returns:
    True on success, otherwise False.
)msvcrtget_osfhandlefilenoKERNEL32SetConsoleMode)filemodewindows_filehandlesuccesss       r5   set_console_moderm      s1      --dkkm<%%&8?GNr4   c                    [         R                  " U R                  5       5      n[        R                  " 5       n[
        R                  U[        R                  " U5      5        UR                  $ )zGet the console mode for a given file (stdout or stdin)

Args:
    file: A file-like object.

Returns:
    The current console mode.
)
rd   re   rf   r	   r   rg   GetConsoleModectypesr   value)ri   rk   rj   s      r5   get_console_moderr      sK      --dkkm<>>D.T0BC::r4   c                    ^^^^ [         R                  m[         R                  m[        T5      m[        T5      mSUUUU4S jjn [	        TT[
        -  5        [	        T[        5        U $ )z`Enable application mode.

Returns:
    A callable that will restore terminal to previous state.
c                 6   > [        TT 5        [        TT5        g)z)Restore console mode to previous settingsN)rm   )current_console_mode_incurrent_console_mode_outterminal_interminal_outs   r5   restore(enable_application_mode.<locals>.restore   s    &=>'?@r4   returnNone)sys	__stdin__
__stdout__rr   rm   "ENABLE_VIRTUAL_TERMINAL_PROCESSINGENABLE_VIRTUAL_TERMINAL_INPUT)ry   ru   rv   rw   rx   s    @@@@r5   enable_application_moder      sa     --K>>L.{;/=A A
 .1SS ["?@Nr4   c                    [         [        U 5      -  nU" U 6 n[        R                  [        U5      U[	        S5      [        U5      5      nU[        :X  a  gX   $ )a\  
Waits for multiple handles. (Similar to 'select') Returns the handle which is ready.
Returns `None` on timeout.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx
Note that handles should be a list of `HANDLE` objects, not integers. See
this comment in the patch by @quark-zju for the reason why:
    ''' Make sure HANDLE on Windows has a correct size
    Previously, the type of various HANDLEs are native Python integer
    types. The ctypes library will treat them as 4-byte integer when used
    in function arguments. On 64-bit Windows, HANDLE is 8-byte and usually
    a small integer. Depending on whether the extra 4 bytes are zero-ed out
    or not, things can happen to work, or break. '''
This function returns either `None` or one of the given `HANDLE` objects.
(The return value can be tested with the `is` operator.)
FN)r   lenrg   WaitForMultipleObjectsr
   r   WAIT_TIMEOUT)handlestimeoutarrtypehandle_arrayrets        r5   wait_for_handlesr      sW      s7|#GG$L..L<eeGnC l|r4   c                  X   ^  \ rS rSrSr          SU 4S jjrSS jrS	S jrSrU =r	$ )
EventMonitor   z5A thread to send key / window events to Textual loop.c                P   > Xl         X l        X0l        X@l        [        TU ]  SS9  g )Nztextual-input)name)loopapp
exit_eventprocess_eventsuper__init__)selfr   r   r   r   	__class__s        r5   r   EventMonitor.__init__   s*     	$*o.r4   c                
   U R                   R                  n[        [        R                  S9n [
        R                  " S5      n[        [        5      nSnSnSn[        U-  nU" 5       n	[        R                  n
/ nUR                  nU" 5       (       Gd  UR                  5        H  nU R                  U5        M     [        U/S5      c  ME  U
" U[!        U	5      U[!        U5      5        U	S UR"                   nUS S 2	 S nU H  nUR$                  nUU:X  al  UR&                  R(                  nUR*                  R,                  nUR.                  (       a-  UR0                  (       a  UR2                  S:X  a  Mu  U" U5        M  M  UU:X  d  M  UR&                  R4                  R6                  nUR8                  UR:                  4nM     U(       aW  UR=                  SR?                  U5      RA                  SS	5      RC                  S5      5       H  nU R                  U5        M     Ub  U RD                  " U6   U" 5       (       d  GM  g g ! [F         a0  nU RH                  RJ                  RM                  S
U5         S nAg S nAff = f)N)debugr   i   r$   r   d    zutf-16surrogatepasszEVENT MONITOR ERROR)'r   is_setr   r   DEBUGr	   r   GetStdHandleSTD_INPUT_HANDLEr`   rg   ReadConsoleInputWappendtickr   r   r   rq   rb   r   rZ   r7   r;   r?   rC   rA   r\   rM   r*   r+   feedjoinencodedecodeon_size_change	Exceptionr   logerror)r   exit_requestedparser
read_counthIn
MAX_EVENTS	KEY_EVENTWINDOW_BUFFER_SIZE_EVENTr   input_recordsr   keys
append_keyeventread_input_recordsnew_sizeinput_record
event_type	key_eventkeysizer   s                         r5   runEventMonitor.run   s1   //9??3B	=!*J/0CJI'-$"Z/G#IM ( : : DJ$&&#[[]E&&u- + $SE3/7 "}-z5;L &33EZ5E5E%F"G6:$6L!-!7!7J!Y.$0$6$6$?$?	'oo99$-- ) ; ;$-$=$=$B (&sO . $'??+11GGNN$(FFDFF#3# %7& 
 "(,,XGNNxX" **51" '''2c %&&f  	=HHLL4e<<	=s   EI B8I 
J&I==Jc                    [        X5      n[        X35      n[        U R                  R	                  U5      U R
                  S9  g)z"Called when terminal size changes.)r   N)r   r   r   r   _post_messager   )r   widthheightr   r   s        r5   r   EventMonitor.on_size_change,  s3    E"t" !7!7!>TYYOr4   )r   r   r   r   )
r   r   r   r   r   zthreading.Eventr   zCallable[[Event], None]r|   r}   r{   )r   intr   r   r|   r}   )
r-   r.   r/   r0   r1   r   r   r   r3   __classcell__)r   s   @r5   r   r      sN    ?// / $	/
 // 
/F=PP Pr4   r   )ri   r   rj   r   r|   bool)ri   r   r|   r   )r|   zCallable[[], None]))r   zList[HANDLE]r   r   r|   zOptional[HANDLE])L
__future__r   rp   rd   r~   	threadingasyncior   r   r   r   r   r	   ctypes.wintypesr
   r   r   r   r   r   r   r   typingr   r   r   r   r   textualr   textual._xterm_parserr   textual.eventsr   r   textual.geometryr   textual.appr   WinDLLrg   ENABLE_ECHO_INPUTENABLE_EXTENDED_FLAGSENABLE_INSERT_MODEENABLE_LINE_INPUTENABLE_MOUSE_INPUTENABLE_PROCESSED_INPUTENABLE_QUICK_EDIT_MODEENABLE_WINDOW_INPUTr   ENABLE_PROCESSED_OUTPUTENABLE_WRAP_AT_EOL_OUTPUTr   DISABLE_NEWLINE_AUTO_RETURNENABLE_LVB_GRID_WORLDWIDEr   STD_OUTPUT_HANDLEr   r   argtypesrestyper(   r7   r=   rE   rK   rO   rS   rW   r`   rm   rr   r   r   Threadr   r,   r4   r5   <module>r      su   "   
  ? 4 4 O O O > >  - ( !==D9          &  ! " %+ "$ "   $$!(  I E 
y 
 #	 #'	 '% %	 	E9 E2:\P9## \Pr4   