| Deutsch English Français Italiano |
|
<ygaikxdy65n.fsf@akutech.de> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: Ralf Fassel <ralfixx@gmx.de>
Newsgroups: comp.lang.tcl
Subject: Re: Operate only on the visible lines in a text window
Date: Wed, 10 Jul 2024 10:59:00 +0200
Lines: 41
Message-ID: <ygaikxdy65n.fsf@akutech.de>
References: <v6kmal$1jhpc$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain
X-Trace: individual.net mq09UKqUObkB+W+AcVDHeQ+pTU0bHv/2q9oM2oT0unyoNUMOk=
Cancel-Lock: sha1:wcRvNDxj//ZGawQ1HEBSmLHw70s= sha1:JN9lfNKpFK1bL7w72Lnvv2w9Tdc= sha256:cQI09OLUHpMOD7wPuhIZupCSFQGs1H+hICcGlFJUIAs=
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Bytes: 2265
* Shaun Deacon <sdeacon@us.socionext.com>
| The obvious solution to me is to just highlight the currently visible
| lines (or a range of lines spanning the current view - say 1000 or so)
| and when the user scrolls the window, highlight the new set of lines.
>
| Suggestions on the best way to find the indexes for the currently
| visible lines when the widget has been scrolled would be great.
>
| Can someone please point me in the right direction ?
You could try 'text yview' and derive the displayed lines from that:
grid [text .t -yscrollcommand {recalc {.s set}}] -sticky ewns -row 0 -column 0
grid [scrollbar .s -command {recalc {.t yview}} -orient vertical] -sticky ns -row 0 -column 1
grid [label .l] - -sticky ewns
grid rowconfigure . 0 -weight 1
grid columnconfigure . 0 -weight 1
for {set l 1} {$l < 1000} {incr l} {
.t insert end "Line $l\n"
}
proc recalc {cmd args} {
# scroll if required
if {$cmd ne ""} {
{*}$cmd {*}$args
}
# Determine the visible range
lassign [.t yview] start end
# Get line count
set lines [lindex [split [.t index end] "."] 0]
# Get first and last line displayed.
# Here you need to determine what to do with the partially displayed lines
set first [format %.1f [expr {$start*$lines+1}]]
set last [format %.1f [expr {$end*$lines}]]
.l configure -text "visible Lines $first ... $last"
}
bind . <Configure> [list recalc ""]
HTH
R'