Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #126452

Re: Correct way to detect F1

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: Correct way to detect F1
Date 2018-02-08 10:29 -0800
Organization None to speak of
Message-ID <lnh8qrxrle.fsf@kst-u.example.com> (permalink)
References <800430537@f122.n1.z21.fsxnet> <uurtke-ad.ln1@ruby.opensrc.club>

Show all headers | View raw


Egor <egor@ruby.local> writes:
> shinobi <shinobi@f122.n1.z21.fsxnet> wrote:
>> I wonder. What's the correct way to detect F1 in Linux Console?
>
> Various terminals produce different sequences for F-keys. The terminal 
> I use (PuTTY) produces the following sequences under different
> configurations:
>
>  \33[[A
>  \33OP
>  \33[11~
>  \33[M
>
> (\33 is ESC)
>
> Linux console produces \33[[A, but it is a bad practice to hardcode
> terminal escape sequences. If you want your code to work on variety of
> terminals, you need to use terminfo library.
>
> Here's an example of how to get escape sequence for F1 using terminfo:
>
>  #include <term.h>
>  #include <stdio.h>
>  ...
>  setupterm(NULL, fileno(stdio), NULL);
>  char* kf1 = tigetstr("kf1");

I think you mean
    setupterm(NULL, fileno(stdin), NULL);
And I'd use `const char *const kf1 = ...` (you don't want to modify
either the pointer or what it points to).

That gives you the appropriate string.  Is there support for recognizing
that string on input?  (In particular, you want to be able to
distinguish between an escape character that's part of a sequence and
one that's the result of the user hitting the escape key; that requires
timing.)

> "kf1" is a terminal capability. There are many different ones, but this
> particular one is responsible for input of the F1 key.
> Manpage terminfo(5) has a full list of capabilities.
>
> A very important thing to note is that tigetstr returns -1 on error,
> and not NULL as one might expect.

It returns (char*)-1 if capname is not a string capability, or 0 (NULL)
if it is canceled or absent from the terminal description.

> To get proper input you need to enable raw mode using termios, as been
> shown by another poster in this thread.

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Correct way to detect F1 shinobi@f122.n1.z21.fsxnet (shinobi) - 2018-01-29 03:44 +1200
  Re: Correct way to detect F1 Lorinczy Zsigmond <zsiga@nospam.for.me> - 2018-01-29 10:34 +0100
    Re: Correct way to detect F1 Keith Thompson <kst-u@mib.org> - 2018-01-29 09:24 -0800
      Re: Correct way to detect F1 "James R. Kuyper" <jameskuyper@verizon.net> - 2018-01-29 12:43 -0500
        Re: Correct way to detect F1 scott@slp53.sl.home (Scott Lurndal) - 2018-01-29 18:20 +0000
      Re: Correct way to detect F1 ais523 <ais523@nethack4.org> - 2018-01-29 21:03 +0000
        Re: Correct way to detect F1 Robert Wessel <robertwessel2@yahoo.com> - 2018-01-29 20:47 -0600
          Re: Correct way to detect F1 Keith Thompson <kst-u@mib.org> - 2018-01-29 20:01 -0800
            Re: Correct way to detect F1 Robert Wessel <robertwessel2@yahoo.com> - 2018-01-29 22:43 -0600
  Re: Correct way to detect F1 Ike Naar <ike@iceland.freeshell.org> - 2018-01-29 10:26 +0000
  Re: Correct way to detect F1 "Mr. Man-wai Chang" <toylet.toylet@gmail.com> - 2018-01-30 14:14 +0800
  Re: Correct way to detect F1 luser droog <luser.droog@gmail.com> - 2018-01-30 09:26 -0800
  Re: Correct way to detect F1 bartc <bc@freeuk.com> - 2018-01-30 18:39 +0000
  Re: Correct way to detect F1 Egor <egor@ruby.local> - 2018-02-08 14:21 +0200
    Re: Correct way to detect F1 shinobi@f153.n1.z21.fsxnet (shinobi) - 2018-02-08 16:41 +1200
      Re: Correct way to detect F1 Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-02-08 20:43 +0000
        Re: Correct way to detect F1 Keith Thompson <kst-u@mib.org> - 2018-02-08 13:13 -0800
          Re: Correct way to detect F1 scott@slp53.sl.home (Scott Lurndal) - 2018-02-08 22:14 +0000
    Re: Correct way to detect F1 Keith Thompson <kst-u@mib.org> - 2018-02-08 10:29 -0800
      Re: Correct way to detect F1 Egor <egor@ruby.local> - 2018-02-09 15:05 +0200
        Re: Correct way to detect F1 Jorgen Grahn <grahn+nntp@snipabacken.se> - 2018-02-09 17:30 +0000
        Re: Correct way to detect F1 Keith Thompson <kst-u@mib.org> - 2018-02-09 10:06 -0800
    Re: Correct way to detect F1 luser droog <luser.droog@gmail.com> - 2018-02-08 16:31 -0800

csiph-web