
    F\hJ                         S r SSKrSSKrS r " S S5      r\S:X  a%  S r\R                  " \5      r\	" S\
" \5      5        gg)	z:Simple textbox editing widget with Emacs-like keybindings.    Nc                 P   U R                  US-   U[        R                  X1-
  S-
  5        U R                  XS-   [        R                  XB-
  S-
  5        U R                  X2S-   [        R                  XB-
  S-
  5        U R                  US-   U[        R                  X1-
  S-
  5        U R                  X[        R                  5        U R                  X[        R                  5        U R                  X4[        R                  5        U R                  X2[        R                  5        g)zVDraw a rectangle with corners at the provided upper-left
and lower-right coordinates.
   N)
vlinecurses	ACS_VLINEhline	ACS_HLINEaddchACS_ULCORNERACS_URCORNERACS_LRCORNERACS_LLCORNER)winulyulxlrylrxs        %/usr/lib/python3.13/curses/textpad.py	rectangler      s     IIc!eS&**CIM:IIcq5&**CIM:IIcq5&**CIM:IIc!eS&**CIM:IIc++,IIc++,IIc++,IIc++,    c                   J    \ rS rSrSrSS jrS rS rS rS r	S r
SS
 jrSrg	)Textbox   a  Editing widget using the interior of a window object.
 Supports the following Emacs-like key bindings:

Ctrl-A      Go to left edge of window.
Ctrl-B      Cursor left, wrapping to previous line if appropriate.
Ctrl-D      Delete character under cursor.
Ctrl-E      Go to right edge (stripspaces off) or end of line (stripspaces on).
Ctrl-F      Cursor right, wrapping to next line when appropriate.
Ctrl-G      Terminate, returning the window contents.
Ctrl-H      Delete character backward.
Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
Ctrl-L      Refresh screen.
Ctrl-N      Cursor down; move down one line.
Ctrl-O      Insert a blank line at cursor location.
Ctrl-P      Cursor up; move up one line.

Move operations do nothing if the cursor is at an edge where the movement
is not possible.  The following synonyms are supported where possible:

KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N
KEY_BACKSPACE = Ctrl-h
c                 z    Xl         X l        U R                  5         SU l        S U l        UR                  S5        g Nr   )r   insert_mode_update_max_yxstripspaceslastcmdkeypad)selfr   r   s      r   __init__Textbox.__init__+   s3    &

1r   c                 d    U R                   R                  5       u  pUS-
  U l        US-
  U l        g r   )r   getmaxyxmaxymaxx)r!   r&   r'   s      r   r   Textbox._update_max_yx3   s,    XX&&(
