Commit Graph

310 Commits

Author SHA1 Message Date
Boris Faure feb7495fbb termptyesc: DSR-CPR takes cursor restriction into account + test 2018-12-27 22:14:44 +01:00
Boris Faure 479d96e5dc termptyesc: act like xterm, do not report title/icon-name 2018-12-27 22:14:44 +01:00
Boris Faure e4d7cb93f2 termptyesc: act as xterm-337 2018-12-27 22:14:44 +01:00
Boris Faure d43110e0fd termptyesc: fix decera/decfra when bottom coordinate is too large 2018-12-27 22:14:44 +01:00
Boris Faure 713bb211fc termptyesc: fix VPR (now goes down instead of up) 2018-12-27 22:14:44 +01:00
Boris Faure 2db4a0e980 termptyesc: fix _clean_up_rect_coordinates() when cursor is restricted 2018-12-27 22:14:44 +01:00
Boris Faure f83e66a478 add tytest, a tool to add tests on escape sequence parsing 2018-12-27 22:14:44 +01:00
Boris Faure 8fb44906cc Revert "termpty: better handle ';' in escape sequences. Closes T7475"
This reverts commit 3f432544df.
2018-11-20 10:34:37 +01:00
Boris Faure 3f432544df termpty: better handle ';' in escape sequences. Closes T7475 2018-11-19 23:14:51 +01:00
Boris Faure df81992e90 termptyesc: fix bug found by tyfuzz 2018-10-17 22:54:24 +02:00
Boris Faure 4c54edaa52 termptyesc: handle some utf8 control codes 2018-10-14 11:12:04 +02:00
Boris Faure a11c591cce fix const on hyperlink urls 2018-10-13 22:05:48 +02:00
Boris Faure dc5c291bb9 highlight links on mouseover
+ related fixes
2018-10-13 19:21:19 +02:00
Boris Faure 05ee717fc0 compute refcount on hyper links 2018-10-13 10:52:50 +02:00
Boris Faure cc83e6b6f2 parse hyperlinks
Ref: T6329
2018-10-13 10:52:50 +02:00
Boris Faure 43ad696570 Merge branch 'terminology-1.2' 2018-10-12 20:19:06 +02:00
Boris Faure aa0f968860 termpty: soft reset should only reset attributes 2018-10-12 20:17:50 +02:00
Boris Faure bd0ca2c224 Merge branch 'terminology-1.2' 2018-09-29 17:24:47 +02:00
Boris Faure 9fc660ccb2 termptyesc: DECFRA/DECERA finishes by $x/$z
And not just x/z
2018-09-29 12:17:51 +02:00
Boris Faure 873656483b termpty: remove useless code. termio.h is already included 2018-09-26 08:13:47 +02:00
Boris Faure 7855175ea4 tyfuzz: make it compile again! 2018-05-02 16:19:55 +02:00
Boris Faure 0991479fcb try to optimize cell copy
On my stupid benchmark: having tyfuzz parse a 628MB text file (few times
war and peace concatenated) over 10 sessions, it went from 15.2MB/s to
16.8MB/s \o/ That's a 10.5% improvement!
2018-04-24 23:41:18 +02:00
Boris Faure 8308514420 termptyesc: document Media Copy 2018-03-19 23:54:00 +01:00
Boris Faure 4e1beca3f8 termptyesc: handle Horizontal Position Absolute (HPA) 2018-03-19 23:24:31 +01:00
Boris Faure 740e96da66 handle DECSCUSR (changing cursor shape). Closes T6338 2018-03-15 19:20:09 +01:00
Boris Faure 71c1b37675 termptyesc: sort CSI escape code by ascii value 2018-03-15 17:58:41 +01:00
Boris Faure dad9e0db58 remove compatibility #ifs to work with EFL < 1.16 2018-03-13 18:58:41 +01:00
Boris Faure 9e0243d9f1 support encircled escape code. Closes T6769 2018-03-13 09:15:32 +01:00
Boris Faure 0a0f3605e4 termptyesc: handle CMY/CMYK in SGR38/SGR48. Ref T746 2018-03-11 22:38:45 +01:00
Boris Faure c7c054bf0d termptyesc: handle transparent in SGR38/SGR48 2018-03-11 22:35:41 +01:00
Boris Faure 91ced6390f termptyesc: skip colorspace id if present. Ref T746 2018-03-11 20:31:56 +01:00
Boris Faure 0eb223f1b8 termptyesc: approximate true color. Ref T746 2018-03-11 19:51:11 +01:00
Carsten Haitzler 8cfa269b54 tysend - optimize sending - pretty much double the speed
yes. it's still inefficient because we transfer in ascii-ized nibbles
(4 bits) within a utf8 stream that becoems a 32bit per char unicode
buffer then back to utf8 before being "parsed" as a command etc. etc.
... it's not brilliant for transferring binary data. it's horrible
actually. but at least i've dropped overhead for some of the large
escape handling code.

