Commit Graph

270 Commits

Author SHA1 Message Date
Christoph Lohmann
ab40392d08 Well, I was confused. Damn state exams. Instead of discussing this shit I
should really learn opthalmology instead. :O
2012-10-09 19:40:37 +02:00
Christoph Lohmann
fa952e1901 If there is really someone without SHELL set, help him/her. 2012-10-09 19:33:26 +02:00
Roberto E. Vargas Caballero
5967a7c0db Add DEC alignment test
This sequence was used by DEC personal in to for verifying the screen adjust
of terminals. It is the unique test sequence implemented by all the
emulators, and I think it is because they want be conforms with vttest which
uses this sequence in some tests.
---
 st.c |   31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)
2012-10-07 11:06:17 +02:00
Roberto E. Vargas Caballero
d627351429 Avoid initialization of vt100_0 in each call to tsetchar
If vt100_0 is a automatic variable then it is initializated in each call to
tsetchar, but if the variable is static it is initializated only in compile
time.
---
 st.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
2012-10-07 11:06:08 +02:00
Roberto E. Vargas Caballero
976b34d1fc Fix Identification sequences
Do not send NUL character in the identification (use (sizeof(VT102ID) - 1),
and finish  the sequence once you execute it.
---
 st.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
2012-10-07 11:06:00 +02:00
Roberto E. Vargas Caballero
f0ee36878c Add DA and DECID sequences
These sequences are used by the host in order to can detect which kind of
terminal is connected. St will answer like a vt102 terminal with this patch.
---
 st.c |    9 +++++++++
 1 file changed, 9 insertions(+)
2012-10-06 21:19:56 +02:00
Christoph Lohmann
a90662fdcf Fixing a typo. 2012-10-06 21:02:25 +02:00
Christoph Lohmann
852db9e9b0 Fixing a off-by-one error in the new border clearing code. 2012-10-06 20:52:22 +02:00
Roberto E. Vargas Caballero
a9092bc48b Print control codes only in graphic mode
Non handled codes must be ignored, except in graphic mode. Also STR
sequences have higher priority than control codes, so they must be handled
before of them.
---
 st.c |  160 ++++++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 87 insertions(+), 73 deletions(-)
2012-10-06 19:15:30 +02:00
Roberto E. Vargas Caballero
506b8ea0c6 Add SI and SO control codes
SI and SO allows change the G0 and G1 selection. This implementation is not
full vt100 compatible, but it is complatible with linux virtual terminal
implementation. For full vt100 compatibility we need remake a lot of stuff
relate to the different charmaps.
---
 st.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
2012-10-06 19:13:36 +02:00
Roberto E. Vargas Caballero
3fce3392ac Add SUB and CAN control codes
These control codes reset any escape sequence already initialised.
---
 st.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
2012-10-06 19:13:08 +02:00
Roberto E. Vargas Caballero
70aeaf7f2f Add documentation to control codes
Add the documentation from the vt100 manual programmer:

Control 	Octal      Action Taken
Character	Code
-------------------------------------------
NUL		000	Ignored on input (not stored in input buffer;
			see full duplex protocol).
ENQ		005	Transmit answerback message.
BEL		007	Sound bell tone from keyboard.
BS		010	Move the cursor to the left one character position,
			unless it is at the left margin,
			in which case no action occurs.
HT		011	Move the cursor to the next tab stop,
			or to the right margin if no further tab stops
			are present on the line.
LF		012	This code causes a line feed or
			a new line operation. (See new line mode).
VT		013	Interpreted as LF.
FF		014	Interpreted as LF.
CR		015	Move cursor to the left margin on the current line.
SO		016	Invoke G1 character set, as designated by SCS
			control sequence.
SI		017	Select G0 character set, as selected by ESC ( sequence.
XON		021	Causes terminal to resume transmission.
XOFF		023	Causes terminal to stop transmitted all codes
			except XOFF and XON.
CAN		030	If sent during a control sequence, the sequence is
			immediately terminated and not executed. It also causes
			the error character to be displayed.
SUB		032	Interpreted as CAN.
ESC		033	Invokes a control sequence.
DEL		177	Ignored on input (not stored in input buffer).
--------------------------------------------
---
 st.c |   28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)
2012-10-06 19:12:46 +02:00
Christoph Lohmann
ec9fe428b8 Forgot to remove the xclearborders() definition from the last commit. 2012-10-06 13:45:14 +02:00
Christoph Lohmann
82437818c5 Removing the xclearborders() hack. St now cleans up the parts of the border,
if something needs to be drawn close to it.
2012-10-06 13:43:01 +02:00
Christoph Lohmann
b86451bf74 The style inquisition was here. Yes, making it a unified style. The last
infidels will be squashed too!
2012-10-06 09:58:45 +02:00
Christoph Lohmann
b9f239abe6 Adding the patch of David Dufberg Töttrup to implement WM_DELETE_WINDOW. Thank you! 2012-10-05 22:59:08 +02:00
Christoph Lohmann
2549840ed7 Fixing the brightening on bold. For the 256 colors and greyscale I assumed a
reasonable solution.
2012-10-05 22:51:08 +02:00
Christoph Lohmann
c1ef12591b When the drawing behaviour was changed underline was not corrected.
Thanks to Peter A. Shevtsov!
2012-10-05 09:38:10 +02:00
Christoph Lohmann
639104946a This adds the fontcache dependency to try something out. Additionally the
invert mode now works as expected. In the config.def.h autohint is set to
false, so the fonts are drawn correctly, without any overlapping.
2012-10-04 22:59:45 +02:00
Christoph Lohmann
5ef7457266 Thanks to c00kiemon5ter. Not changing bold to bright colors seems to be the
right choice.
2012-10-02 12:48:55 +02:00
Christoph Lohmann
a07db5787a This changes -f to be the parameter for the font. Now -f is -o.
The parameters were reordered according to the alphabet too.
2012-09-30 20:23:10 +02:00
Christoph Lohmann
4497d2125c Remove the cruft of the user to have to define the different font styles. 2012-09-30 20:10:58 +02:00
Christoph Lohmann
e496602135 We need all the colors to be available, so die() on some not available.
This is a new opportunity to see if X11 somewhen handled colors in a strange
way.
2012-09-29 11:23:34 +02:00
Christoph Lohmann
15cd4ff84a All xcolors are not Xft colors and the clearing of the borders has been
optimized. There is a speedup when resizing windows.
2012-09-29 11:17:16 +02:00
Christoph Lohmann
5e5c3b8cf3 Vt escape sequences allow escape sequences in escape sequences and escape
sequences, so we have to support escape sequences in escape sequences that
escape sequences in escape sequences – setting a title won't notify you
anymore.
2012-09-27 19:28:44 +02:00
Roberto E. Vargas Caballero
bcbf5156be Allow control characters inside escape sequences
Taken from vt100 manual programmer:

	Control characters (codes \0 to \37 inclusive) are specifically
	excluded from the control sequence syntax, but may be embedded
	within a control sequence. Embedded control characters are executed
	as soon as they are encountered by the VT100. The processing of the
	control sequence then continues with the next character received.
---
 st.c |   68 +++++++++++++++++++++++++++++++++---------------------------------
 1 file changed, 34 insertions(+), 34 deletions(-)
2012-09-26 20:55:18 +02:00
Roberto E. Vargas Caballero
18e2def342 Ignore all control characters not handled
Taken from vt100 programmer manual:

	Control characters have values of \000 - \037, and \177. The control
	characters recognized by the VT100 are shown in Table 3-10. All
	other control codes cause no action to be taken.

We have to take attention when we are using alternate charset, because in
this cases they are not used as control characters.
---
 st.c |   20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
2012-09-26 20:53:46 +02:00
Christoph Lohmann
23d1b03d4e Implementing line drawing right. 2012-09-26 20:21:08 +02:00
Christoph Lohmann
d8cf33c207 A reset should reset the line drawing too. 2012-09-25 21:39:25 +02:00
Christoph Lohmann
efe3937183 Enabling enacs and adding compatibility to xterm and urxvt for alternative
charsets.
2012-09-25 21:17:43 +02:00
Roberto E. Vargas Caballero
2ca5d9463d Fix bug in tputc writing to io file
If -f options is enabled then tputc() writes all the data to a file. Actual
code assumes that all the strings in 'c' parameters have always 1 byte
length, but this is not always true, because due to utf-8 encoding some
characters can have a diferent length. So it is necessary pass string length
to tputc in order it can call to write() correctly.
---
 st.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
2012-09-25 21:04:35 +02:00
Christoph Lohmann
d68253ec75 The xinit() call needs to be behind all the tty init, otherwise all the
allocated structures are wrong. The xclear() is now done on purpose. Please
keep X11 calls out of the way of pure tty-related calls.
2012-09-24 11:04:26 +02:00
Roberto E. Vargas Caballero
656c43b4c7 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(-)
2012-09-24 10:29:37 +02:00
Roberto E. Vargas Caballero
448a25dbc8 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(-)
2012-09-24 10:28:35 +02:00
Roberto E. Vargas Caballero
4dfbf487bf 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(-)
2012-09-24 10:28:05 +02:00
Roberto E. Vargas Caballero
e2fbd25f51 Remove unused parameters in ttyresize
---
 st.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
2012-09-24 10:27:22 +02:00
Roberto E. Vargas Caballero
57e9f03059 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(-)
2012-09-24 10:26:50 +02:00
Christoph Lohmann
61ffa628ff Merging xft and current st heads. 2012-09-24 10:24:36 +02:00
Christoph Lohmann
a0b0b8f694 Initial Xft support for st. More to follow. 2012-09-24 10:20:45 +02:00
Aurélien Aptel
eb837afafa use typedef'd unsigned type and regular bool type. 2012-09-19 16:03:16 +02:00
Christoph Lohmann
8b0167b596 Fixing the redrawing patch of k0ga, so it's using xclear() in redraw() too. 2012-09-17 22:44:27 +02:00
Roberto E. Vargas Caballero
5e32f3c2f4 Clean windows display after resizing
Some times the size after a resizing is not an exact multiply of a number of
characters, so redrawn the screen using the lines and columns of the neww
size can cause that some old graphics keep in the screen. Solution is clean
all the windows with the background color.
---
 st.c |    3 +++
 1 file changed, 3 insertions(+)
2012-09-17 22:13:17 +02:00
Roberto E. Vargas Caballero
40be64cff8 Copy non set positions as spaces
st selection don't insert in the selection position whose value is not
set. This is correct for the positions in the end of the line, but cause
some problems in the beginning. For example echo -e 'a\tb' will print in the
screen:

a	b

but after selecting and copying in some place you get:

ab

because positions from 1 to 7 don't have any value. This patch deals all
positions without value as blank (even at the end of the line).
---
 st.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
2012-09-17 22:13:09 +02:00
Roberto E. Vargas Caballero
63cab32d05 Add newline in error messages
---
 st.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
2012-09-17 22:11:28 +02:00
Roberto E. Vargas Caballero
cf7edb2641 Add xcalloc wrapper
malloc and realloc are called through xmalloc and xrealloc, so calloc should
be called through xcalloc.
---
 st.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
2012-09-17 22:11:20 +02:00
Christoph Lohmann
8a9c8b7502 Applying a shortening proposal for the run loop of k0ga. 2012-09-16 20:43:51 +02:00
Roberto E. Vargas Caballero
7d54d35a95 Remove call to draw in resize
In previous commits draw was removed from all the X events, but I forgot do
it in resize.
---
 st.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
2012-09-16 14:02:35 +02:00
Christoph Lohmann
d41d383aad Preliminary solution to the stuttering problem. 2012-09-16 13:22:23 +02:00
Roberto E. Vargas Caballero
6bf6ef46f2 Fix selection bug
After the commit named "Remove timeout in the main loop", selection is not
working in the proper way. After selecting something, press mouse button in
a line outside of selection causes an incorrect highlight. This patch fix
the problem forcing a draw after the press event, but this is only a fast
hack. Real solution means rewriting selection code.
---
 st.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
2012-09-16 10:49:12 +02:00
Roberto E. Vargas Caballero
c624bb5703 Render only once in each main loop iteration
draw() runs over all lines of the screen and renders only the dirty lines,
this avoids render lines which are not modified since last draw() call. In
this moment the main loop is something like:

     - Wait something to read from file descriptors
     - Read from pseudo tty
     - Call draw() for rending
     - Read X events

This cause the problem that all the X events that have to update the screen
have to call draw() (because draw() is called before of X events handling),
so you can have multiples renderings in only one iteration, that will waste
a lot of resources.

This patch change the main loop to:

     - Wait something to read from file descriptors
     - Read from pseudo tty
     - Read X events
     - Call draw() for rending

So X events don't have to worry about rendering, because draw() is called
after them.

The only place where draw is called outside of the main loop is in redraw(),
but it is necessary for getting a good tput flash.
---
 st.c |   29 ++++++-----------------------
 1 file changed, 6 insertions(+), 23 deletions(-)
2012-09-16 10:48:38 +02:00