termkey_getkey man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

TERMKEY_GETKEY(3)					     TERMKEY_GETKEY(3)

NAME
       termkey_getkey, termkey_getkey_force - retrieve the next key event

SYNOPSIS
       #include <termkey.h>

       TermKeyResult termkey_getkey(TermKey *tk, TermKeyKey *key);
       TermKeyResult termkey_getkey_force(TermKey *tk, TermKeyKey *key);

       Link with -ltermkey.

DESCRIPTION
       termkey_getkey()	 attempts to retrieve a single keypress event from the
       termkey(7) instance buffer, and put it in the structure referred to  by
       key. It returns one of the following values:

       TERMKEY_RES_KEY
	      a	 complete  keypress  was removed from the buffer, and has been
	      placed in the key structure.

       TERMKEY_RES_AGAIN
	      a partial keypress event was found in the buffer,	 but  it  does
	      not  yet	contain	 all the bytes required. An indication of what
	      termkey_getkey_force() would return has been placed in  the  key
	      structure.

       TERMKEY_RES_NONE
	      no bytes are waiting in the buffer.

       TERMKEY_RES_EOF
	       no bytes are ready and the input stream is now closed.

       TERMKEY_RES_ERROR
	      called with terminal IO stopped, due to termkey_stop(3). In this
	      case errno will be set to EINVAL.

       termkey_getkey_force() is similar  to  termkey_getkey()	but  will  not
       return  TERMKEY_RES_AGAIN if a partial match is found. Instead, it will
       force an interpretation of the bytes, even if this  means  interpreting
       the start of an Escape-prefixed multi-byte sequence as a literal Escape
       key followed by normal letters.

       Neither of these functions will block or perform any IO	operations  on
       the  underlying filehandle. To use the instance in an asynchronous pro‐
       gram, see termkey_advisereadable(3). For a blocking call	 suitable  for
       use  in	a  synchronous	program,  use  termkey_waitkey(3)  instead  of
       termkey_getkey(). For providing input without  a	 readable  filehandle,
       use termkey_push_bytes(3).

       Before returning, this function canonicalises the key structure accord‐
       ing to the rules given for termkey_canonicalise(3).

RETURN VALUE
       termkey_getkey() returns an enumeration of one of TERMKEY_RES_KEY, TEM‐
       RKEY_RES_AGAIN, TERMKEY_RES_NONE, TERMKEY_RES_EOF or TERMKEY_RES_ERROR.
       termkey_getkey_force()  returns	one   of   the	 above,	  except   for
       TERMKEY_RES_AGAIN.

EXAMPLE
       The  following  example	program prints details of every keypress until
       the user presses	 Ctrl-C.  It  demonstrates  how	 to  use  the  termkey
       instance	 in  a	typical poll(2)-driven asynchronous program, which may
       include mixed IO with other file handles.

	   // <poll.h> might need this for sigset_t
	   #define _XOPEN_SOURCE 600

	   #include <poll.h>
	   #include <stdio.h>

	   #include "termkey.h"

	   static void on_key(TermKey *tk, TermKeyKey *key)
	   {
	     char buffer[50];
	     termkey_strfkey(tk, buffer, sizeof buffer, key, TERMKEY_FORMAT_VIM);
	     printf("%s\n", buffer);
	   }

	   int main(int argc, char *argv[])
	   {
	     TERMKEY_CHECK_VERSION;

	     TermKey *tk = termkey_new(0, 0);

	     if(!tk) {
	       fprintf(stderr, "Cannot allocate termkey instance\n");
	       exit(1);
	     }

	     struct pollfd fd;

	     fd.fd = 0; /* the file descriptor we passed to termkey_new() */
	     fd.events = POLLIN;

	     TermKeyResult ret;
	     TermKeyKey key;

	     int running = 1;
	     int nextwait = -1;

	     while(running) {
	       if(poll(&fd, 1, nextwait) == 0) {
		 // Timed out
		 if(termkey_getkey_force(tk, &key) == TERMKEY_RES_KEY)
		   on_key(tk, &key);
	       }

	       if(fd.revents & (POLLIN|POLLHUP|POLLERR))
		 termkey_advisereadable(tk);

	       while((ret = termkey_getkey(tk, &key)) == TERMKEY_RES_KEY) {
		 on_key(tk, &key);

		 if(key.type == TERMKEY_TYPE_UNICODE &&
		    key.modifiers & TERMKEY_KEYMOD_CTRL &&
		    (key.code.codepoint == 'C' || key.code.codepoint == 'c'))
		   running = 0;
	       }

	       if(ret == TERMKEY_RES_AGAIN)
		 nextwait = termkey_get_waittime(tk);
	       else
		 nextwait = -1;
	     }

	     termkey_destroy(tk);
	   }

SEE ALSO
       termkey_advisereadable(3), termkey_waitkey(3), termkey_get_waittime(3),
       termkey(7)

							     TERMKEY_GETKEY(3)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net