OT: how to tell when i've hit a Fn key?
Polytropon
freebsd at edvax.de
Fri Oct 7 07:32:25 UTC 2011
On Thu, 6 Oct 2011 21:51:01 -0700, Gary Kline wrote:
> On Thu, Oct 06, 2011 at 07:37:25PM -0400, Thomas Dickey wrote:
> > Date: Thu, 6 Oct 2011 19:37:25 -0400
> > From: Thomas Dickey <dickey at radix.net>
> > Subject: Re: OT: how to tell when i've hit a Fn key?
> > To: Gary Kline <kline at thought.org>
> > Cc: FreeBSD Mailing List <freebsd-questions at freebsd.org>
> >
> > On Thu, Oct 06, 2011 at 03:41:17PM -0700, Gary Kline wrote:
> > >
> > > I've got a 103-key keyboard. most of them produce the right WAV
> > > file. i was having some trouble with the arrow key, but think i've
> > > found a resolution. next are the Function key, F1 to F12.
> > >
> > > anybody on-list familiar with curses and can help me with this?
> > > right now, most of the function keys output 4 clicks [!].
> >
> > I generally use tack for verifying the function-keys against the terminal
> > description. (I don't recall seeing a port for tack, but it can probably
> > be built starting with ncurses-devel, though I haven't tried that, since
> > I build development versions of ncurses outside the ports).
> >
> > For _seeing_ the codes, it helps to type ^V (lnext) right before pressing
> > a given key, making the escape character visible.
> >
>
> Hm. no joy in mudville. i know the first byte ia an
> ESC [ '\033]. the last, for F1, is an A. the others are
> hidden.
>From DOS times (that DOS, not _the_ DOS!) I remember that
the function keys do generate a "two-key sequene": The first
character is a 0x00 byte, the next one is a regular key,
such as "A" for PF1. So you did basically check (in pseudocode):
extended = false
c = read character
if c == 0x00 {
extended = true
c = read character
}
act upon c && if extended
> i'll check ncurses-devel and see w hat it has. REAL code
> helps in stuff like this... .
I've written a (partially working) dialog library comparable
to NCurses Forms in C, using ncurses' built-in functionality.
So if you can, use what's already present and working. Instead
of dealing with the zero-bytes, it's much easier to use the
ncurses functionality.
Like this (except this is nonsense):
int c;
c = getch();
if(c == KEY_F(1)) /* PF1 */
do_stuff();
if(c == KEY_UP) /* Cursor up */
do_more_stuff();
if(c == 27) /* Escape key! */
get_out_of_prison();
>From memory: Space is 32, Return is 13, Backspace is 8, Tab is 9.
I think most of them are defined as macros in NCurses.
--
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...
More information about the freebsd-questions
mailing list