aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1993-08-11 04:09:28 +0000
committerRichard M. Stallman1993-08-11 04:09:28 +0000
commit465db27b59c3ab6ff48ca5274d02a26712aafe94 (patch)
tree7ea61ff764008ac14c6c47751552f4152047eff8 /src
parent0d33a6902ca630ffe42243b416ec3629a07b4cac (diff)
downloademacs-465db27b59c3ab6ff48ca5274d02a26712aafe94.tar.gz
emacs-465db27b59c3ab6ff48ca5274d02a26712aafe94.zip
(term_get_fkeys_define_1, term_get_fkeys_define): New functions.
(term_get_fkeys): Use them.
Diffstat (limited to 'src')
-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[] = {
1229 "k9", "f9", 1229 "k9", "f9",
1230 }; 1230 };
1231 1231
1232/* These subroutines are used to call
1233 Fdefine_key inside of a condition-case. */
1234static Lisp_Object term_get_fkeys_data;
1235
1236extern Lisp_Object cmd_error ();
1237
1238static Lisp_Object
1239term_get_fkeys_define_1 ()
1240{
1241 Fdefine_key (Vfunction_key_map, Fcar (term_get_fkeys_data),
1242 Fcdr (term_get_fkeys_data));
1243 return Qnil;
1244}
1245
1246/* Define KEY as DEFINITION in function-key-map, catching errors. */
1247
1248static void
1249term_get_fkeys_define (key, definition)
1250 Lisp_Object key, definition;
1251{
1252 term_get_fkeys_data = Fcons (key, definition);
1253 internal_condition_case (term_get_fkeys_define_1, Qerror, cmd_error);
1254}
1255
1232/* Find the escape codes sent by the function keys for Vfunction_key_map. 1256/* Find the escape codes sent by the function keys for Vfunction_key_map.
1233 This function scans the termcap function key sequence entries, and 1257 This function scans the termcap function key sequence entries, and
1234 adds entries to Vfunction_key_map for each function key it finds. */ 1258 adds entries to Vfunction_key_map for each function key it finds. */
@@ -1248,9 +1272,9 @@ term_get_fkeys (address)
1248 { 1272 {
1249 char *sequence = tgetstr (keys[i].cap, address); 1273 char *sequence = tgetstr (keys[i].cap, address);
1250 if (sequence) 1274 if (sequence)
1251 Fdefine_key (Vfunction_key_map, 1275 term_get_fkeys_define (build_string (sequence),
1252 build_string (sequence), 1276 Fmake_vector (make_number (1),
1253 Fmake_vector (make_number (1), intern (keys[i].name))); 1277 intern (keys[i].name)));
1254 } 1278 }
1255 1279
1256 /* The uses of the "k0" capability are inconsistent; sometimes it 1280 /* The uses of the "k0" capability are inconsistent; sometimes it
@@ -1265,16 +1289,14 @@ term_get_fkeys (address)
1265 1289
1266 if (k_semi) 1290 if (k_semi)
1267 { 1291 {
1268 Fdefine_key (Vfunction_key_map, 1292 term_get_fkeys_define (build_string (k_semi),
1269 build_string (k_semi), 1293 Fmake_vector (make_number (1), intern ("f10")));
1270 Fmake_vector (make_number (1), intern ("f10")));
1271 k0_name = "f0"; 1294 k0_name = "f0";
1272 } 1295 }
1273 1296
1274 if (k0) 1297 if (k0)
1275 Fdefine_key (Vfunction_key_map, 1298 term_get_fkeys_define (build_string (k0),
1276 build_string (k0), 1299 Fmake_vector (make_number (1), intern (k0_name)));
1277 Fmake_vector (make_number (1), intern (k0_name)));
1278 } 1300 }
1279 1301
1280 /* Set up cookies for numbered function keys above f10. */ 1302 /* Set up cookies for numbered function keys above f10. */
@@ -1295,10 +1317,10 @@ term_get_fkeys (address)
1295 char *sequence = tgetstr (fcap, address); 1317 char *sequence = tgetstr (fcap, address);
1296 if (sequence) 1318 if (sequence)
1297 { 1319 {
1298 (void) sprintf (fkey, "f%d", i); 1320 sprintf (fkey, "f%d", i);
1299 Fdefine_key (Vfunction_key_map, 1321 term_get_fkeys_define (build_string (sequence),
1300 build_string (sequence), 1322 Fmake_vector (make_number (1),
1301 Fmake_vector (make_number (1), intern (fkey))); 1323 intern (fkey)));
1302 } 1324 }
1303 } 1325 }
1304 } 1326 }
@@ -1313,9 +1335,9 @@ term_get_fkeys (address)
1313 { \ 1335 { \
1314 char *sequence = tgetstr (cap2, address); \ 1336 char *sequence = tgetstr (cap2, address); \
1315 if (sequence) \ 1337 if (sequence) \
1316 Fdefine_key (Vfunction_key_map, \ 1338 term_get_fkeys_define (build_string (sequence), \
1317 build_string (sequence), \ 1339 Fmake_vector (make_number (1), \
1318 Fmake_vector (make_number (1), intern (sym))); \ 1340 intern (sym))); \
1319 } 1341 }
1320 1342
1321 /* if there's no key_next keycap, map key_npage to `next' keysym */ 1343 /* if there's no key_next keycap, map key_npage to `next' keysym */