this increases buffer size to 32k per block sent, and have the
terminal escape/buffer handling track if a zero byte exists in the
buffer at all to avoid hunting for one if none is there, making
terminology escape handling much more efficient for large escapes and
buffers.
2017-12-18 15:32:02 +09:00
Boris Faure 180799d2c5 support the REP escape code. Closes T6042 2017-09-18 22:01:42 +02:00
Boris Faure 6100f8f4e3 harden the code around manipulation of cursor_state 2017-09-08 23:06:19 +02:00
Boris Faure 496a5f178e have only one concept of title. Ref T5704 2017-08-28 21:41:21 +02:00
Boris Faure 7c358c3592 termptyesc: correctly handle going to start of line when there is a left margin 2017-08-22 20:51:20 +02:00
Boris Faure 6315ed2949 termpty: remove termstate.had_cr since it's unused 2017-08-21 23:46:28 +02:00
Boris Faure 2343efd6a1 termptyesc: clearing the screen (from ED2) should not reset bottom margin
Thanks to @ncim for the report.
2017-08-21 23:19:41 +02:00
Carsten Haitzler d80e60f25c fix buffer size - was 1 byte too short on stack
7 not 6 bytes. include nul byte.
2017-08-02 18:21:08 +09:00
Boris Faure 3a28d99649 termpty: fix inserting blank chars. Closes T5802 2017-07-27 23:27:23 +02:00
Boris Faure b35c7cd539 termptyesc: add missing break. CID1377552 2017-07-11 22:01:31 +02:00
Boris Faure 6f1a2dd452 constify 2017-07-06 21:37:56 +02:00
Boris Faure b0226726f8 termpty: correctly handle DECFRA wrt SGR 0 2017-06-26 23:36:23 +02:00
Boris Faure 7ac685b68c termpty: DECERA only changes codepoints 2017-06-26 21:58:59 +02:00
Boris Faure 956f1eaa13 termptyesc: restrict right/bottom rectangle coordinates 2017-06-07 20:40:17 +02:00
Boris Faure 400b675fc9 termptyesc: restrict CUP/HVP to right/bottom margins 2017-06-06 23:00:22 +02:00
Boris Faure cc5fcac03d termptyesc: fix handling of DECSLRM. Ref T5533 2017-06-05 23:53:07 +02:00
Boris Faure bbfa60120e termpty: handle DECERA 2017-06-05 21:04:29 +02:00
Boris Faure 9f72ea3a9d termptyesc: handle DECFRA 2017-06-05 20:47:41 +02:00
Boris Faure e117ff9153 termptyesc: correctly handle cursor wrt right/left margins 2017-06-05 16:49:36 +02:00
Boris Faure 7d497c08c6 termptyesc: extract handling CUP/HVP to one function 2017-06-05 01:04:24 +02:00
Jean Guyomarc'h ede4196eae termptyesc: fix invalid clamping on CSI X
Fixes a regression introduced by commit bd6c81e, which broke the ncurses
rendering of the Kernel menuconfig, making it impossible to be used.
2017-06-04 18:35:46 +02:00
Jean Guyomarc'h 20cbab21fc termptyesc: improve const-correctness of data 2017-06-04 18:35:22 +02:00
Boris Faure c2d731aced termptyesc: cleanup handling of DECSTBM 2017-06-04 00:33:32 +02:00
Boris Faure 7ab925dc76 termpty: very early support of Right/Left margins 2017-06-03 23:17:33 +02:00
Boris Faure 91ce6e8960 termptyesc: correctly handle missing arguments in CUP/HVP 2017-06-01 23:33:58 +02:00
Boris Faure e0f6867a88 termptyesc: _csi_arg_get() now correctly handles missing arguments
Only affects when multiple ones were expected
2017-06-01 23:29:55 +02:00
Boris Faure dbc75a0cc0 termptyesc: only do IL/DL when inside margins 2017-06-01 22:52:16 +02:00
Boris Faure 339b72174c termptyesc: CUP/HVP are impacted by DECOM 2017-06-01 22:51:34 +02:00
Boris Faure 8168b019c9 termptyesc: improve debug 2017-06-01 21:29:07 +02:00
Boris Faure 816f60369f termptyesc: correctly handle DECOM
also fix regions with only one argument
2017-05-31 00:39:02 +02:00
Boris Faure 6ce96da8c4 s/scroll_y1/top_margin/, s/scroll_y2/bottom_margin/ 2017-05-29 23:26:32 +02:00
Boris Faure a4a26de7c3 termptyesc: fix parsing size on xterm 50 command 2017-05-28 23:32:37 +02:00
Boris Faure 7b5a9b74bc termptyesc: use macro to restrict field value 2017-05-17 23:40:19 +02:00
Boris Faure 490a065fb1 termptyesc: _csi_arg_get() could be called with nothing to read
Could be the case when an error was already found while decoding the
stream
2017-05-17 23:38:28 +02:00
Boris Faure 0517be32f4 termptyesc: no logging when fuzzing 2017-05-17 23:33:06 +02:00
Boris Faure ce490ededc termptyesc: fix issue with tmux introduced by previous commit 2017-05-17 21:49:52 +02:00
Boris Faure 63d65ed4bb termptyesc: restrict values on scrolling regions 2017-05-16 22:48:18 +02:00
Boris Faure 17e5e1be55 termpyesc: only compute logging content if it's going to be printed 2017-05-15 23:54:25 +02:00
Boris Faure bd6c81ed39 termptyesc: restrict CSI values to avoid denial of service 2017-05-15 22:34:01 +02:00
Boris Faure 2b47545fac termptyesc: ensure colors are valid 2017-05-15 21:56:54 +02:00
Boris Faure 99f55b7bbc termptyesc: support DECSED3 to erase the backlog. Closes T3713 2016-12-20 22:43:37 +01:00
Boris Faure b9d5a55aa4 termptyesc: correctly handle tab forward. Closes T4992 2016-12-18 19:17:42 +01:00
Boris Faure f3dd6f62fb termpty: Tab markers are the same for each line. Ref 4992 2016-12-18 18:48:03 +01:00
Boris Faure 82d9ead6f2 termptyesc: handle correctly Character Tabulation Set (HTS). Ref T4992 2016-12-15 23:11:22 +01:00
Boris Faure 7c720058a1 termptyesc: add some debug 2016-12-15 23:11:22 +01:00
Boris Faure fae0d7ccee termptyesc: handle correctly Cursor Back Tab. Ref T4992 2016-12-15 23:11:22 +01:00
Boris Faure f4263d5098 termptyesc: add missing break (CID1365404) 2016-11-07 11:35:50 +01:00
Boris Faure 566c6d3680 termpty: correctly handle saving cursor + switching to/from altbuf
Closes T4718
2016-10-18 00:15:06 +02:00
Boris Faure 76f1bf4342 prefix EINA_UNUSED parameters with an underscore
and fix related issues
2016-10-05 22:00:22 +02:00
Boris Faure 0c466d767c Merge remote-tracking branch 'raboof/comment' 2016-05-21 22:39:14 +02:00
Boris Faure f33aa07b81 termptyesc: fix signedness comparison 2016-05-21 22:38:39 +02:00
Arnout Engelen 9a501470aa Fix comment for 't' escape sequence 2016-05-21 15:15:19 +02:00
Arnout Engelen ef8ee3fbda Allow font size to be updated via escape sequence 2016-05-21 14:53:17 +02:00
José Roberto de Souza ae7e96633a Allow user to set the title of the each tab 2016-03-04 11:34:24 -03:00
Boris Faure a0c249e6ca fix crash when running tyfuzz. not in terminology 2015-11-14 21:26:37 +01:00
Boris Faure 4913364a22 fix int overflow 2015-11-08 13:06:13 +01:00
Boris Faure 9c4167f74f always support double-width 2015-09-19 16:23:41 +02:00
Boris Faure 2b3eda694f always support italic 2015-09-19 16:18:17 +02:00
Boris Faure 3a7238978e turn error messages about unhandled escape codes into warnings 2015-09-08 21:59:11 +02:00
Boris Faure 144e0b5068 add option to disable terminology escape codes that could be considered
security issues by some

