
    i8              	       L   d Z ddlZddlZddl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lmZ ddlmZ  G d d	ej                         Z G d
 dej"                        Z G d de      Z G d dej*                        Z G d deej,                        Z	  e       Zy# ej0                  $ r5Z ed ee      z    ej8                         dk7  rdz         dz         dZ[we$ r<Z eej<                  dij?                  ej@                  d    ee                  dZ[ww xY w)z+
The keyboard implementation for *uinput*.
    N)KeyEvent)xorg_keysyms)ListenerMixin   )_basec                   (    e Zd ZdZdZdZed        Zy)KeyCode_x_name_kernel_nameNc                     	 t        t        j                  |      } | j                  |f||d|S # t        $ r d}Y #w xY w)zCreates a key from a name.

        :param str x_name: The X name.

        :param str kernel_name: The kernel name.

        :return: a key code
        Nr
   )getattrevdevecodesAttributeErrorfrom_vk)clsx_namekernel_namekwargsvks        a/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pynput/keyboard/_uinput.py
_from_namezKeyCode._from_name7   s[    	{3B s{{D[D<BD 	D  	B	s   2 A A )__name__
__module____qualname___PLATFORM_EXTENSIONSr   r   classmethodr        r   r	   r	   +   s,     GL D Dr    r	   c                      e Zd Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Z	ej	                  dd	      Z
ej	                  d
d      Zej	                  d
d      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  dd      Zej	                  d d!      Zej	                  d"d#      Zej	                  d$d%      Zej	                  d&d'      Zej	                  d(d)      Zej	                  d*d+      Zej	                  d,d-      Zej	                  d.d/      Zej	                  d0d1      Z ej	                  d2d3      Z!ej	                  d4d5      Z"ej	                  d6d7      Z#ej	                  d8d9      Z$ej	                  d:d;      Z%ej	                  d<d=      Z&ej	                  d>d?      Z'ej	                  d@dA      Z(ej	                  dBdC      Z)ej	                  dDdE      Z*ej	                  dFdG      Z+ej	                  dHdI      Z,ej	                  dJdK      Z-ej	                  dLdM      Z.ej	                  dNdO      Z/ej	                  dNdO      Z0ej	                  dPdQ      Z1ej	                  dRdSdTU      Z2ej	                  dVdWdXU      Z3ej	                  dYdZ      Z4ej	                  d[d\      Z5ej	                  d]d^      Z6ej	                  d_d`      Z7ej	                  dadb      Z8ej	                  dcdd      Z9ej	                  dedf      Z:ej	                  dgdh      Z;ej	                  didj      Z<ej	                  dkdl      Z=ej	                  dmdn      Z>ej	                  dodp      Z?ej	                  dqdr      Z@ys)tKeyAlt_LKEY_LEFTALTAlt_RKEY_RIGHTALTMode_switch	BackSpaceKEY_BACKSPACE	Caps_LockKEY_CAPSLOCKSuper_LKEY_LEFTMETASuper_RKEY_RIGHTMETA	Control_LKEY_LEFTCTRL	Control_RKEY_RIGHTCTRLDelete
KEY_DELETEDownKEY_DOWNEndKEY_ENDReturn	KEY_ENTEREscapeKEY_ESCF1KEY_F1F2KEY_F2F3KEY_F3F4KEY_F4F5KEY_F5F6KEY_F6F7KEY_F7F8KEY_F8F9KEY_F9F10KEY_F10F11KEY_F11F12KEY_F12F13KEY_F13F14KEY_F14F15KEY_F15F16KEY_F16F17KEY_F17F18KEY_F18F19KEY_F19F20KEY_F20HomeKEY_HOMELeftKEY_LEFT	Page_DownKEY_PAGEDOWNPage_Up
KEY_PAGEUPRight	KEY_RIGHTShift_LKEY_LEFTSHIFTShift_RKEY_RIGHTSHIFTspace	KEY_SPACE )charTabKEY_TAB	UpKEY_UPPlayKEY_PLAYPAUSEMuteKEY_MUTELowerVolumeKEY_VOLUMEDOWNRaiseVolumeKEY_VOLUMEUPPrevKEY_PREVIOUSSONGNextKEY_NEXTSONGInsert
KEY_INSERTMenuKEY_MENUNum_LockKEY_NUMLOCKPause	KEY_PAUSEPrint	KEY_SYSRQScroll_LockKEY_SCROLLLOCKN)Ar   r   r   r	   r   altalt_lalt_ralt_gr	backspace	caps_lockcmdcmd_lcmd_rctrlctrl_lctrl_rdeletedownendenterescf1f2f3f4f5f6f7f8f9f10f11f12f13f14f15f16f17f18f19f20homeleft	page_downpage_uprightshiftshift_lshift_rrt   tabupmedia_play_pausemedia_volume_mutemedia_volume_downmedia_volume_upmedia_previous
media_nextinsertmenunum_lockpauseprint_screenscroll_lockr   r    r   r"   r"   J   sK   


Wm
4Cw6Ew7E~>F"";@I"";?I


Y
7Cy.9Ey/:Ek>:D^<F_=F,7Ffj1D


UI
.Cx5E


Xy
1C			D(	+B			D(	+B			D(	+B			D(	+B			D(	+B			D(	+B			D(	+B			D(	+B			D(	+B


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.C


UI
.Cfj1Dfj1D"";?I  L9Gw4Ey/:E  O<G  ,<=Gw#>E


UID

9C			D(	+B))&/B**6:>**=:JK((GO''0BCN##FN;J,7Ffj1D!!*m<Hw4E%%g{;L$$]4DEKr    r"   c                       e Zd ZdZ ej
                  d      Z G d de      Zd Z	d Z
d Z ej                         d        Zd	 Zy
)Layoutz*A description of the keyboard layout.
    zkeycode\s+(\d+)\s+=(.*)c                   l    e Zd ZdZd Zd ZeZd Zd Ze	d        Z
e	d        Ze	d        Ze	d	        Zy
)
Layout.Keyz$A key in a keyboard layout.
        c                     ||||f| _         y N_values)selfnormalshiftedr   alt_shifteds        r   __init__zLayout.Key.__init__   s    	DLr    c                 z    dj                  | j                  | j                  | j                  | j                        S )NzC<normal: {}, shifted: {}, alternative: {}, shifted alternative: {}>)formatr   r   r   r   r   s    r   __str__zLayout.Key.__str__   s5    + -3FKKtxx9I9I-K	Kr    c                 ,    t        | j                        S r   )iterr   r   s    r   __iter__zLayout.Key.__iter__   s    %%r    c                      | j                   |   S r   r   )r   is     r   __getitem__zLayout.Key.__getitem__   s    <<?"r    c                      | j                   d   S )zThe normal key.
            r   r   r   s    r   r   zLayout.Key.normal        <<?"r    c                      | j                   d   S )zThe shifted key.
            r   r   r   s    r   r   zLayout.Key.shifted   r   r    c                      | j                   d   S )z!The alternative key.
               r   r   s    r   r   zLayout.Key.alt   r   r    c                      | j                   d   S )z)The shifted alternative key.
               r   r   s    r   r   zLayout.Key.alt_shifted   r   r    N)r   r   r   __doc__r   r   __repr__r   r   propertyr   r   r   r   r   r    r   r"   r      ss    			K 	&	# 
	# 
	#
 
	# 
	#
 
	# 
	#
 
	# 
	#r    r"   c                    d }| j                         | _        | j                  j                         D ci c]w  \  }}t        |      D ]d  \  }}|] ||      U ||      ||dz  rt	               t
        j                  hz  n*|dz  rt	               t
        j                  hz  n	t	               ff y c}}}}| _        y c c}}}}w )Nc                 f    t        | t              r| j                  j                  S | j                  S r   )
