SeS Enabling mousebutton sensitivity to a ctext widget's highlighted texts
A typical use-case would be to enable the user to click on a highlighted text and process this, ie. one could startup a help database with regard to the highlighted & clicked text...
tG² v1.06.01.41 has this feature included for the ctext widget of it's Source Code Editor.
# ctextBindings.tcl
#
# Copyright (C) 2012 Sedat Serper
# A similar script and functionality is implemented in tG² as of v1.06.01.41
#
# The author hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose,
# provided that existing copyright notices are retained in all copies
# and that this notice is included verbatim in any distributions. No
# written agreement, license, or royalty fee is required for any of the
# authorized uses. Modifications to this software may be copyrighted by
# their authors and need not follow the licensing terms described here,
# provided that the new terms are clearly indicated on the first page of
# each file where they apply.
#
# IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY PARTY
# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
# DERIVATIVES THEREOF, EVEN IF THE AUTHOR HAVE BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# THE AUTHOR AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
# NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# AND THE AUTHOR AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE
# MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# ------------------------------------------------------------------------------
# Purpose : to provide the ability to click on ctext highlights and process the
# string underneath the pointer
# Usage : ctext::binding4Tag <ctext widget path> <list of tags>
# ------------------------------------------------------------------------------
proc ctext_binding4Tag {w tags} {
foreach tag $tags {
$w tag bind $tag <Enter> {%W config -cursor hand2}
$w tag bind $tag <Leave> {%W config -cursor xterm}
$w tag bind $tag <ButtonRelease-1> {
set cur [::tk::TextClosestGap %W %x %y]
if {[catch {%W index anchor}]} {%W mark set anchor $cur}
set anchor [%W index anchor]
set last [::tk::TextNextPos %W "$cur - 1c" tcl_wordBreakAfter]
set first [::tk::TextPrevPos %W anchor tcl_wordBreakBefore]
if {![catch {set tmp [%W get $first $last]}]} {
ctext_execTagCmd $tmp
}
}
}
}
proc ctext_execTagCmd {str} {
# place here your customized script to process the string
console show
puts $str
}
THE DEMO# ----------------------- demo -------------------------------------------
# Open a new wish console and copy/paste the following complete script.
# Clicking on parts that are highlighted and observe the console output...
# Adjust procedure 'ctext_execTagCmd' to customize the handling 4 your application.
package require ctext
pack [ctext .t] -fill both -expand 1
ctext::addHighlightClass .t bindings purple [list <Enter> <Leave> <ButtonRelease-1>]
ctext::addHighlightClass .t commands orange [list foreach proc if set catch]
.t fastinsert end [info body ctext_binding4Tag]
.t highlight 1.0 end
ctext_binding4Tag .t {bindings commands}