They are enabled by default.
2015-08-23 20:57:49 +02:00
Boris Faure 7fd86d8968 warn about window operations' escape codes being not supported 2015-08-17 23:18:50 +02:00
Boris Faure b80bedc7c2 do not report unsanitized input. See CVE-2003-0063 2015-08-17 23:18:49 +02:00
Boris Faure f40c63bbb6 typo 2015-08-03 20:52:54 +02:00
Jean-Philippe Andre 09b4fddf84 escapes: pretty-print some escapse and avoid ESC in debug logs
ERR("Hello '%c'", ESC) would result in "Hello '\033'" which means
the parent terminal (another terminology, maybe) would then try to
interpret ' as an escape char (ESC is \033 or 0x1b), and so it would
then forward more escapes to the parent.

Also, avoid printing BEL (and, well, beeping) when we are just
printing an error log.

I believe all those "Unhandled escape" logs should go to WRN or higher
log levels. Any thoughts, @billiob ?

See T2506 (for the test file)
2015-06-24 13:46:48 +09:00
Boris Faure 681bb029c2 ensure cursor coordinates are always valid, 2nd version 2015-06-03 23:02:31 +02:00
Carsten Haitzler 074eece5f7 Revert "ensure cursor coordinates are always valid"
This reverts commit 1f3f779258.

