o
    œ©Zh`  ã                   @   s–  d Z ddlZddlZddlmZ ej ej d¡¡Z	ej
Zee	j_ee	j_ee	j_eege	j_e	jZdd„ Zdd„ Zd	d
„ Zej ej d¡¡ZejZee_eejejeege_ejZeje_ege_ejZde_eejge_ejZee_eeege_ejZee_ejZde_eeege_ejZde_ege_ej Z de _ege _dZ!e "ed¡Z#dd„ Z$dd„ Z%dd„ Z&e 'deee¡Z(e(e&ƒZ)dd„ Z*dd„ Z+dS )zBInputhook for OS X

Calls NSApp / CoreFoundation APIs via ctypes.
é    N)ÚEventÚobjcc                 C   s   t | tƒs
|  d¡} | S )zensure utf8 bytesÚutf8)Ú
isinstanceÚbytesÚencode)Ús© r	   úY/var/www/html/lang_env/lib/python3.10/site-packages/IPython/terminal/pt_inputhooks/osx.pyÚ_utf8   s   

r   c                 C   ó   t  t| ƒ¡S )z)create a selector name (for ObjC methods))r   Úsel_registerNamer   )Únamer	   r	   r
   Ún   ó   r   c                 C   r   )zget an ObjC Class by name)r   Úobjc_getClassr   )Ú	classnamer	   r	   r
   ÚC!   r   r   ÚCoreFoundationé   ÚkCFRunLoopCommonModesc                   C   s   t t gtj_ttdƒtdƒƒS )z0Return the global NSApplication instance (NSApp)ZNSApplicationZsharedApplication©Úvoid_pr   Úobjc_msgSendÚargtypesÚmsgr   r   r	   r	   r	   r
   Ú_NSAppN   s   r   c                 C   sl   t t t t t t t t t t t gtj_ttdƒtdƒdddddddddƒ}t t t t gtj_t| tdƒt |ƒdƒ dS )zWake the ApplicationZNSEventz]otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:é   r   NzpostEvent:atStart:Tr   )ÚNSAppÚeventr	   r	   r
   Ú_wakeT   s:   õÿòr    c                 C   s@   t | ƒ t| ƒ tƒ }tttgtj_t|tdƒ|ƒ t	|ƒ dS )z.Callback to fire when there's input to be readzstop:N)
ÚCFFileDescriptorInvalidateÚ	CFReleaser   r   r   r   r   r   r   r    )ÚfdrefÚflagsÚinfor   r	   r	   r
   Ú_input_callbackw   s   r&   c                 C   sD   t d| dtdƒ}t|tƒ td|dƒ}tƒ }t||tƒ t|ƒ dS )z;Register callback to stop eventloop when there's data on fdNFr   )	ÚCFFileDescriptorCreateÚ_c_input_callbackÚCFFileDescriptorEnableCallBacksÚkCFFileDescriptorReadCallBackÚ#CFFileDescriptorCreateRunLoopSourceÚCFRunLoopGetCurrentÚCFRunLoopAddSourcer   r"   )Úfdr#   ÚsourceÚloopr	   r	   r
   Ú_stop_on_read„   s   
r1   c                 C   s0   t ƒ }t|  ¡ ƒ ttgtj_t|tdƒƒ dS )zInputhook for Cocoa (NSApp)ÚrunN)	r   r1   Úfilenor   r   r   r   r   r   )Úcontextr   r	   r	   r
   Ú	inputhookŽ   s   r5   ),Ú__doc__ÚctypesZctypes.utilÚ	threadingr   ZcdllZLoadLibraryÚutilZfind_libraryr   Zc_void_pr   r   Úrestyper   r   r   r   r   r   r   r   r'   Úc_intZc_boolZ#CFFileDescriptorGetNativeDescriptorr)   Zc_ulongr+   r,   r-   r"   r!   r*   Zin_dllr   r   r    r&   Z	CFUNCTYPEZ_c_callback_func_typer(   r1   r5   r	   r	   r	   r
   Ú<module>   s^    #	
