Author: bde
Date: Fri Feb  1 16:07:49 2019
New Revision: 343663
URL: https://svnweb.freebsd.org/changeset/base/343663

Log:
  Fix function keys for syscons in cons25 mode (vidcontrol -T cons25).
  
  kbd(4) (but only documented in atkbd(4)) maintains a table of strings
  for 96 function keys.  Using teken broke this 9+ years ago for the
  most usable first 12 function keys and for 10 cursor keys, by supplying
  its own non-programmable strings so that the keyboard driver's strings
  are not used.
  
  Fix this by supplying NULL in the teken layer for syscons in cons25 mode
  so that the the strings are found in the kbd(4) layer.
  
  vt needs more changes to use kbd(4)'s tables.  Teken's cons25 table is
  still needed to supply nonempty strings for vt in cons25 mode.
  
  Keep using teken's xterm tables for both syscons and vt in xterm mode.
  Function keys should at least default to xterm values in xterm mode,
  and kbd(4) doesn't support this.
  
  teken_set_cons25() sets a sticky flag to ask for the fix, and space is
  reserved for another new flag.  vt should set this flag when it uses
  kbd(4)'s tables.
  
  PR:           226553 (for vt)

Modified:
  head/sys/teken/teken.c

Modified: head/sys/teken/teken.c
==============================================================================
--- head/sys/teken/teken.c      Fri Feb  1 15:38:20 2019        (r343662)
+++ head/sys/teken/teken.c      Fri Feb  1 16:07:49 2019        (r343663)
@@ -58,6 +58,7 @@
 #define        TS_CONS25       0x0040  /* cons25 emulation. */
 #define        TS_INSTRING     0x0080  /* Inside string. */
 #define        TS_CURSORKEYS   0x0100  /* Cursor keys mode. */
+#define        TS_CONS25KEYS   0x0400  /* Fuller cons25 emul (fix function 
keys). */
 
 /* Character that blanks a cell. */
 #define        BLANK   ' '
@@ -411,7 +412,7 @@ void
 teken_set_cons25(teken_t *t)
 {
 
-       t->t_stateflags |= TS_CONS25;
+       t->t_stateflags |= TS_CONS25 | TS_CONS25KEYS;
 }
 
 /*
@@ -722,6 +723,9 @@ teken_get_sequence(const teken_t *t, unsigned int k)
 {
 
        /* Cons25 mode. */
+       if ((t->t_stateflags & (TS_CONS25 | TS_CONS25KEYS)) ==
+           (TS_CONS25 | TS_CONS25KEYS))
+               return (NULL);  /* Don't override good kbd(4) strings. */
        if (t->t_stateflags & TS_CONS25 &&
            k < sizeof special_strings_cons25 / sizeof(char *))
                return (special_strings_cons25[k]);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to