diff options
| author | Richard M. Stallman | 1993-08-11 04:09:28 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-08-11 04:09:28 +0000 |
| commit | 465db27b59c3ab6ff48ca5274d02a26712aafe94 (patch) | |
| tree | 7ea61ff764008ac14c6c47751552f4152047eff8 /src | |
| parent | 0d33a6902ca630ffe42243b416ec3629a07b4cac (diff) | |
| download | emacs-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.c | 54 |
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. */ | ||
| 1234 | static Lisp_Object term_get_fkeys_data; | ||
| 1235 | |||
| 1236 | extern Lisp_Object cmd_error (); | ||
| 1237 | |||
| 1238 | static Lisp_Object | ||
| 1239 | term_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 | |||
| 1248 | static void | ||
| 1249 | term_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 */ |