summaryrefslogtreecommitdiff
path: root/src/term.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1992-08-19 06:38:40 +0000
committerJim Blandy <jimb@redhat.com>1992-08-19 06:38:40 +0000
commita796ac82a396d99bcb77f00736328a84dce83768 (patch)
tree36a07269eea1adee5377716a443f4e45a5a3b2a1 /src/term.c
parent345677047df477bf523ff915ff91249031c180d1 (diff)
downloademacs-a796ac82a396d99bcb77f00736328a84dce83768.tar.gz
* 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.
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c102
1 files changed, 65 insertions, 37 deletions
diff --git a/src/term.c b/src/term.c
index 83d2f118a6e..a5678f3fb7e 100644
--- a/src/term.c
+++ b/src/term.c
@@ -562,10 +562,10 @@ clear_frame ()
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 @@ calculate_costs (frame)
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 @@ term_get_fkeys (address)
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)));
+ }
}