grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a BjŒjROã@s$ddlmZmZddlZddlZddlmZddlmZm Z m Z m Z ddl m Z mZmZmZmZdZdZdejdfejdfejdfejdfejdfejdfejdfejdfejd fejd fejd fejd fejd fejd fejd fejd fd œZGd d „d ee ƒZGd d„dƒZdek�r eƒdS)é)ÚdivisionÚprint_functionN)Úescape)Ú BaseScreenÚ RealTerminalÚAttrSpecÚUNPRINTABLE_TRANS_TABLE)ÚbytesÚPYTHON3Ú text_typeÚxrangeÚord2iši™)éÿÿÿÿré)ÚdefaultÚblackzdark redz dark greenZbrownú dark bluez dark magentaz dark cyanú light grayz dark grayz light redz light greenZyellowz light bluez light magentaz light cyanZwhitecsÊeZdZ‡fdd„Zd/dd„Z‡fdd„Z‡fdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z d0dd„Z d1dd„Z dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Z‡ZS)2ÚScreencs`tt|ƒ ¡dg|_i|_d|_d|_d|_g|_d|_ |  ¡d|_ d|_ |  ddd¡dS)N)NNFrr)ÚsuperrÚ__init__Z curses_pairsZpaletteÚ has_colorÚsÚ cursor_stateZ _keyqueueÚprev_input_resizeÚset_input_timeoutsÚ last_bstateÚ_mouse_tracking_enabledZregister_palette_entry©Úself©Ú __class__©ú:/usr/lib64/python3.9/site-packages/urwid/curses_display.pyr=sÿzScreen.__init__TcCs¨t|ƒ}||jkrdS|r˜t dtjBtjBtjBtjBtjBtj Btj Btj Btj Btj BtjBtjBtjBtjBtjBtjBtjBtjBtjB¡ntƒ‚||_dS)z– Enable mouse tracking. After calling this function get_input will include mouse click events along with keystrokes. Nr)ÚboolrÚcursesZ mousemaskÚBUTTON1_PRESSEDÚBUTTON1_RELEASEDÚBUTTON2_PRESSEDÚBUTTON2_RELEASEDÚBUTTON3_PRESSEDÚBUTTON3_RELEASEDÚBUTTON4_PRESSEDÚBUTTON4_RELEASEDÚBUTTON1_DOUBLE_CLICKEDÚBUTTON1_TRIPLE_CLICKEDÚBUTTON2_DOUBLE_CLICKEDÚBUTTON2_TRIPLE_CLICKEDÚBUTTON3_DOUBLE_CLICKEDÚBUTTON3_TRIPLE_CLICKEDÚBUTTON4_DOUBLE_CLICKEDÚBUTTON4_TRIPLE_CLICKEDÚ BUTTON_SHIFTÚ BUTTON_ALTÚ BUTTON_CTRLÚNotImplementedError)rÚenabler"r"r#Úset_mouse_trackingNsZ ÿÿþþýýüüûûúúùùøø ÷ ÷ ö zScreen.set_mouse_trackingcs¸t ¡|_t ¡|_|jr2t ¡tjdkr2d|_|jrfzt ¡d|_Wnt j ydd|_Yn0|  ¡t  ¡t  d¡t d¡|j d¡|js¦| ¡|_tt|ƒ ¡dS)z7 Initialize the screen and input mode. éFTré rN)r%ZinitscrrZ has_colorsrZ start_colorZCOLORSZuse_default_colorsZhas_default_colorsÚ_cursesÚerrorÚ_setup_colour_pairsÚnoechoÚmetaÚ halfdelayZkeypadZ_signal_keys_setÚtty_signal_keysÚ_old_signal_keysrrÚ_startrr r"r#rFjs(         z Screen._startcsXt ¡| d¡z t ¡Wntjy2Yn0|jrF|j|jŽtt |ƒ  ¡dS)z% Restore the screen. rN) r%ÚechoÚ _curs_setZendwinr>r?rErDrrÚ_stoprr r"r#rI†s   z Screen._stopcCsZ|js dStdƒD]B}tdƒD]4}|tjkr8|tjkr8qt |dd|||¡qqdS)zÀ Initialize all 63 color pairs based on the term: bg * 8 + 7 - fg So to get a color, we just need to use that term and get the right color pair number. Nr<é)rr r%Ú COLOR_WHITEÚ COLOR_BLACKZ init_pair)rÚfgÚbgr"r"r#r@—s   ÿzScreen._setup_colour_pairscCsL|jdks||jkrdSzt |¡||_WntjyFd|_Yn0dS)NÚfixed)rr%Zcurs_setr>r?)rÚxr"r"r#rHªs  zScreen._curs_setcCs|j ¡|j ¡dS©N)rÚclearÚrefreshrr"r"r#Ú_clear´s z Screen._clearcCsB|dkr| ¡S|dur"t ¡n t |¡|j d¡|j ¡S)Nr)Ú_getch_nodelayr%ÚcbreakrCrÚnodelayÚgetch)rÚ wait_tenthsr"r"r#Ú_getch¹s   z Screen._getchcCs>|j d¡zt ¡Wq4Wq tjy0Yq 0q |j ¡S©Nr)rrWr%rVr>r?rXrr"r"r#rUÃs zScreen._getch_nodelayNçš™™™™™¹?cCs*dd„}||ƒ|_||ƒ|_||ƒ|_dS)a8 Set the get_input timeout values. All values have a granularity of 0.1s, ie. any value between 0.15 and 0.05 will be treated as 0.1 and any value less than 0.05 will be treated as 0. The maximum timeout value for this module is 25.5 seconds. max_wait -- amount of time in seconds to wait for input when there is no input pending, wait forever if None complete_wait -- amount of time in seconds to wait when get_input detects an incomplete escape sequence at the end of the available input resize_wait -- amount of time in seconds to wait for more input after receiving two screen resize requests in a row to stop urwid from consuming 100% cpu during a gradual window resize operation cSs|dur dSt|ddƒS)Ngš™™™™™©?r=)Úint)rr"r"r#Úconvert_to_tenthsâsz4Screen.set_input_timeouts..convert_to_tenthsN)Ú max_tenthsÚcomplete_tenthsÚ resize_tenths)rZmax_waitZ complete_waitZ resize_waitr^r"r"r#rÏs  zScreen.set_input_timeoutsFcCs¼| |j¡\}}|dgkr~|jr~| |j¡\}}||7}|sT| |j¡\}}||7}|dgkr qbq |dd…dgkr~| d¡|dgkr�d|_n|jdkr¦|s¦d|_nd|_|r¸||fS|S)aÝReturn pending input as a list. raw_keys -- return raw keycodes as well as translated versions This function will immediately return all the input since the last time it was called. If there is no input pending it will wait before returning an empty list. The wait time may be configured with the set_input_timeouts function. If raw_keys is False (default) this function will return a list of keys pressed. If raw_keys is True this function will return a ( keys pressed, raw keycodes ) tuple instead. Examples of keys returned: * ASCII printable characters: " ", "a", "0", "A", "-", "/" * ASCII control characters: "tab", "enter" * Escape sequences: "up", "page up", "home", "insert", "f1" * Key combinations: "shift f1", "meta a", "ctrl b" * Window events: "window resize" When a narrow encoding is not enabled: * "Extended ASCII" characters: "\xa1", "\xb2", "\xfe" When a wide encoding is enabled: * Double-byte characters: "\xa1\xea", "\xb2\xd4" When utf8 encoding is enabled: * Unicode characters: u"\u00a5", u'\u253c" Examples of mouse events returned: * Mouse button press: ('mouse press', 1, 15, 13), ('meta mouse press', 2, 17, 23) * Mouse button release: ('mouse release', 0, 18, 13), ('ctrl mouse release', 0, 17, 23) ú window resizerNérr)Ú _get_inputr_rraÚappend)rÚraw_keysÚkeysÚrawZraw2r"r"r#Ú get_inputës*+ÿ   zScreen.get_inputcCs4t ¡| |¡}d}g}g}|dkrh| |¡|tkr>d}n |tkrT|| ¡7}n | |¡| ¡}qg}z"|rŒt  |d¡\}}||7}qnWnŒtj �y| |j ¡}|dkrö| |¡|tkrÌd}n |tkrâ|| ¡7}n | |¡| ¡}q¬|�rt  |d¡\}}||7}qöYn0|�r,| d¡||fS)NFrTrb) r%ZdoupdaterZreÚ KEY_RESIZEÚ KEY_MOUSEÚ_encode_mouse_eventrUrZprocess_keyqueueZMoreInputRequiredr`)rrYÚkeyZresizerhrgZ processedÚrunr"r"r#rd5sD         zScreen._get_inputcs¢|j}}t ¡\}‰‰}}d‰|tj@r2ˆdO‰|tj@rDˆdO‰|tj@rVˆdO‰g‰‡‡‡‡fdd„}|tj@r’|d@dkr’|dƒ|dO}|tj@r¸|d@dkr¸|dƒ|dO}|tj@rÞ|d@dkrÞ|dƒ|dO}|tj @�r|d@dk�r|d ƒ|dO}|tj @�r4|d@�r4|dt j ƒ|d M}|tj @�r`|d@�r`|dt j ƒ|d M}|tj@�rŒ|d@�rŒ|dt j ƒ|d M}|tj@�r¸|d@�r¸|d t j ƒ|d M}|tj@�rÒ|dt jƒ|tj@�rì|dt jƒ|tj@�r|dt jƒ|tj@�r |d t jƒ|tj@�r>|dt jdƒ|tj@�r\|dt jdƒ|tj@�rz|dt jdƒ|tj@�r˜|d t jdƒ||_ˆS)Nrér<éc s6|ˆO}ˆ dtdƒtdƒ|dˆdˆdg¡dS)Néú[ÚMé é!)Úextendr )Úb©ÚlÚmodrPÚyr"r#Ú append_buttonpsz1Screen._encode_mouse_event..append_buttonrrcé@éþÿÿÿéýÿÿÿéûÿÿÿi÷ÿÿÿ)rr%Zgetmouser6r7r8r&r(r*r,r'rZMOUSE_RELEASE_FLAGr)r+r-r.ZMOUSE_MULTIPLE_CLICK_FLAGr0r2r4r/r1r3r5)rÚlastÚnextÚidÚzZbstater|r"rxr#rlesd         zScreen._encode_mouse_eventcCs4t ¡|j d¡t d¡|j ¡}t ¡|S)Nréd)r%rGrrWrCZgetstrrA©rÚstrr"r"r#Ú _dbg_instr£s    zScreen._dbg_instrcCs.|j ¡|j |¡|j ¡| d¡dSr[)rZclrtoeolÚaddstrrSrHr†r"r"r#Ú_dbg_out«s   zScreen._dbg_outcCs| |¡| ¡SrQ)rŠrˆ)rZquestionr"r"r#Ú _dbg_query±s zScreen._dbg_querycCs|j ¡dSrQ)rrSrr"r"r#Ú _dbg_refreshµszScreen._dbg_refreshcCs|j ¡\}}||fS)z7Return the terminal dimensions (num columns, num rows).)rZgetmaxyx)rÚrowsÚcolsr"r"r#Ú get_cols_rowsºszScreen.get_cols_rowscCsì|dur|j d¡dSt|tƒs@|j |tddƒf¡}|d}|jr˜|jrj|jdkrb|jd}qn|j}nd}|j r||j }nd}t   |dd|¡}nd}|j r¬|t jO}|jr¼|t jO}|jrÌ|t jO}|jrÜ|t jO}|j |¡dS)Nrrr<rJ)rZattrsetÚ isinstancerZ_paletteÚgetrZforeground_basicZforeground_numberZbackground_basicZbackground_numberr%Z color_pairÚboldZA_BOLDÚstandoutZ A_STANDOUTÚ underlineZ A_UNDERLINEZblinkZA_BLINK)rÚaÚprMrNÚattrr"r"r#Ú_setattrÀs4        zScreen._setattrc Cs¸|\}}d}| ¡D�](}|d7}z|j |d¡WntjyLYdS0d}d}d} |D]Þ\} } } | dkrz|  t¡} |s†|| kr”| | ¡| }z\| dvrÊtt | ƒƒD]} |j  dt | | ƒ¡qªn$t râ|j  |  d ¡¡n |j  | ¡WnBtj�y2||dk�r$| t |ƒdk�r$n YdSYn0| d7} q^q|jdu�rŒ|j\}}| d¡z|j ||¡Wntj�yˆYn0n| d¡|j dd¡|j ¡||_dS) z"Paint screen with rendered canvas.rrrNTÚU)Ú0r™i@úutf-8)ZcontentrÚmover>r?Ú translaterr˜ÚrangeÚlenZaddchr r r‰ÚdecodeÚcursorrHrSZkeep_cache_alive_link)rÚsizeÚrrŽr�r{ÚrowÚfirstZlastaÚnrr•ÚcsÚsegÚirPr"r"r#Ú draw_screenåsP           zScreen.draw_screencCs|j ¡dS)zh Force the screen to be completely repainted on the next call to draw_screen(). N)rrRrr"r"r#rR&sz Screen.clear)T)Nr\r\)F)Ú__name__Ú __module__Ú __qualname__rr;rFrIr@rHrTrZrUrrirdrlrˆrŠr‹rŒr�r˜rªrRÚ __classcell__r"r"r r#r<s.       ÿ  J0>%Arc@seZdZdd„Zdd„ZdS)Ú_testc Csttƒ|_tt ¡ƒ|_|j ¡|jD]:}|j |d|ddf|d|ddf|d|dd fg¡q&|j |j ¡dS) Nú on blackrr”ú on dark bluerr’ú on light grayrr“) rÚuiÚlistÚ_curses_coloursrgryÚsortZregister_paletteZ run_wrapperrn)rÚcr"r"r#r1s  ýz_test.__init__c sðGdd„dƒ}|ƒ}dt|jjƒdg}ggg}i|_d|_|jD]^}d}g}|d|d|dfD]&}| |df¡||d dd…}qd| |¡| |¡qB|gd ¢7}|gggg7}|j ¡\‰} d} | d gk�rì‡fd d „|Dƒdg| d| …|_|gg| d| …|_ |j  ˆ| f|¡|jj dd�\} } d| v�rT|j ¡\‰} | �s\qÎd}g}| D]D} t | ƒt k�r„|  d¡} |d| d7}|ddt| ƒfdg7}�qh| |dt| ƒ¡| |¡|| d…}|| d…}qÎdS)Nc@s eZdZdS)z_test.run..FakeRenderN)r«r¬r­r"r"r"r#Ú FakeRender>ór¸z has_color = Úr°r±r²rqz )rºz)return values from get_input(): (q exits)rºÚqcsg|]}| ˆ¡‘qSr")Úljust)Ú.0Út©rŽr"r#Ú Tr¹z_test.run..T)rfrbr›ú'z' r[zyellow on dark blue)Nrcz: )Úreprr³rZcoordsr¡ryrer�Útextr—rªriÚtyper ÚencoderŸ) rr¸r£rÃr—r·r¾r•r–r�rgrhÚkr"r¿r#rn=sN     & ÿ  z _test.runN)r«r¬r­rrnr"r"r"r#r¯0s r¯Ú__main__) Z __future__rrr%r>ZurwidrZurwid.display_commonrrrrZ urwid.compatr r r r r rjrkrLZ COLOR_REDZ COLOR_GREENZ COLOR_YELLOWZ COLOR_BLUEZ COLOR_MAGENTAZ COLOR_CYANrKrµrr¯r«r"r"r"r#Ús@ ïw<