Commit Graph

54 Commits

Author SHA1 Message Date
John Hood e8331437d3 Minor SGR printf type signedness fixes. 2017-11-04 14:37:11 -04:00
Kang.Jianbin 6cfa4aef59 Add true color support.
Implement true color support define in:
https://en.wikipedia.org/wiki/ANSI_escape_code

The sequence is:
ESC[ … 38;2;;; … m Select RGB foreground color
ESC[ … 48;2;;; … m Select RGB background color
2017-10-29 20:20:03 -04:00
Keith Winstein 790b479f8a terminalframebuffer.cc: ignore unknown renditions
(revert assert(false) added by 4835dcf)
(fixes #918)
2017-08-17 13:14:52 -07:00
John Hood 93daa5ac3b Fix Debian GCC7 FTBFS: remove default constructors 2017-08-06 23:09:07 -04:00
John Hood 9663edb7c7 Do not set function parameters. 2017-08-06 22:22:32 -04:00
John Hood 4835dcf5ee Various switch statement fixes. 2017-08-06 22:22:25 -04:00
John Hood b1a6f7c144 Eliminate unnecessary, trailing else conditional blocks. 2017-08-06 22:22:05 -04:00
Alex Cornejo 4b240ac033 support osc 52 clipboard copy integration.
This feature is particularly relevant for mosh for chrome (which also
used in windows I believe).
2017-07-31 23:17:24 -04:00
John Hood 72199ffc0b Do not move cursor for SCROLL UP and SCROLL DOWN
This fixes #881, corrupted display of man pages with tables in tmux
2.4.
2017-05-06 11:15:43 -04:00
John Hood 302c7deb41 Describe Cell width as a narrow/wide boolean.
A character cell can only be either narrow or wide.  It's more
convenient to represent that as an int containing 1 or 2, but slightly
more correct to represent it as a "boolean" single-bit integer.
2016-11-17 00:56:31 -05:00
John Hood e4aed30d30 Fix broken wrap behavior causing broken copy/paste.
The terminal framebuffer was not resetting the wrap state of a row
when a previously-wrapping line was overwritten by a non-wrapping
line.  Restore previous, subtle behavior of line wrap.  Fix wrap
verification bug now exposed by emulation-wrap-across-frames.test.

Also hoist some getters, mostly for clarity.

Fixes #820.
2016-11-17 00:50:46 -05:00
John Hood ed92637f25 Use snprintf(), not sprintf()
Found by OpenBSD build.
2016-03-30 23:52:19 -04:00
John Hood 2ac3bbeb9b Fix prediction unicode bug. Make all Cell members private.
Fixes #702.
2015-12-24 22:27:17 -05:00
John Hood 1d71895ff4 Add support for back tab (CSI CBT), and forward tab (CSI CHT) too.
Resolves #539.
2015-12-06 22:38:19 -05:00
John Hood 551b77f27e Remove display-posterizing code. It's been dead 3 years.
Signed-off-by: John Hood <cgull@glup.org>
2015-12-06 19:03:36 -05:00
John Hood e0f6eb78ef Improve roundtrip verification tests and debug dump.
Add another round-trip verification.  For both original and generated
state, generate a diff from an initial, empty state.  Verify that
these two diffs are the same.
2015-12-06 17:42:34 -05:00
John Hood 0b51260540 Fix for UTF-8 roundtrip verification bug.
The problem was that the round-trip verification code copies the
current state, which may contain intermediate Parser state for
multibyte characters and ANSI escape sequences.  It then applies diffs
to that copy, which may appear as badly formed input.

Also removes some dead, never-used code.
2015-12-06 17:42:34 -05:00
John Hood f5d814a9c4 Reduce character cell lookups in Emulator::print(). 2015-12-06 17:42:34 -05:00
John Hood 589d21bbf2 Add make_shared emulation for std::tr1::shared_ptr; use make_shared 2015-12-06 17:42:34 -05:00
John Hood b41bad918d Make Terminal::Framebuffer::Rows shared and copy-on-write.
* Support both std:: and std::tr1:: shared_ptr. FreeBSD 10 now uses C++11 by default.
* Remove Framebuffer pointers in STMClient
2015-12-06 17:42:34 -05:00
John Hood c090d257f2 Rework Terminal::Display to improve performance and treat passed Framebuffers as const.
* Refactor put_cell() and parts of new_frame(), and associated state, into put_row().
* Optimize display and line wrap handling code/output.
* Make last_frame a const ref, to eliminate a costly copy of the framebuffer on every screen refresh.
* In new_frame()'s scroll optimization, don't copy rows, use pointers instead.
* Don't check entire frame buffer for scrolling if first line hasn't scrolled.
* Add a generation counter on Row objects to allow quicker/better identification of scroll regions
* Use at() for bounds-checking on framebuffers, because they can be resized.
* Copy and resize scroll buffer on window resize.
2015-12-06 17:42:34 -05:00
John Hood 32afa96111 Change Framebuffer's containers/methods to improve performance.
* Reduce the size of Terminal::Cell.
* Change colors and attributes in Terminal::Rendition to bitfields/bitmask.
* Change Cells to use UTF-8 strings instead of vector<wchar_t>.  Store Rows in a vector instead of a deque.
* Add various Framebuffer::append() methods for more efficient passing of single and repeated characters.
* Change title/icon strings from deques to a vector typedef-- this is more for tidiness than any real performance.
2015-12-06 17:42:34 -05:00
John Hood 8fdcdc88cd Isolated algorithmic improvements.
* Fix inefficient STL use around Parser::UTF8Parser.
* Reduce typeid() usage, change some of it to a virtual method
* Do multiple-line scrolls as a single move
2015-12-06 17:42:34 -05:00
John Hood 026a3f0346 Resolve cppcheck issues.
Signed-off-by: John Hood <cgull@glup.org>
2015-06-10 23:50:56 -04:00
John Hood 543f346ac7 Fix various new compiler warnings.
terminalfunctions.cc: set_if_available() was undeclared.
Fix printf() wint_t/wchar_t warnings.
mosh-server.cc: Fix warning for side effects inside typeid().

Signed-off-by: John Hood <cgull@glup.org>
2015-06-06 13:12:32 -04:00
Louis Kruger c4236c6762 Fix xterm mouse support. 2015-05-31 18:18:30 -04:00
Andrew Chin 0be97a80bd Implement UTF8 mouse mode (SET_EXT_MODE_MOUSE DECSET 1005)
Signed-off-by: Andrew Chin <achin@eminence32.net>
2014-12-08 20:41:11 -05:00
Bazyli Brzóska 492cfa3449 Implement vt100 mouse mode (1000)
(closes #461)
2014-01-04 02:42:26 -05:00
Bazyli Brzóska 926bbcc746 Implement xterm extended mouse mode 2014-01-04 02:42:15 -05:00
Bazyli Brzóska 5ef7f43479 Implement xterm mouse mode 2014-01-04 02:42:15 -05:00
Barosl LEE c6bf3a2025 Implement bracketed paste mode
Allow bracketed paste mode-setting control sequences to be passed to the
outer terminal.

Signed-off-by: Barosl LEE <vcs@barosl.com>

Closes #430
2013-07-01 03:18:16 -04:00
Daniel "Tracerneo" Ziółkowski 06561d3500 Add support for ECMA-48 escape sequence for italic
Closes #443
2013-07-01 03:08:25 -04:00
sqweek 5af90cc1ac Don't touch window title before an OSC is received.
Fixes the "window title being clobbered" issue raised in issue 137.

Signed-off-by: sqweek <sqweek@gmail.com>

Closes #380. Closes #137.
2013-03-10 15:44:49 -04:00
Keith Winstein 92ecb99b71 Add OpenSSL licensing exception 2012-07-20 16:46:00 -04:00
Larry Doolittle eda48085ba Simple spelling fixes 2012-05-23 05:11:05 -04:00
Keith Winstein 43182729ec More graceful output from failed verification 2012-05-05 01:53:28 -04:00
Keith Winstein bfa0999089 Final tab-related bugfix (of the morning). Now matches xterm more closely. 2012-04-16 11:31:37 -04:00
Keith Winstein 0293e579d2 Properly reset tab stops on resize 2012-04-16 09:55:59 -04:00
Keith Winstein feb352c809 Optional verifier for round-trippability, and fix wrapping and tab bugs. 2012-04-16 09:09:20 -04:00
Keegan McAllister cd2d482484 Don't use *_t for our own typedefs
It's reserved by POSIX.

(closes #158 pull request)
2012-04-15 13:50:18 -04:00
Keegan McAllister 87a5f86794 Remove BOOST_AUTO from terminalframebuffer.cc 2012-04-15 13:49:15 -04:00
Keith Winstein 5c20c8d4be Keep using OSC 0 when possible to preserve compability with older clients.
Re: #137
2012-04-14 02:11:31 -04:00
Keith Winstein d0a818d2e2 Track icon name and window title separately. Implement MOSH_TITLE_NOPREFIX 2012-04-14 01:55:28 -04:00
Keith Winstein a67ae7b0f4 Support 16-color set (per Anders Kaseorg).
Closes #106 github issue.
Closes #133 github issue.
Closes #131 github issue.
2012-04-11 03:09:26 -04:00
Keith Winstein 4144f2e4f0 Don't clear wrap state on DEC set mode escape (matches xterm) 2012-04-11 01:58:20 -04:00
Keith Winstein 8221838f51 Fix bug sometimes causing missing (or spurious) wraparound copy-and-paste 2012-04-02 19:04:26 -04:00
Keith Winstein 13bd38aa51 Switch to deltaE method for color posterization 2012-03-18 01:52:13 -04:00
Keith Winstein d88ae9bfd0 Fix erroneous blinking in emacs (sgr with >15 fg but <16 bg) 2012-03-17 15:00:54 -04:00
Keith Winstein 170bc8366a Posterize to 8 colors when outer terminal does not support 256 colors
Fixes #58 github issue.
2012-03-16 17:43:01 -04:00
Keith Winstein 57d97209c0 Support 256color (and assume 256color terminal). Closes #3 github issue. 2012-03-16 13:46:55 -04:00