summaryrefslogtreecommitdiff
path: root/src/term.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-08-11 04:09:28 +0000
committerRichard M. Stallman <rms@gnu.org>1993-08-11 04:09:28 +0000
commitbba58f2845d3ced010b50cd5ed51c0fb533d6fcb (patch)
tree8e9b54fef9bca0e1d4154374ab40c00d2e9f7004 /src/term.c
parentfa4cb24505c6eeea194b4659d9f6ee95ac58f737 (diff)
downloademacs-bba58f2845d3ced010b50cd5ed51c0fb533d6fcb.tar.gz
(term_get_fkeys_define_1, term_get_fkeys_define): New functions.
(term_get_fkeys): Use them.
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/term.c b/src/term.c
index bf6098ee6af..6388f844dd1 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1229,6 +1229,30 @@ static struct fkey_table keys[] = {
"k9", "f9",
};
+/* These subroutines are used to call
+ Fdefine_key inside of a condition-case. */
+static Lisp_Object term_get_fkeys_data;
+
+extern Lisp_Object cmd_error ();
+
+static Lisp_Object
+term_get_fkeys_define_1 ()
+{
+ Fdefine_key (Vfunction_key_map, Fcar (term_get_fkeys_data),
+ Fcdr (term_get_fkeys_data));
+ return Qnil;
+}
+
+/* Define KEY as DEFINITION in function-key-map, catching errors. */
+
+static void
+term_get_fkeys_define (key, definition)
+ Lisp_Object key, definition;
+{
+ term_get_fkeys_data = Fcons (key, definition);
+ internal_condition_case (term_get_fkeys_define_1, Qerror, cmd_error);
+}
+
/* Find the escape codes sent by the function keys for Vfunction_key_map.
This function scans the termcap function key sequence entries, and
adds entries to Vfunction_key_map for each function key it finds. */
@@ -1248,9 +1272,9 @@ term_get_fkeys (address)
{
char *sequence = tgetstr (keys[i].cap, address);
if (sequence)
- Fdefine_key (Vfunction_key_map,
- build_string (sequence),
- Fmake_vector (make_number (1), intern (keys[i].name)));
+ term_get_fkeys_define (build_string (sequence),
+ Fmake_vector (make_number (1),
+ intern (keys[i].name)));
}
/* The uses of the "k0" capability are inconsistent; sometimes it
@@ -1265,16 +1289,14 @@ term_get_fkeys (address)
if (k_semi)
{
- Fdefine_key (Vfunction_key_map,
- build_string (k_semi),
- Fmake_vector (make_number (1), intern ("f10")));
+ term_get_fkeys_define (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)));
+ term_get_fkeys_define (build_string (k0),
+ Fmake_vector (make_number (1), intern (k0_name)));
}
/* Set up cookies for numbered function keys above f10. */
@@ -1295,10 +1317,10 @@ term_get_fkeys (address)
char *sequence = tgetstr (fcap, address);
if (sequence)
{
- (void) sprintf (fkey, "f%d", i);
- Fdefine_key (Vfunction_key_map,
- build_string (sequence),
- Fmake_vector (make_number (1), intern (fkey)));
+ sprintf (fkey, "f%d", i);
+ term_get_fkeys_define (build_string (sequence),
+ Fmake_vector (make_number (1),
+ intern (fkey)));
}
}
}
@@ -1313,9 +1335,9 @@ term_get_fkeys (address)
{ \
char *sequence = tgetstr (cap2, address); \
if (sequence) \
- Fdefine_key (Vfunction_key_map, \
- build_string (sequence), \
- Fmake_vector (make_number (1), intern (sym))); \
+ term_get_fkeys_define (build_string (sequence), \
+ Fmake_vector (make_number (1), \
+ intern (sym))); \
}
/* if there's no key_next keycap, map key_npage to `next' keysym */