3 \@sRddlZddlZddZGdddZedkrNddZejeZed e edS) NcCs|j|d|tj||d|j||dtj||d|j||dtj||d|j|d|tj||d|j||tj|j||tj|j||tj|j||tj dS)N) ZvlinecursesZ ACS_VLINEZhlineZ ACS_HLINEaddchZ ACS_ULCORNERZ ACS_URCORNERZ ACS_LRCORNERZ ACS_LLCORNER)winulyulxZlryZlrxr&/usr/lib64/python3.6/curses/textpad.py rectanglesr c@sHeZdZdddZddZddZdd Zd d Zd d ZdddZ dS)TextboxFcCs.||_||_|jd|_d|_|jddS)Nr)r insert_mode_update_max_yx stripspaceslastcmdZkeypad)selfrr rrr __init__+s zTextbox.__init__cCs&|jj\}}|d|_|d|_dS)Nr)rZgetmaxyxmaxymaxx)rrrrrr r 3s zTextbox._update_max_yxcCs\|j|j}xHtjj|jj||tjjkrBt|j|d}Pn |dkrLP|d}qW|S)Nrr)r rrasciirinchZSPmin)ryZlastrrr _end_of_line8s zTextbox._end_of_linec Cs|j|jj\}}d}x||jks0||jkr|jr@|jj}y|jj|Wntj k rfYnX|j s~tj j | rP|}|jj\}}|dkr||f}qW|dk r|jj |dS)N) r rgetyxrrr rrrerrorrisprintmove)rchrxZbackyxZoldchrrr _insert_printable_charFs$  zTextbox._insert_printable_charcCsV|j|jj\}}||_tjj|rJ||jks<||jkrF|j |n|tjj krh|jj |dn|tjj tj tjjtjfkr|dkr|jj ||dnB|dkrn8|jr|jj |d|j|dn|jj |d|j|tjjtjfkrR|jjnL|tjjkr"|jjn0|tjjkrb|jrN|jj ||j|n|jj ||jn|tjjtjfkr||jkr|jj ||dn ||jkrn|jj |ddn|tjjkrdS|tjjkr |jdkrdS||jkrR|jj |ddnF|tjjkrZ|dkr@|j|dkr@|jjn|jj |||jjn|tjjkrt|jjn|tjjtjfkr||jkrR|jj |d|||j|dkrR|jj |d|j|dnz|tjj kr|jj!n`|tjj"tj#fkrR|dkrR|jj |d|||j|dkrR|jj |d|j|ddS)Nrr)$r rrrrrrrrrZSOHrZSTXZKEY_LEFTZBSZ KEY_BACKSPACErrZdelchZEOTZENQZACKZ KEY_RIGHTZBELNLZVTZdeletelnZclrtoeolZFFrefreshSOZKEY_DOWNZSIZinsertlnZDLEZKEY_UP)rrrrrrr do_command_sr            zTextbox.do_commandcCsd}|jxt|jdD]}|jj|d|j|}|dkrH|jrHqxDt|jdD]2}|jrl||krlP|tt j j |jj ||}qXW|jdkr|d}qW|S)Nrr ) r rangerrrrrrchrrrr)rresultrstoprrrr gathers "  zTextbox.gatherNcCs@x6|jj}|r||}|sq|j|s*P|jjqW|jS)N)rZgetchr#r!r*)rZvalidaterrrr edits  z Textbox.edit)F)N) __name__ __module__ __qualname__rr rrr#r*r+rrrr r s Ar __main__cCsfd\}}d \}}|j|d|dtj||||}t||d|d|||||jt|jS) N zUse Ctrl-G to end editing.r)r0r1)r2r3)ZaddstrrZnewwinr r!r r+)ZstdscrZncolsZnlinesrrrrrr test_editboxs r5zContents of text box:) rZ curses.asciir r r,r5wrapperstrprintreprrrrr s ,