1H	1H	r   c                 <   U R                  5         U R                  n [        R                  R                  U R                  R                  X5      5      [        R                  R                  :w  a  [        U R                  US-   5      n U$ US:X  a   U$ US-
  nM  )zmGo to the location of the first blank on the given line,
returning the index of the last non-blank character.r   r   )r   r'   r   asciir   inchSPmin)r!   ylasts      r   _end_of_lineTextbox._end_of_line8   s     	yy||!!$((--"89V\\__L499d1f-   !8D r   c                    U R                  5         U R                  R                  5       u  p#S nX R                  :  d  X0R                  :  a  U R
                  (       a  U R                  R                  5       n U R                  R                  U5        U R
                  (       a$  [        R                  R                  W5      (       d  OFUnU R                  R                  5       u  p#Uc  X#4nX R                  :  a  M  X0R                  :  a  M  Ub  U R                  R                  " U6   g g ! [        R                   a     Nf = fN)r   r   getyxr&   r'   r   r+   r
   r   errorr*   isprintmove)r!   chr.   xbackyxoldchs         r   _insert_printable_charTextbox._insert_printable_charF   s    !))mq99}r" ##6<<+?+?+F+FBXX^^%FQ~! ))mq99}$ HHMM6"  << s   9D. .EEc                 \   U R                  5         U R                  R                  5       u  p#Xl        [        R
                  R                  U5      (       a0  X R                  :  d  X0R                  :  a  U R                  U5        gU[        R
                  R                  :X  a  U R                  R                  US5        gU[        R
                  R                  [        R                  [        R
                  R                  [        R                  [        R
                  R                   4;   a  US:  a  U R                  R                  X#S-
  5        OsUS:X  a  OlU R"                  (       a2  U R                  R                  US-
  U R%                  US-
  5      5        O)U R                  R                  US-
  U R                  5        U[        R
                  R                  [        R                  [        R
                  R                   4;   a  U R                  R'                  5         gU[        R
                  R(                  :X  a  U R                  R'                  5         gU[        R
                  R*                  :X  ac  U R"                  (       a+  U R                  R                  X R%                  U5      5        gU R                  R                  X R                  5         gU[        R
                  R,                  [        R.                  4;   a`  X0R                  :  a  U R                  R                  X#S-   5        gX R                  :X  a   gU R                  R                  US-   S5         gU[        R
                  R0                  :X  a  gU[        R
                  R2                  :X  a@  U R                  S:X  a  gX R                  :  a  U R                  R                  US-   S5        gU[        R
                  R4                  :X  am  US:X  a0  U R%                  U5      S:X  a  U R                  R7                  5         gU R                  R                  X#5        U R                  R9                  5          gU[        R
                  R:                  :X  a  U R                  R=                  5         gU[        R
                  R>                  [        R@                  4;   aw  X R                  :  ag  U R                  R                  US-   U5        X0R%                  US-   5      :  a1  U R                  R                  US-   U R%                  US-   5      5        gU[        R
                  RB                  :X  a  U R                  RE                  5         gU[        R
                  RF                  [        RH                  4;   am  US:  ag  U R                  R                  US-
  U5        X0R%                  US-
  5      :  a1  U R                  R                  US-
  U R%                  US-
  5      5        g)z!Process a single editing command.r   r   )%r   r   r4   r   r   r*   r6   r&   r'   r<   SOHr7   STXKEY_LEFTBSKEY_BACKSPACEDELr   r0   delchEOTENQACK	KEY_RIGHTBELNLVTdeletelnclrtoeolFFrefreshSOKEY_DOWNSIinsertlnDLEKEY_UP)r!   r8   r.   r9   s       r   
do_commandTextbox.do_command_   sp   !<<##99}II++B/v u 6<<###HHMM!Qr q FLL$$V__LLOO((LL$$& & 1ua1%a!!ac4#4#4QqS#9:ac499-flloov';';V\\=M=MNN V U 6<<###HHNNR Q 6<<###a!2!21!56L I a+H G FLL$$f&6&67799}a1%B A ii> ; ac1%: 9 6<<###6<<??"yyA~YYac1%, + 6<<??"Av$++A.!3!!#& ! a#!!#  6<<??"HH  FLLOOV__5599}ac1%((1--HHMM!A#t'8'81'=>  6<<??"HH  FLL$$fmm441uac1%((1--HHMM!A#t'8'81'=>r   c                    SnU R                  5         [        U R                  S-   5       H  nU R                  R	                  US5        U R                  U5      nUS:X  a  U R                  (       a  MI  [        U R                  S-   5       H_  nU R                  (       a  XC:  a    OHU[        [        R                  R                  U R                  R                  X$5      5      5      -   nMa     U R                  S:  d  M  US-   nM     U$ )z.Collect and return the contents of the window. r   r   
)r   ranger&   r   r7   r0   r   r'   chrr   r*   r+   )r!   resultr.   stopr9   s        r   gatherTextbox.gather   s    tyy{#AHHMM!Q$$Q'DqyT--499Q;'###fll&8&8q9L&M"NN ( yy1}$ $ r   Nc                      U R                   R                  5       nU(       a  U" U5      nU(       d  M3  U R                  U5      (       d   U R	                  5       $ U R                   R                  5         Mu  )z2Edit in the widget window and collect the results.)r   getchrW   rP   r`   )r!   validater8   s      r   editTextbox.edit   s\    !Bb\??2&&{{} HH r   )r   r   r'   r&   r   r   )Fr3   )__name__
__module____qualname____firstlineno____doc__r"   r   r0   r<   rW   r`   re   __static_attributes__ r   r   r   r      s,    .
#2BH"r   r   __main__c                     Su  pSu  p4U R                  US-
  US5        [        R                  " X!X45      n[        XS-
  US-
  X2-   XA-   5        U R	                  5         [        U5      R                  5       $ )N)	      )         zUse Ctrl-G to end editing.r   )addstrr   newwinr   rP   r   re   )stdscrncolsnlinesr   r   r   s         r   test_editboxrz      sl    c!eS">?mmF34&a%QckBs|  ""r   zContents of text box:)rk   r   curses.asciir   r   rg   rz   wrapperstrprintreprrm   r   r   <module>r      sS    @  -l l\ z# ..
&C	
!49- r   