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

Reply via email to