--- lib/exwin.tcl.orig 2017-11-09 20:42:24.000000000 -0800 +++ lib/exwin.tcl 2021-09-06 06:53:11.916007000 -0700 @@ -101,12 +101,26 @@ } proc mscroll {bindtag num} { - bind $bindtag [list %W yview scroll $num units] - bind $bindtag [list %W yview scroll -$num units] - bind $bindtag [list %W yview scroll 1 units] - bind $bindtag [list %W yview scroll -1 units] - bind $bindtag [list %W yview scroll 1 pages] - bind $bindtag [list %W yview scroll -1 pages] + # Prior to tcl 8.7a5: + # bind $bindtag [list %W yview scroll $num units] + # bind $bindtag [list %W yview scroll -$num units] + # bind $bindtag [list %W yview scroll 1 units] + # bind $bindtag [list %W yview scroll -1 units] + # bind $bindtag [list %W yview scroll 1 pages] + # bind $bindtag [list %W yview scroll -1 pages] + + # tcl 8.7a5 and later. See + # https://core.tcl-lang.org/tips/doc/trunk/tip/474.md for more info: + bind $bindtag [ list tk::MouseWheel %W y %D [ expr 10/-$num ] pixels ] + bind $bindtag { tk::MouseWheel %W y %D -10 pixels } + bind $bindtag { tk::MouseWheel %W y %D -1 pixels } +} + + +proc fmscroll {bindtag num} { + bind $bindtag [ list tk::MouseWheel %W y %D [ expr 200/-$num ] units ] + bind $bindtag { tk::MouseWheel %W y %D [expr 200/-10 ] units } + bind $bindtag { tk::MouseWheel %W y %D -1 units } }