changeset 1015:58c373be762c

* term.c (term_get_fkeys): Some systems define `static' to be the empty string, which means that you can't have constant initialized arrays inside a function. So move the `keys' array outside of the function. * term.c (keys): Include definitions for "K2" (the center key on an IBM keypad), "F1" (F11), and "F2" (F12). Handle "k0" and "k;" specially; see the code for details. * term.c (clear_end_of_line): Remember that on some systems, "static" gets defined to be the null string, so we can't declare an array to be static and then initialize it. Since the array in question (buf) is only one element long, just make it a scalar rather than an array; it can then be initialized, even if it's not static.
author Jim Blandy <jimb@redhat.com>
date Wed, 19 Aug 1992 06:38:40 +0000
parents 6e25f9b75841
children 817b0ce337d7
files src/term.c
diffstat 1 files changed, 65 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/src/term.c	Wed Aug 19 06:37:58 1992 +0000
+++ b/src/term.c	Wed Aug 19 06:38:40 1992 +0000
@@ -562,10 +562,10 @@
 clear_end_of_line (first_unused_hpos)
      int first_unused_hpos;
 {
-  static GLYPH buf[1] = {SPACEGLYPH};
+  static GLYPH buf = SPACEGLYPH;
   if (FRAME_TERMCAP_P (selected_frame)
       && TN_standout_width == 0 && curX == 0 && chars_wasted[curY] != 0)
-    write_glyphs (buf, 1);
+    write_glyphs (&buf, 1);
   clear_end_of_line_raw (first_unused_hpos);
 }
 
@@ -1064,46 +1064,50 @@
    This function scans the termcap function key sequence entries, and 
    adds entries to Vfunction_key_map for each function key it finds.  */
 
+struct fkey_table {
+  char *cap, *name;
+};
+
+static struct fkey_table keys[] = {
+  "kl", "left",
+  "kr", "right",
+  "ku", "up",
+  "kd", "down",
+  "K2", "center",
+  "k1", "f1",
+  "k2", "f2",
+  "k3", "f3",
+  "k4", "f4",
+  "k5", "f5",
+  "k6", "f6",
+  "k7", "f7",
+  "k8", "f8",
+  "k9", "f9",
+  "F1", "f11",
+  "F2", "f12",
+  "kh", "home",
+  "kH", "home-down",
+  "ka", "clear-tabs",
+  "kt", "clear-tab",
+  "kT", "set-tab",
+  "kC", "clear",
+  "kL", "deleteline",
+  "kM", "exit-insert",
+  "kE", "clear-eol",
+  "kS", "clear-eos",
+  "kI", "insert",
+  "kA", "insertline",
+  "kN", "next",
+  "kP", "prior",
+  "kF", "scroll-forward",
+  "kR", "scroll-reverse"
+  };
+
 void
 term_get_fkeys (address)
      char **address;
 {
   extern char *tgetstr ();
-  struct fkey_table {
-    char *cap, *name;
-  };
-  static struct fkey_table keys[] = {
-    "kl", "left",
-    "kr", "right",
-    "ku", "up",
-    "kd", "down",
-    "kh", "home",
-    "k1", "f1",
-    "k2", "f2",
-    "k3", "f3",
-    "k4", "f4",
-    "k5", "f5",
-    "k6", "f6",
-    "k7", "f7",
-    "k8", "f8",
-    "k9", "f9",
-    "k0", "f10",
-    "kH", "home-down",
-    "ka", "clear-tabs",
-    "kt", "clear-tab",
-    "kT", "set-tab",
-    "kC", "clear",
-    "kL", "deleteline",
-    "kM", "exit-insert",
-    "kE", "clear-eol",
-    "kS", "clear-eos",
-    "kI", "insert",
-    "kA", "insertline",
-    "kN", "next",
-    "kP", "prior",
-    "kF", "scroll-forward",
-    "kR", "scroll-reverse"
-  };
   int i;
 
   for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
@@ -1114,6 +1118,30 @@
 		     build_string (sequence),
 		     Fmake_vector (make_number (1), intern (keys[i].name)));
     }
+
+  /* The uses of the "k0" capability are inconsistent; sometimes it
+     describes F10, whereas othertimes it describes F0 and "k;" describes F10.
+     We will attempt to politely accomodate both systems by testing for
+     "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10.
+     */
+  {
+    char *k_semi  = tgetstr ("k;", address);
+    char *k0      = tgetstr ("k0", address);
+    char *k0_name = "f10";
+
+    if (k_semi)
+      {
+	Fdefine_key (Vfunction_key_map,
+		     build_string (k_semi),
+		     Fmake_vector (make_number (1), intern ("f10")));
+	k0_name = "f0";
+      }
+
+    if (k0)
+      Fdefine_key (Vfunction_key_map,
+		   build_string (k0),
+		   Fmake_vector (make_number (1), intern (k0_name)));
+  }
 }