isinstancer"   valuerw   )ks    r   as_charz Layout.__init__.<locals>.as_char   s"    #-a#5177<<A166Ar    r   r   )	_load	_vk_tableitems	enumeratesetr"   r   r   _char_table)r   r   r   keysr   keys         r   r   zLayout.__init__   s    	B !NN002= = D#D/= 373<#; CL%&U yyk"&'!e 14zzl1#14	8 8== =s   A<C 
c                     | j                   |   dt        j                  |v rdndz  t        j                  |v rdz     S dz     S )zReads a key for a virtual key code and modifier state.

        :param int vk: The virtual key code.

        :param set modifiers: A set of modifiers.

        :return: a mapped key

        :raises KeyError: if ``vk`` is an unknown key
        r   r   r   )r   r"   r   r   )r   r   	modifierss      r   for_vkzLayout.for_vk   sY     ~~b!II*q3JJ)+q45 	5 2345 	5r    c                      | j                   |   S )zReads a virtual key code and modifier state for a character.

        :param str char: The character.

        :return: the tuple ``(vk, modifiers)``

        :raises KeyError: if ``vk`` is an unknown key
        )r   )r   rw   s     r   for_charzLayout.for_char   s     %%r    c                 H    i } j                   j                  t        j                  g d      j	                  d            D ][  \  }}t        |      t         fd|j                         dd D              }t        d |D              sJ  j                  | |<   ] |S )zLoads the keyboard layout.

        For simplicity, we call out to the ``dumpkeys`` binary. In the future,
        we may want to implement this ourselves.
        )dumpkeysz--full-tablez--keys-onlyzutf-8c              3   B   K   | ]  }j                  |        y wr   )_parse).0namer   r   s     r   	<genexpr>zLayout._load.<locals>.<genexpr>   s$      / B%/s   N   c              3   $   K   | ]  }|d u 
 y wr   r   )r  r   s     r   r
  zLayout._load.<locals>.<genexpr>   s     3s3d?3s   )

