Hi, A new serie of patches for st. Please send comments or suggestions.
Best regards.
>From 703b3cfc0cdb4998abca6815dd32699705a9f912 Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" <k...@shike2.com> Date: Wed, 19 Sep 2012 19:42:48 +0200 Subject: Clear X window in tsetreset() tsetreset() is called when it is necessary a full initialization of the terminal, so it also should clean the full X window and not only the terminal content. It is necessary change the order of the initialization in main(), and put xinit before of tnew(), because tnew() calls to tsetreset(), and this can cause a call to xreset() with incorrect values. --- st.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/st.c b/st.c index 35f6f16..7c05a6c 100644 --- a/st.c +++ b/st.c @@ -943,6 +943,7 @@ treset(void) { term.tabs[i] = 1; term.top = 0, term.bot = term.row - 1; term.mode = MODE_WRAP; + xclear(0, 0, xw.w, xw.h); tclearregion(0, 0, term.col-1, term.row-1); } @@ -2445,9 +2446,9 @@ main(int argc, char *argv[]) { run: setlocale(LC_CTYPE, ""); + xinit(); tnew(80, 24); ttynew(); - xinit(); selinit(); run(); return 0; -- 1.7.10.4
>From 4671ab2615b1bd5f6e77bd85555ec24765707b5f Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" <k...@shike2.com> Date: Wed, 19 Sep 2012 19:46:40 +0200 Subject: Remove unused parameters in ttyresize --- st.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/st.c b/st.c index 7c05a6c..43dbe32 100644 --- a/st.c +++ b/st.c @@ -283,7 +283,7 @@ static void tfulldirt(void); static void ttynew(void); static void ttyread(void); -static void ttyresize(int, int); +static void ttyresize(void); static void ttywrite(const char *, size_t); static void xdraws(char *, Glyph, int, int, int, int); @@ -890,7 +890,7 @@ ttywrite(const char *s, size_t n) { } void -ttyresize(int x, int y) { +ttyresize(void) { struct winsize w; w.ws_row = term.row; @@ -2339,7 +2339,7 @@ resize(XEvent *e) { xclear(0, 0, xw.w, xw.h); tresize(col, row); xresize(col, row); - ttyresize(col, row); + ttyresize(); } void -- 1.7.10.4
>From b42c8e533bdbb694b35ba3d0ef74863e51c8808e Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" <k...@shike2.com> Date: Wed, 19 Sep 2012 19:49:48 +0200 Subject: Add KAM sequence This sequence lock/unlock the keyboard ignoring all the key pressing events from X server. --- st.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/st.c b/st.c index 43dbe32..7e369c7 100644 --- a/st.c +++ b/st.c @@ -107,7 +107,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 { @@ -1319,6 +1320,9 @@ 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; @@ -2269,6 +2273,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); -- 1.7.10.4
>From fada4a6e23741745b85f8c60eacd8bbcf07d7483 Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" <k...@shike2.com> Date: Wed, 19 Sep 2012 20:00:56 +0200 Subject: Fix LNM sequence LNM sequence is a standard ANSI mode, not a DEC private mode. --- st.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/st.c b/st.c index 7e369c7..4dd7547 100644 --- a/st.c +++ b/st.c @@ -1283,9 +1283,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: @@ -1326,6 +1323,9 @@ tsetmode(bool priv, bool set, int *args, int narg) { 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", -- 1.7.10.4
>From e328b3e0cf5db77cb3e37500cbed097d5477e117 Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" <k...@shike2.com> Date: Wed, 19 Sep 2012 20:18:15 +0200 Subject: Add some documentetion to tsetmode The names of the terminal modes supported by vt102 are (taken from the VT220 programmer reference manual): Table 4-7 ANSI-Standardized Modes Name Mnemonic Parameter (Ps) Error (ignored) - 0 (3/0) Keyboard action KAM 2 (3/2) Insert/replace IRM 4 (3/4) Send/receive SRM 12 (3/1 3/2) Line feed/new line LNM 20 (3/2 3/0) Table 4-8 ANSI-Compatible DEC Private Modes Name Mnemonic Parameter (Ps) Error (ignored) - 0 (3/0) Cursor key DECCKM 1 (3/1) ANSI/VT52 DECANM 2 (3/2) Column DECCOLM 3 (3/3) Scroll DECSCLM 4 (3/4) Screen DECSCNM 5 (3/5) Origin DECOM 6 (3/6) Auto wrap DECAWM 7 (3/7) Auto repeat DECARM 8 (3/8) Printer form feed DECPFF 18 (3/1 3/8) Printer extent DECPEX 19 (3/1 3/9) Text cursor enable DECTCEM 25 (3/2 3/5) National replacement character sets DECNRCM 42 (3/4 3/2) This patch adds a comment for each one of these sequences. --- st.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/st.c b/st.c index 4dd7547..345e75e 100644 --- a/st.c +++ b/st.c @@ -1271,7 +1271,8 @@ tsetmode(bool priv, bool set, int *args, int narg) { for(lim = args + narg; args < lim; ++args) { if(priv) { switch(*args) { - case 1: + break; + case 1: /* DECCKM -- Cursor key */ MODBIT(term.mode, set, MODE_APPKEYPAD); break; case 5: /* DECSCNM -- Reverve video */ @@ -1280,9 +1281,14 @@ tsetmode(bool priv, bool set, int *args, int narg) { if(mode != term.mode) redraw(); break; - case 7: + case 6: /* XXX: DECOM -- Origin */ + break; + case 7: /* DECAWM -- Auto wrap */ MODBIT(term.mode, set, MODE_WRAP); break; + case 8: /* XXX: DECARM -- Auto repeat */ + break; + case 0: /* Error (IGNORED) */ case 12: /* att610 -- Start blinking cursor (IGNORED) */ break; case 25: @@ -1310,6 +1316,12 @@ tsetmode(bool priv, bool set, int *args, int narg) { tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD); break; default: + /* case 2: DECANM -- ANSI/VT52 (NOT SUPPOURTED) */ + /* case 3: DECCOLM -- Column (NOT SUPPORTED) */ + /* case 4: DECSCLM -- Scroll (NOT SUPPORTED) */ + /* case 18: DECPFF -- Printer feed (NOT SUPPORTED) */ + /* case 19: DECPEX -- Printer extent (NOT SUPPORTED) */ + /* case 42: DECNRCM -- National characters (NOT SUPPORTED) */ fprintf(stderr, "erresc: unknown private set/reset mode %d\n", *args); @@ -1317,13 +1329,17 @@ tsetmode(bool priv, bool set, int *args, int narg) { } } else { switch(*args) { - case 2: + case 0: /* Error (IGNORED) */ + break; + case 2: /* KAM -- keyboard action */ MODBIT(term.mode, set, MODE_KBDLOCK); break; - case 4: + case 4: /* IRM -- Insertion-replacement */ MODBIT(term.mode, set, MODE_INSERT); break; - case 20: + case 12: /* XXX: SRM -- Send/Receive */ + break; + case 20: /* LNM -- Linefeed/new line */ MODBIT(term.mode, set, MODE_CRLF); break; default: -- 1.7.10.4