Annotation of micropolis/src/tk/library/text.tcl, revision 1.1.1.1

1.1       root        1: # text.tcl --
                      2: #
                      3: # This file contains Tcl procedures used to manage Tk entries.
                      4: #
                      5: # $Header: /user6/ouster/wish/scripts/RCS/text.tcl,v 1.2 92/07/16 16:26:33 ouster Exp $ SPRITE (Berkeley)
                      6: #
                      7: # Copyright 1992 Regents of the University of California
                      8: # Permission to use, copy, modify, and distribute this
                      9: # software and its documentation for any purpose and without
                     10: # fee is hereby granted, provided that this copyright
                     11: # notice appears in all copies.  The University of California
                     12: # makes no representations about the suitability of this
                     13: # software for any purpose.  It is provided "as is" without
                     14: # express or implied warranty.
                     15: #
                     16: 
                     17: # The procedure below is invoked when dragging one end of the selection.
                     18: # The arguments are the text window name and the index of the character
                     19: # that is to be the new end of the selection.
                     20: 
                     21: proc tk_textSelectTo {w index} {
                     22:     global tk_priv
                     23: 
                     24:     case $tk_priv(selectMode) {
                     25:        char {
                     26:            if [$w compare $index < anchor] {
                     27:                set first $index
                     28:                set last anchor
                     29:            } else {
                     30:                set first anchor
                     31:                set last [$w index $index+1c]
                     32:            }
                     33:        }
                     34:        word {
                     35:            if [$w compare $index < anchor] {
                     36:                set first [$w index "$index wordstart"]
                     37:                set last [$w index "anchor wordend"]
                     38:            } else {
                     39:                set first [$w index "anchor wordstart"]
                     40:                set last [$w index "$index wordend"]
                     41:            }
                     42:        }
                     43:        line {
                     44:            if [$w compare $index < anchor] {
                     45:                set first [$w index "$index linestart"]
                     46:                set last [$w index "anchor lineend + 1c"]
                     47:            } else {
                     48:                set first [$w index "anchor linestart"]
                     49:                set last [$w index "$index lineend + 1c"]
                     50:            }
                     51:        }
                     52:     }
                     53:     $w tag remove sel 0.0 $first
                     54:     $w tag add sel $first $last
                     55:     $w tag remove sel $last end
                     56: }
                     57: 
                     58: # The procedure below is invoked to backspace over one character in
                     59: # a text widget.  The name of the widget is passed as argument.
                     60: 
                     61: proc tk_textBackspace w {
                     62:     $w delete insert-1c insert
                     63: }
                     64: 
                     65: # The procedure below compares three indices, a, b, and c.  Index b must
                     66: # be less than c.  The procedure returns 1 if a is closer to b than to c,
                     67: # and 0 otherwise.  The "w" argument is the name of the text widget in
                     68: # which to do the comparison.
                     69: 
                     70: proc tk_textIndexCloser {w a b c} {
                     71:     set a [$w index $a]
                     72:     set b [$w index $b]
                     73:     set c [$w index $c]
                     74:     if [$w compare $a <= $b] {
                     75:        return 1
                     76:     }
                     77:     if [$w compare $a >= $c] {
                     78:        return 0
                     79:     }
                     80:     scan $a "%d.%d" lineA chA
                     81:     scan $b "%d.%d" lineB chB
                     82:     scan $c "%d.%d" lineC chC
                     83:     if {$chC == 0} {
                     84:        incr lineC -1
                     85:        set chC [string length [$w get $lineC.0 $lineC.end]]
                     86:     }
                     87:     if {$lineB != $lineC} {
                     88:        return [expr {($lineA-$lineB) < ($lineC-$lineA)}]
                     89:     }
                     90:     return [expr {($chA-$chB) < ($chC-$chA)}]
                     91: }
                     92: 
                     93: # The procedure below is called to reset the selection anchor to
                     94: # whichever end is FARTHEST from the index argument.
                     95: 
                     96: proc tk_textResetAnchor {w index} {
                     97:     global tk_priv
                     98:     if {[$w tag ranges sel] == ""} {
                     99:        set tk_priv(selectMode) char
                    100:        $w mark set anchor $index
                    101:        return
                    102:     }
                    103:     if [tk_textIndexCloser $w $index sel.first sel.last] {
                    104:        if {$tk_priv(selectMode) == "char"} {
                    105:            $w mark set anchor sel.last
                    106:        } else {
                    107:            $w mark set anchor sel.last-1c
                    108:        }
                    109:     } else {
                    110:        $w mark set anchor sel.first
                    111:     }
                    112: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.