KEYCODE_REfindall
subprocesscheck_outputdecodeinttuplesplitanyr"   )r   resultkeycodenamesr   r   s   `    @r   r   zLayout._load   s     "oo55''?AAGR 	-NGU WB /!KKM"1-/ /D 3d33%TXXt_r
	- r    c                 ^   	 t        fdt        D              S # t        $ r 	 t        j                  j                  d         \  }}|rt        j                  ||      cY S n# t        $ r Y nw xY w	 t        j                  dddddd	d
dddd
         cY S # t        $ r Y Y yw xY ww xY w)zParses a single key from the ``dumpkeys`` output.

        :param int vk: The key code.

        :param str name: The key name.

        :return: a key representation
        c              3   T   K   | ]  }|j                   j                  k(  r| ! y wr   )r   r   )r  r   r	  s     r   r
  z Layout._parse.<locals>.<genexpr>  s+      .99$$, .   %(+)r   1234567890)
onetwothreefourfivesixseveneightninezeroN)	nextr"   StopIterationr   SYMBOLSlstripr	   	from_charKeyError)r   r   r	  _rw   s     `  r   r  zLayout._parse  s    	 .. . .  	&..t{{3/?@4",,Tb,99  ((   
*! "&
*' 
( 
(  -	sV    	B,=A&"B,%B,&	A2/B,1A22B,6"BB,	B($B,'B((B,N)r   r   r   r   recompiler  objectr"   r   r  r  	functools	lru_cacher   r  r   r    r   r   r      s\    
 "$J0#f 0#d=5 	& Y $&r    r   c                   >     e Zd ZeZeZ fdZd Zd Z	d Z
d Z xZS )
Controllerc                 t    t        t        | 
  |i | t        | _        t        j                         | _        y r   )superr>  r   LAYOUT_layoutr   UInput_devr   argsr   	__class__s      r   r   zController.__init__0  s+    j$($9&9LLN	r    c                 R    t        | d      r| j                  j                          y y )NrD  )hasattrrD  closer   s    r   __del__zController.__del__5  s    4 IIOO !r    c                 "   	 | j                  |      \  }}|r|| j                  5 }| j                  j                  |j                        \  }}||z
  D ch c]0  }t        t        j                  |j                  j                        2 }}||z
  D ch c]0  }t        t        j                  |j                  j                        2 }}d d d        nt               }t               }g }	 D ]'  }	| j                  |	d       |j                  |	df       ) D ]'  }	| j                  |	d       |j                  |	df       ) | j                  ||       t        |      D ]  }
	  | j                  |
   | j                   j#                          y # t        $ r | j                  |      w xY wc c}w c c}w # 1 sw Y   xY w#  Y hxY w# t        |      D ]  }
	  | j                  |
  #  Y xY w | j                   j#                          w xY w)NFT)_to_vk_and_modifiers
