| Patch from Matthias Goebl <oe@m.goebl.net> |
| Added via OE bugtracker: bug #478 |
| |
| Upstream-Status: Pending |
| |
| --- console-tools-0.3.2/kbdtools/kbd_mode.c.orig |
| +++ console-tools-0.3.2/kbdtools/kbd_mode.c |
| @@ -29,11 +29,16 @@ |
| OPT("-u --unicode ", _("UTF-8 mode (UNICODE)")); |
| OPT("-s --scancode ", _("scancode mode (RAW)")); |
| OPT(" --mode={8bit,keycode,unicode,scancode} ", _("set mode")); |
| + OPT("-r --rate=RATE ", _("set repeat rate (default: 33)")); |
| + OPT("-d --delay=DELAY ", _("set repeat delay (default: 250)")); |
| |
| OPT("-h --help ", HELPDESC); |
| OPT("-V --version ", VERSIONDESC); |
| } |
| |
| +int rate=-1; |
| +int delay=-1; |
| + |
| static int parse_cmdline (int argc, char *argv[]) |
| { |
| int mode = -1; |
| @@ -46,11 +51,13 @@ |
| { "mode" , required_argument, NULL, 'm' }, |
| { "scancode" , no_argument, NULL, 's' }, |
| { "unicode" , no_argument, NULL, 'u' }, |
| + { "rate" , required_argument, NULL, 'r' }, |
| + { "delay" , required_argument, NULL, 'd' }, |
| { NULL, 0, NULL, 0 } |
| }; |
| int c; |
| |
| - while ( (c = getopt_long (argc, argv, "Vhaksu", long_opts, NULL)) != EOF) |
| + while ( (c = getopt_long (argc, argv, "Vhaksur:d:", long_opts, NULL)) != EOF) |
| switch (c) { |
| case 'h': |
| usage (); |
| @@ -58,6 +65,14 @@ |
| case 'V': |
| version (); |
| exit(0); |
| + case 'r': |
| + rate = atoi(optarg); |
| + mode = -2; |
| + break; |
| + case 'd': |
| + delay = atoi(optarg); |
| + mode = -2; |
| + break; |
| case 'a': |
| mode = K_XLATE; |
| break; |
| @@ -129,6 +144,20 @@ |
| exit(0); |
| } |
| |
| + if ( rate != -1 || delay != -1 ) |
| + { |
| + struct kbd_repeat kbd_rep; |
| + kbd_rep.delay = delay; |
| + kbd_rep.period = rate; |
| + if (ioctl(fd, KDKBDREP, &kbd_rep)) |
| + { |
| + fprintf(stderr, progname); |
| + perror(_(": error setting keyboard repeat mode\n")); |
| + exit(1); |
| + } |
| + if(mode==-2) exit(0); |
| + } |
| + |
| if (ioctl(fd, KDSKBMODE, mode)) |
| { |
| fprintf(stderr, progname); |