
    iF                     f   S SK r S SKr S SKrS SKrS SKrS SKrS SKJr  SSKJ	r	J
r
Jr  SSKJr   \  \ R"                  R%                  \ R&                  R)                  S5      5      r " S S\5      r " S	 S
\5      r " S S\5      r\" 5       r S rS rS rS rS rS r S r!g! \ a    \r N}f = f)    N)NSEvent   )KeyboardEventKEY_DOWNKEY_UPnormalize_nameCarbonc                   Z   \ rS rSr\" S 0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_0 S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_SESF_ESGSHSISJSKSLSMSNSOSPSQSRSSST.ER                  5        5       5      r0 rSU rSV r	/ 4SW jr
SXrgY)ZKeyMap   c              #   @   #    U  H  u  pU[        U5      4v   M     g 7fNr   ).0vknames      \/home/kali/github-search/github-env/lib/python3.13/site-packages/keyboard/_darwinkeyboard.py	<genexpr>KeyMap.<genexpr>   s&      2 2G("Bt 45 2Gs   $   return0   tab1   space3   delete5   escape7   command8   shift9   capslock:   option;   control<   zright shift=   zright option>   zright control?   function@   f17H   z	volume upI   zvolume downJ   muteO   f18P   f19Z   f20`   f5a   f6b   f7c   f3d   f8e   f9g   f11i   f13j   f16k   f14m   f10o   f12q   f15helphomezpage upzforward deletef4endf2z	page downf1leftrightdownup)r   s   t   u   v   w   x   y   z   {   |   }   ~   c                 2
  ^^^ [         R                  n[         R                  n[         R                  m[         R                  n[         R                  n[         R
                  nUS-  n " U4S jS[         R                  5      n[         R                  R                  [        S5      nSn	Sn
SnSnS	nS
nU/[        R                  l
        S [        R                  l        U/[        R                  l
        T[        R                  l        U/[        R                  l
        S [        R                  l        / [        R                  l
        [         R                  [        R                  l        / [        R                  l
        [         R                  [        R                  l        / [        R                   l
        [         R                  [        R                   l        [         R                  [         R                  /[        R"                  l
        [         R                  [        R"                  l        [         R                  [         R
                  [         R
                  [         R                  [         R                  U[         R$                  " [         R                  5      U[         R$                  " U5      U/
[        R&                  l
        [         R                  [        R&                  l        [        R                  5       n[        R#                  X5      nUc)  [        R!                  5       n[        R#                  X5      n[        R                  U5      n[         R(                  " U5      n[        R                  UU" S
U5      [         R*                  " U5      5        [-        S
S5       GHN  nU" 5       mU" 5       m[         R                  " 5       nU" 5       n[        R'                  UUUS
[        R                  5       U[         R*                  " U5      S[         R*                  " U5      T5
      nSR/                  U4S j[-        UR0                  5       5       5      n[        R'                  UUUU	S-	  [        R                  5       U[         R*                  " U5      S[         R*                  " U5      T5
      nSR/                  U4S j[-        UR0                  5       5       5      nUU4U R2                  U'   GMQ     [        R                  U5        g )N   c                   *   > \ rS rSrS Y 4S Y 4/rSrg) KeyMap.__init__.<locals>.CFRangeW   loclen N)__name__
__module____qualname____firstlineno___fields___static_attributes__)CFIndexs   r   CFRangero   W   s    ((*H    r{    kTISPropertyUnicodeKeyLayoutDatai   i   i   i      r       c              3   @   >#    U  H  n[        TU   5      v   M     g 7fr   unichr)r   inon_shifted_chars     r   r   "KeyMap.__init__.<locals>.<genexpr>   s!     &dLcqv.>q.A'B'BLc      c              3   @   >#    U  H  n[        TU   5      v   M     g 7fr   r   )r   r   shifted_chars     r   r   r      s     "\D[q6,q/#:#:D[r   )ctypesc_void_pc_uint64c_uint32c_uint8c_uint16	Structurein_dllr
   CFDataGetBytesargtypesrestypeCFDataGetLength	CFReleaseLMGetKbdType!TISCopyCurrentKeyboardInputSource3TISCopyCurrentASCIICapableKeyboardLayoutInputSourceTISGetInputSourcePropertyPOINTERUCKeyTranslatecreate_string_bufferbyrefrangejoinvaluelayout_specific_keys)self	CFTypeRef	CFDataRef
OptionBitsUniCharCountUniCharUniChar4r{   r}   shiftKeyalphaKey	optionKey
controlKeykUCKeyActionDisplaykUCKeyTranslateNoDeadKeysBitklisk_layoutk_layout_sizek_layout_bufferkey_code	keys_down
char_countretvalnon_shifted_keyshifted_keyrz   r   r   s                            @@@r   __init__KeyMap.__init__G   s    OO	OO	//__
~~//Q;	*f&& 	* ,2??+A+A&Jl+m(	
'($ +4&(,%+4+')0&%.K!#' ')$&,oo#<>009;A??008NPBBKMS__BBJ5;__foo4V((139??((0*0//*0//*0//*0//*0//*4*0..*I*6*0..*F*2	*4& )/% 77933D[MMOD77_H..x8 55mDh=(A6<<P_C`a aH'z#:L)I%J**?+3+>+,+1+>+>+@+G+1<<	+B+,+1<<
+C+;	=F "hh&dER\RbRbLc&ddO**?+3+>+3q=+1+>+>+@+G+1<<	+B+,+1<<
+C+7	9F (("\E*JZJZD["\\K3BK2PD%%h/C &F 	r|   c                 B   U R                    H*  nU R                   U   UR                  5       :X  d  M&  U/ 4s  $    U R                   H<  nU R                  U   S   U:X  a  U/ 4s  $ U R                  U   S   U:X  d  M7  US/4s  $    [        SR	                  U5      5      e)zReturns a tuple of (scan_code, modifiers) where ``scan_code`` is a numeric scan code
and ``modifiers`` is an array of string modifier names (like 'shift') r   r   r#   zUnrecognized character: {})non_layout_keyslowerr   
ValueErrorformat)r   	characterr   s      r   character_to_vkKeyMap.character_to_vk   s     &&B##B'9??+<<Bx ' ++B((,Q/9<Bx**2.q1Y>WI&	 ,
 5<<YGHHr|   c                     XR                   ;   a  U R                   U   $ XR                  ;   a*  SU;   a  U R                  U   S   $ U R                  U   S   $ [        SR                  U5      5      e)z\Returns a character corresponding to the specified scan code (with given
modifiers applied) r#   r   r   zInvalid scan code: {})r   r   r   r   )r   r   	modifierss      r   vk_to_characterKeyMap.vk_to_character   sz     %%%''++,,,)#004Q77,,R033 4;;B?@@r|   rs   N)rt   ru   rv   rw   dictitemsr   r   r   r   r   ry   rs   r|   r   r   r      sC    2 2G 	h2G 	e	2G
 	g2G 	h2G 	h2G 	i2G 	g2G 	j2G 	h2G 	i2G 	m2G 	n2G 	o2G  	j!2G" 	e#2G$ 	k%2G& 	m'2G( 	f)2G* 	e+2G, 	e-2G. 	e/2G0 	d12G2 	d32G4 	d52G6 	d72G8 	d92G: 	d;2G< 	e=2G> 	e?2G@ 	eA2GB 	eC2GD 	eE2GF 	eG2GH 	eI2GJ c2Gd ege2G 2 2Of eNI -/ Ar|   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	KeyController   c           	          [        5       U l        SSSSSS.U l        0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&S'S(S)S*S+S,.EU l        g )-NF)r#   capsaltctrlcmdKEYTYPE_SOUND_UPr   KEYTYPE_SOUND_DOWNr   KEYTYPE_BRIGHTNESS_UP   KEYTYPE_BRIGHTNESS_DOWNr~   KEYTYPE_CAPS_LOCKrm   KEYTYPE_HELP   	POWER_KEY   KEYTYPE_MUTE   UP_ARROW_KEYr   DOWN_ARROW_KEY	   KEYTYPE_NUM_LOCK
   KEYTYPE_CONTRAST_UP   KEYTYPE_CONTRAST_DOWN   KEYTYPE_LAUNCH_PANEL   KEYTYPE_EJECT   KEYTYPE_VIDMIRROR   KEYTYPE_PLAY      r                  )KEYTYPE_NEXTKEYTYPE_PREVIOUSKEYTYPE_FASTKEYTYPE_REWINDKEYTYPE_ILLUMINATION_UPKEYTYPE_ILLUMINATION_DOWNKEYTYPE_ILLUMINATION_TOGGLE)r   key_mapcurrent_modifiers
media_keys)r   s    r   r   KeyController.__init__   s   x"


 !
 $Q
 &q	

  
 A
 
 A
 A
 a
 
 "2
 $R
 #B
 R
   !
" B#
$  " '))++-1
r|   c                    US:  aM  [         R                  " SSSSSSSUS-
  S-  S-  S5	      n[        R                  " SUR	                  5       5        gSnU R
                  S	   (       a  U[        R                  -  nU R
                  S
   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nUS:X  a  SU R
                  S'   O]US:X  d  US:X  a  SU R
                  S	'   OAUS:X  a  SU R
                  S
'   O+US:X  a  SU R
                  S'   OUS:X  a  SU R
                  S'   [        R                  " SUS5      n[        R                  " XC5        [        R                  " [        R                  U5        [        R                  " S5        g)1Sends a 'down' event for the specified scan code r   r   r   r   i 
  r   r   r   r#   r   r   r   r   r    Tr"   r*   r$   r&   r(   N{Gz?r   ]otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_QuartzCGEventPostCGEventr   kCGEventFlagMaskShiftkCGEventFlagMaskAlphaShiftkCGEventFlagMaskAlternatekCGEventFlagMaskControlkCGEventFlagMaskCommandCGEventCreateKeyboardEventCGEventSetFlagskCGHIDEventTaptimesleepr   r   evevent_flagsevents        r   pressKeyController.press   s   s?vv3,2%(3
B q"**,/ K%%g.v;;;%%f-v@@@%%e,v???%%f-v===%%e,v=== 404&&u-T!X%526&&w/T!15&&v.T!04&&u-T!15&&v.55dHdKE""56v44e<JJtr|   c                    US:  aM  [         R                  " SSSSSSSUS-
  S-  S-  S5	      n[        R                  " SUR	                  5       5        gUS	:X  a  S
U R
                  S'   O]US:X  d  US:X  a  S
U R
                  S'   OAUS:X  a  S
U R
                  S'   O+US:X  a  S
U R
                  S'   OUS:X  a  S
U R
                  S'   SnU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  nU R
                  S   (       a  U[        R                  -  n[        R                  " SUS
5      n[        R                  " XC5        [        R                  " [        R                  U5        [        R                  " S5        g)0Sends an 'up' event for the specified scan code r   r   r  i   r   r   r   r  r    Fr   r"   r*   r#   r$   r   r&   r   r(   r   Nr  r  r  s        r   releaseKeyController.release  s   s?vv3,2%(3
B q"**,/ 405&&u-T!X%527&&w/T!16&&v.T!05&&u-T!16&&v. K%%g.v;;;%%f-v@@@%%e,v???%%f-v===%%e,v===55dHeLE""56v44e<JJtr|   c                 ~    XR                   ;   a  SU R                   U   -   / 4$ U R                  R                  U5      $ )Nr   )r   r   r   )r   r   s     r   map_charKeyController.map_charM  s:    '	22266<<//	::r|   c                     US:  aI  [        U R                  5       VVs/ s H  u  p#X1S-
  :X  d  M  UPM     nnn[        U5      (       a  US   $ g U R                  R	                  U5      $ s  snnf )Nr   r   )	enumerater   rr   r   r   )r   	scan_codekvr   s        r   map_scan_codeKeyController.map_scan_codeR  sf    '0'AX'AtqQTW-EW'AIX9~~ |#<<//	:: Ys
   A+A+)r   r   r   N)
rt   ru   rv   rw   r   r  r  r   r'  ry   rs   r|   r   r   r      s    "
H-^-^;
;r|   r   c                   *    \ rS rSrSS jrS rS rSrg)KeyEventListeneri[  c                 8    X l         Xl        SU l        S U l        g )NTblockingcallback	listeningtap)r   r.  r-  s      r   r   KeyEventListener.__init__\  s      r|   c           	         [         R                  " [         R                  [         R                  [         R                  [         R
                  " [         R                  5      [         R
                  " [         R                  5      -  [         R
                  " [         R                  5      -  U R                  S5      U l
        [         R                  " SU R                  S5      n[         R                  " 5       n[         R                  " X![         R                  5        [         R                  " U R                  S5        U R                   (       a:  [         R"                  " [         R                  SS5        U R                   (       a  M9  gg)zaCreates a listener and loops while waiting for an event. Intended to run as
a background thread. Nr   Tr   F)r  CGEventTapCreatekCGSessionEventTapkCGHeadInsertEventTapkCGEventTapOptionDefaultCGEventMaskBitkCGEventKeyDownkCGEventKeyUpkCGEventFlagsChangedhandlerr0  CFMachPortCreateRunLoopSourceCFRunLoopGetCurrentCFRunLoopAddSourcekCFRunLoopDefaultModeCGEventTapEnabler/  CFRunLoopRunInMode)r   
loopsourceloops      r   runKeyEventListener.runb  s     **%%((++!!&"8"89!!&"6"678!!&"="=>? LL 99$!L
))+!!$F4P4PQ$/nn%%f&B&BAuM nnnr|   c           	      R   [         R                  " U[         R                  5      n[        U5      n[         R                  " U5      nSnU[         R
                  -  n	U[         R                  :X  a  SnGOU[         R                  :X  a  SnOU[         R                  :X  a  UR                  S5      (       a  U[         R                  -  (       a  SnOUS:X  a  U[         R                  -  (       a  SnOUR                  S5      (       d  UR                  S5      (       a  U[         R                  -  (       a  SnODUS:X  a  U[         R                  -  (       a  SnO#US	:X  a  U[         R                  -  (       a  SnOSnU R                  (       a  g U R!                  [#        XXiS
95        U$ )Nr   r]   r^   r#   z	caps lockr'   r   r   r!   )r   	is_keypad)r  CGEventGetIntegerValueFieldkCGKeyboardEventKeycodename_from_scancodeCGEventGetFlagskCGEventFlagMaskNumericPadr8  r9  r:  endswithr  r  r  r  r  r-  r.  r   )
r   proxye_typer  refconr$  key_nameflags
event_typerG  s
             r   r;  KeyEventListener.handlerv  sJ   66uf>\>\]	%i0&&u-
V>>>	V+++Jv+++Jv222  ))uv7S7S/S#
[(ef6W6W.W#
##H--1B1B51I1IPUX^XxXxPx#
V#1O1O)O#
Y&EF4R4R,R#
!
==mJ^_r|   r,  N)F)rt   ru   rv   rw   r   rD  r;  ry   rs   r|   r   r*  r*  [  s    N(r|   r*  c                      [        5       n g r   )r   )key_controllers    r   initrW    s	    "_Nr|   c                 .    [         R                  U 5        g)r  N)rV  r  r$  s    r   r  r    s    #r|   c                 .    [         R                  U 5        g)r  N)rV  r  rY  s    r   r  r    s    9%r|   c              #   :   #    [         R                  U 5      v   g7f)zReturns a tuple of (scan_code, modifiers) where ``scan_code`` is a numeric scan code 
and ``modifiers`` is an array of string modifier names (like 'shift') N)rV  r   )r   s    r   map_namer\    s      
!
!$
''s   c                 ,    [         R                  U 5      $ )zEReturns the name or character associated with the specified key code )rV  r'  rY  s    r   rJ  rJ    s    ''	22r|   c                 ~    [         R                  " 5       S:X  d  [        S5      e[        U 5      R	                  5         g )Nr   z'Error 13 - Must be run as administrator)osgeteuidOSErrorr*  rD  )r.  s    r   listenrb    s-    ::<1?@@X""$r|   c                    [         R                  " [         R                  5      n[         R                  " USS5      n[         R                  " U[        U R                  S5      5      S-  U 5        [         R                  " [         R                  U5        [         R                  " USS5      n[         R                  " U[        U R                  S5      5      S-  U 5        [         R                  " [         R                  U5        g )Nr   Tz	utf-16-ler   F)	r  CGEventSourceCreate!kCGEventSourceStateHIDSystemStater  CGEventKeyboardSetUnicodeStringrr   encoder	  r4  )r   OUTPUT_SOURCEr  s      r   type_unicoderi    s    ..v/W/WXM--mQEE
**5#i6F6F{6S2TXY2Y[de
v00%8--mQFE
**5#i6F6F{6S2TXY2Y[de
v00%8r|   )"r   ctypes.utilr  r  r_  	threadingAppKitr   _keyboard_eventr   r   r   _canonical_namesr	   r   	NameErrorchrcdllLoadLibraryutilfind_libraryr
   objectr   r   r*  rV  rW  r  r  r\  rJ  rb  ri  rs   r|   r   <module>rv     s        	   < < ,
 
	 	 !9!9(!C	DuAV uApO;F O;b7v 7r   %$&(
3%
	9I  Fs   B% %B0/B0