+proc savecmitpos {} {
+ global ctext cmitmode
+
+ if {$cmitmode eq "tree"} {
+ return {}
+ }
+ return [list target_scrollpos [$ctext index @0,0]]
+}
+
+proc savectextpos {} {
+ global ctext
+
+ return [list target_scrollpos [$ctext index @0,0]]
+}
+
+proc maybe_scroll_ctext {ateof} {
+ global ctext target_scrollpos
+
+ if {![info exists target_scrollpos]} return
+ if {!$ateof} {
+ set nlines [expr {[winfo height $ctext]
+ / [font metrics textfont -linespace]}]
+ if {[$ctext compare "$target_scrollpos + $nlines lines" <= end]} return
+ }
+ $ctext yview $target_scrollpos
+ unset target_scrollpos
+}
+