JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix LNM sequence
[st.git] / st.c
diff --git a/st.c b/st.c
index 83edbb8..d432ee7 100644 (file)
--- a/st.c
+++ b/st.c
@@ -110,7 +110,8 @@ enum term_mode {
        MODE_MOUSEBTN    = 32,
        MODE_MOUSEMOTION = 64,
        MODE_MOUSE       = 32|64,
-       MODE_REVERSE     = 128
+       MODE_REVERSE     = 128,
+       MODE_KBDLOCK     = 256
 };
 
 enum escape_state {
@@ -1291,9 +1292,6 @@ tsetmode(bool priv, bool set, int *args, int narg) {
                        case 7:
                                MODBIT(term.mode, set, MODE_WRAP);
                                break;
-                       case 20:
-                               MODBIT(term.mode, set, MODE_CRLF);
-                               break;
                        case 12: /* att610 -- Start blinking cursor (IGNORED) */
                                break;
                        case 25:
@@ -1328,9 +1326,15 @@ tsetmode(bool priv, bool set, int *args, int narg) {
                        }
                } else {
                        switch(*args) {
+                       case 2:
+                               MODBIT(term.mode, set, MODE_KBDLOCK);
+                               break;
                        case 4:
                                MODBIT(term.mode, set, MODE_INSERT);
                                break;
+                       case 20:
+                               MODBIT(term.mode, set, MODE_CRLF);
+                               break;
                        default:
                                fprintf(stderr,
                                        "erresc: unknown set/reset mode %d\n",
@@ -2257,6 +2261,8 @@ kpress(XEvent *ev) {
        int shift;
        Status status;
 
+       if (IS_SET(MODE_KBDLOCK))
+               return;
        meta = e->state & Mod1Mask;
        shift = e->state & ShiftMask;
        len = XmbLookupString(xw.xic, e, buf, sizeof(buf), &ksym, &status);