summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1992-02-04 02:27:43 +0000
committerJim Blandy <jimb@redhat.com>1992-02-04 02:27:43 +0000
commit5c2c7893d921c760a71ad903e34c599493dd0302 (patch)
tree79f593ee376dd2d842551b6455dcd2ca821423cd
parent8f3e016790ee2b8e9e5ebdf1616bea692d3c308b (diff)
downloademacs-5c2c7893d921c760a71ad903e34c599493dd0302.tar.gz
*** empty log message ***
-rw-r--r--src/term.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/term.c b/src/term.c
index 1f8d463bfc8..c23723217e5 100644
--- a/src/term.c
+++ b/src/term.c
@@ -29,6 +29,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "screen.h"
#include "disptab.h"
#include "termhooks.h"
+#include "keyboard.h"
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -1062,6 +1063,63 @@ calculate_costs (screen)
cmcostinit (); /* set up cursor motion costs */
}
+/* 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. */
+
+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++)
+ {
+ 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_init (terminal_type)
char *terminal_type;
{
@@ -1165,6 +1223,8 @@ term_init (terminal_type)
TF_xs = tgetflag ("xs");
TF_teleray = tgetflag ("xt");
+ term_get_fkeys (address);
+
/* Get screen size from system, or else from termcap. */
get_screen_size (&SCREEN_WIDTH (selected_screen),
&SCREEN_HEIGHT (selected_screen));