Package: vkeybd
Version: 1:0.1.17b-2
Severity: important
Tags: patch

*** Please type your report below this line ***

If your keymap is designed for keys that are not displayed in the piano
keyboard, pressing the corresponding keys of your computer keyboard will
raise an error with the key note number. Moreover the same error keeps
raising afterwards for any other key pressed because the unexpected key note
number stays in the key stack. Error message looks like this:

----------------------------------------------------
can't read "keyitem(36)": no such element in array
can't read "keyitem(36)": no such element in array
    while executing
"$keywin itemconfigure $keyitem($key) -fill blue"
    (procedure "KeyStart" line 8)
    invoked from within
[…]
----------------------------------------------------

To get this message you may use the french layout on a 3 octaves piano:

$ vkeybd --keymap /usr/share/vkeybd/vkeybdmap-french

Then press the “!” key.

Using a “catch” instruction in both KeyStart and KeyStop procedures of the
file “/usr/share/vkeybd/vkeybd.tcl” make it possible to avoid error raising
whatever the key pressed and the piano octaves displayed. Here is the small
patch:

--- /usr/share/vkeybd/vkeybd.tcl.orig    2009-05-08 22:09:03.000000000
+0200
+++ /usr/share/vkeybd/vkeybd.tcl    2009-05-08 22:21:58.000000000
+0200
@@ -170,10 +170,12 @@
 proc KeyStart {key button} {
     global keybase keywin keyitem keyvel activekey
     SeqOn
-    if {$button == 1} {
-    set activekey $keyitem($key)
+    catch {
+        if {$button == 1} {
+        set activekey $keyitem($key)
+        }
+        $keywin itemconfigure $keyitem($key) -fill blue
     }
-    $keywin itemconfigure $keyitem($key) -fill blue
     set key [expr $key + $keybase]
     SeqStartNote $key $keyvel
 }
@@ -181,11 +183,13 @@
 proc KeyStop {key button} {
     global keybase keywin keyitem keyindex keycolor activekey
     SeqOn
-    if {$button == 1 && $activekey != ""} {
-    set key $keyindex($activekey)
-    set activekey ""
+    catch {
+        if {$button == 1 && $activekey != ""} {
+        set key $keyindex($activekey)
+        set activekey ""
+        }
+        $keywin itemconfigure $keyitem($key) -fill $keycolor($key)
     }
-    $keywin itemconfigure $keyitem($key) -fill $keycolor($key)
     set key [expr $key + $keybase]
     SeqStopNote $key 0
 }

Regards,

JM. Philippe

-- System Information:
Debian Release: 5.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-2-686 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages vkeybd depends on:
ii  libasound2                    1.0.16-2   ALSA library
ii  libc6                         2.7-18     GNU C Library: Shared libraries
ii  libx11-6                      2:1.1.5-2  X11 client-side library
ii  tcl8.4                        8.4.19-2   Tcl (the Tool Command Language)
v8
ii  tk8.4                         8.4.19-2   Tk toolkit for Tcl and X11,
v8.4 -

vkeybd recommends no packages.

vkeybd suggests no packages.

-- no debconf information

Reply via email to