this breaks terminal scrolling entirely! can't scroll anymore at all
in standard shell. just try a simple: find / -print
2015-06-03 15:00:13 +09:00
Boris Faure 1f3f779258 ensure cursor coordinates are always valid 2015-06-02 22:48:50 +02:00
Boris Faure c86b35309c rename a bunch of _termpty_*() to termpty_*() 2015-06-02 21:47:06 +02:00
Boris Faure be62d87f89 separate "termstate" from cursor state and screens. Closes T725 2015-04-23 20:02:53 +02:00
Boris Faure b4ba773e17 fix CSI DECSET 1049. Should fix T725 2015-03-01 17:20:18 +01:00
Boris Faure f13d9ad111 fix compilation on solaris 2015-02-23 22:20:18 +01:00
Boris Faure 296cdcd102 usual round of fixes to make it compile with efl 1.7 2015-02-14 12:08:50 +01:00
Boris Faure 87d653ea4d add xterm 777 notification support. Closes T1765 2015-01-12 23:13:43 +01:00
Boris Faure 36e5ca2165 "handle" HTS 2015-01-10 21:02:04 +01:00
Boris Faure da809eb023 "handle" TBC 2015-01-10 21:02:04 +01:00
Boris Faure cbc92a55fc Fix screen mangling from prompt redraws on resize. Closes T1193
There are still some oddities because the shell doesn't expect us to
reflow.

Let's say we have the following where X is the cursor.