ValueErrorInvalidKeyExceptionr   rB  r  rw   r   r   r   r   r   r   _sendappendreversedrD  syn)r   r   is_pressr   required_modifiersr   to_press
to_releasecleanupr   es              r   _handlezController._handle9  s   	0%)%>%>s%C"B"
 *6 A9)-)>)>sxx)H&& !3Y >A ELL#))*@*@AA A
 !*,> >A ELL#))*@*@AA
 AA A JuH 	 *

1e$4y)*  +

1d#5z*+ JJr8$ g& DJJN IIMMOO  	0**3//	0AAA A< g& DJJN IIMMOse   F 0F85F.	F85F3	F8+A*G $GF+.
F88GGHG+*H+G/	-!Hc                     t        |d      r|j                  |j                  dfS t        |d      r1|j                  %| j                  j	                  |j                        S t        |      )zResolves a key to a virtual key code and a modifier set.

        :param key: The key to resolve.
        :type key: Key or KeyCode

        :return: a virtual key code and possible required modifiers
        r   Nrw   )rI  r   rw   rB  r  rN  )r   r   s     r   rM  zController._to_vk_and_modifiersg  s[     3#&&"4FFD>!S&!chh&:<<((22S/!r    c                     | j                   j                  t        j                  j                  |t        |             y)zSends a virtual key event.

        This method does not perform ``SYN``.

        :param int vk: The virtual key.

        :param bool is_press: Whether this is a press event.
        N)rD  writer   r   EV_KEYr  )r   r   rT  s      r   rP  zController._sendv  s&     			++RX?r    )r   r   r   r	   _KeyCoder"   _Keyr   rK  rZ  rM  rP  __classcell__rG  s   @r   r>  r>  ,  s(    HD#
,\"	@r    r>  c                       e Zd Zej                  j
                  fZej                  j                  j                  ej                  ej                  j                  j                  ej                  ej                  j                  j                  ej                  ej                  j                  j                  ej                  ej                  j                  j                  ej                  ej                  j                  j                  ej                  ej                   j                  j                  ej                  iZ fdZd Z xZS )Listenerc                 `    t        t        | 
  |i | t        | _        t               | _        y r   )r@  rd  r   rA  rB  r   
_modifiersrE  s      r   r   zListener.__init__  s'    h&77%r    c                 t   |j                   t        j                  t        j                  fv }|j                  | j
                  v rV| j
                     }|r| j                  j                  |       n)|| j                  v r| j                  j                  |       	 | j                  j                  | j                        }|r| j#                  |d       y | j%                  |d       y # t        $ rA 	 t        fdt        D              }n$# t        $ r t        j!                        }Y nw xY wY qw xY w)Nc              3   T   K   | ]  }|j                   j                  k(  r| ! y wr   )r   r   )r  r   r   s     r   r
  z+Listener._handle_message.<locals>.<genexpr>  s)      +yy||r) +r  F)r   r   key_downkey_holdcode
_MODIFIERSrf  addremoverB  r  r6  r1  r"   r2  r	   r   on_press
on_release)r   eventrT  modifierr   r   s        @r   _handle_messagezListener._handle_message  s   ;;8#4#4h6G6G"HHZZ  r*H##H-T__,&&x0		*,,%%b$//:C MM#u%OOC'  	** +"+ + ! *oob)*	*s6   &C- -	D77DD7D1.D70D11D76D7)r   r   r   r   r   r^  _EVENTSr"   r   r   r   r   r   r   r   r   r   rl  r   rs  ra  rb  s   @r   rd  rd    s    G
 	#''		CGG		CGG

SZZ		CIIciicii)J 
(r    rd  z!failed to load keyboard layout: "z "; please make sure you are root"z$the binary dumpkeys is not installed)!r   enumerrnor;  osr8  r  r   evdev.eventsr   pynput._utilr   pynput._util.uinputr    r   r	   Enumr"   r:  r   r>  rd  rA  CalledProcessErrorrY  ImportErrorstrgetuidOSErrorENOENTgetrF  r   r    r   <module>r     s8  "    	 	   ! % - Demm D>>F$)) >FD]V ]@S@!! S@l/(}enn /(d
XF$$ J
9CFB.7biikQ.>*I J JDGI J J 
<>>AcFF1IF? s$   B   D#/0CD#'7DD#