+-------+
|foobar$|
|X      |
+-------+
Here, the shell explicitly told us to go to a new line after '$'. We don't
consider '$' is on the same line as 'foobar'.
Decrease the width of that window.
+------+
|foobar|
|$     |
|X     |
+------+
Let the shell know the new size. It decides to redraw the prompt. It
remembers it told us to go to a new line, so the first thing it tells us
is to go one line up: to '$' and not 'foobar'. Then it tells us to clear
the screen downward from there and to print "foobar$" (and go to new
line).

Thus we have the following:
+------+
|foobar|
|foobar|
|$     |
|X     |
+------+
2014-12-07 23:51:23 +01:00
Boris Faure caed00cc1f fix segfault due to using isdigit with non unsigned char value. Closes T1625
Also rename _termpty_handle_seq() to termpty_handle_seq() since it's not static.
2014-09-15 23:10:55 +02:00
Boris Faure fd1e4ffd45 fix segfault when decoding buggy xterm sequence. cf T1625 2014-09-04 20:45:02 +02:00
Boris Faure 6c50375f26 Party time! be able to set foreground color
Reset is not yet implemented for that…

Idea is from http://www.reddit.com/r/linux/comments/2ds0he/xterm_party/
2014-08-17 22:20:40 +02:00
Boris Faure 5dfb63a14a handle queries on some xterm escape codes 2014-08-17 17:44:19 +02:00
Boris Faure 61050bd7cc clean up xterm escape codes handling 2014-08-17 17:32:57 +02:00
Boris Faure 9a16eb57a1 handle some DSR: the cursor position reports 2014-08-14 21:48:26 +02:00
Boris Faure ae820f3897 extract csi_reset_mode 2014-08-11 22:03:56 +02:00
Boris Faure 8a3c15e08e gettextify termcmd.c,termio.c,termpty.c,termptyesc.c 2014-07-26 11:37:26 +02:00
godfath3r 54280b97f6 cleanup. Remove lines with values stored to variables never used
Summary:
  as found with clang static analysis tool.

Reviewers: billiob, raster

Differential Revision: https://phab.enlightenment.org/D1207
2014-07-21 20:42:57 +02:00
Boris Faure e51c2168e9 fix segfault. Closes T1286 2014-06-08 15:52:34 +02:00
Boris Faure c3c8310218 Fix bracketed paste mode. Closes T1233. Patch by Egmont 2014-05-07 20:41:14 +02:00
Boris Faure 02856cbdec terminology supports fraktur!! 2014-04-06 14:42:38 +02:00
Sebastian Dransfeld cd189663bd remove dead code
We make sure that arg >= 0 before this line, so check is redundant.

CID 1100658
2014-03-24 13:40:05 +01:00
Boris Faure c27d887c1c save wrapnext when saving cursor. Closes T1080 2014-03-15 18:35:59 +01:00
Boris Faure 87e06d7a87 add some doc about RM 34/36 2014-03-15 17:35:56 +01:00
Boris Faure f47eb5e410 fix buffer overflows. Closes T1050 2014-03-05 22:37:38 +01:00
Boris Faure 735e5d1a3d cleanup code 2014-03-05 21:42:33 +01:00
Boris Faure 2063e2f4f4 fix ^[22m: no bold/bright, no faint 2014-03-03 23:02:17 +01:00
Boris Faure 5067594760 improve TODO message 2014-03-01 16:07:16 +01:00
Boris Faure b22a4f6ab1 handle soft reset (DECSTR) 2014-03-01 15:39:58 +01:00
Boris Faure 42e4fdfc59 improve debug for unhandled csi 2014-03-01 15:29:32 +01:00
Boris Faure f6a08ac7d8 skip buffer when dcs parsing overflows. Closes T932 2014-02-11 22:18:12 +01:00
Boris Faure 878f456160 fix copy/paste error: CID 1163307 2014-01-23 03:44:07 +01:00
Boris Faure ab9243b94f oops 2014-01-22 23:19:11 +01:00
Boris Faure 4602641ac0 fix typo: CID 1100646 2014-01-22 22:53:48 +01:00
Boris Faure defca7b58b remove dead code: CID 1100658 2014-01-22 22:52:27 +01:00
Boris Faure ac4117ce8a add bracketed paste (by egmont). Closes T670 2014-01-06 21:51:23 +01:00
Aleksandar Popadić ae9226f823 Give commit 5ab7a6f827 another go
"Do not let CUU and CUD scroll off screen."
Previously I missed how the default values are implemented.

Reviewers: billiob, cedric

Differential Revision: https://phab.enlightenment.org/D417

Signed-off-by: Cedric BAIL <cedric.bail@samsung.com>
2013-12-27 16:17:15 +09:00
Cedric BAIL 1cc793f564 Revert "Do not let CUU and CUD scroll off screen."
This reverts commit 5ab7a6f827.

This patch did completely break emacs for me. I have no idea what the intent was, but
at least my application/OS is broken.
2013-12-26 11:36:51 +09:00
Aleksandar Popadić 1f62a447a3 DECCOLM - do not change terminal height
Summary: I'm taking xterm as a reference here.

Reviewers: billiob

Reviewed By: billiob

Differential Revision: https://phab.enlightenment.org/D410
2013-12-25 12:09:54 +01:00
Aleksandar Popadić 5ab7a6f827 Do not let CUU and CUD scroll off screen.
Summary:
ISO 6429 is a bit vague here but I don't think that the cursor should
be let go off screen.

Test Plan: terminology -g80x30, vttest, 1 -> test failed

Reviewers: billiob

Reviewed By: billiob

Differential Revision: https://phab.enlightenment.org/D409
2013-12-25 12:07:13 +01:00
Aleksandar Popadić e170f85ce3 Do not switch buffer if buffer already switched.
Summary:
Mutt does this. It sets the alternate buffer, it disables it, it
disables it again and enables it back.

Test Plan:
Run mutt, quit mutt, run mutt, quit mutt. You should see the
residual background from mutt.

Reviewers: billiob

Differential Revision: https://phab.enlightenment.org/D371
2013-12-10 21:45:11 +01:00
Aleksandar Popadić d0c6c1d457 Rewrite reflow on resize
Summary:
simplify code (treat every resize as a single case) and fill the lines
from the bottom up

Reviewers: billiob

Differential Revision: https://phab.enlightenment.org/D355
2013-12-01 19:47:12 +01:00
Boris Faure 81a7d98f2f fix handling of DCH. Closes T537
As characters are deleted, the remaining characters between the cursor and
right margin move to the left. Character attributes move with the characters.
The terminal adds blank spaces with no visual character attributes at the right
margin. DCH has no effect outside the scrolling margins.
2013-11-23 19:31:49 +01:00
Boris Faure df2b87308b add termpty_screen_swap() to simplify code 2013-11-18 21:41:30 +01:00
Aleksandar Popadić 7447178071 Fix screen refresh with screen, ssh, vim, ...
Summary: This closes T143.

Reviewers: billiob

Reviewed By: billiob

Maniphest Tasks: T143

Differential Revision: https://phab.enlightenment.org/D340
2013-11-18 20:45:47 +01:00
Boris Faure f8edf059d4 fix scrolling bug. Closes T106
Was fixed with help from great bug report by thomasg.

scroll_rev was ok
2013-11-17 17:28:32 +01:00
Boris Faure 40f0dc6950 simplify code 2013-11-17 17:28:32 +01:00
Boris Faure 4bc3357a91 improve debug output 2013-11-17 17:28:32 +01:00
Boris Faure 7617f39f1a small debug-related changes 2013-11-10 15:35:16 +01:00
Daniel Juyung Seo f5df6ce99d termptyesc: removed unnecessary null check for free.
This fixes coverity CID 1100643.
2013-11-08 08:13:37 +09:00
Daniel Juyung Seo e0bd4fd6f7 termptyesc: fixed up wrong null check.
This solves coverity CID 1100642.
2013-11-08 08:08:39 +09:00