|
|
Home » Developing U++ » UppHub » A terminal emulator widget for U++
|
|
|
Re: A terminal emulator widget for U++ [message #52195 is a reply to message #51415] |
Wed, 07 August 2019 21:24   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
Terminal package is updated.
Initial support for a rare but much requested feature in the world of terminal emulators has landed:
- Sixel graphics support is added to the Terminal package. It is now possible to view sixel images, using the Terminal package. However, the initial support is only for external viewing. Embedded images are a TODO.
- A basic terminal example with sixel viewer is also added to the package.
- SixelRenderer class and a convenience function: RenderSixelImage is also added to the package. This class and the function can also be used as a stand-alone sixel renderer.
- Alt-key handling is improved.
A screenshot:

The git repo address of upp-components: https://github.com/ismail-yilmaz/upp-components
Reviews, criticism, patches, bug reports, etc., are always welcome.
Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Wed, 07 August 2019 21:44] Report message to a moderator
|
|
|
|
|
Re: A terminal emulator widget for U++ [message #52415 is a reply to message #51415] |
Sun, 22 September 2019 12:01   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
Terminal package is finally updated to v0.2.
Image rendering and handling mechanism is vastly improved. 
- Terminal: SixelRenderer class is rewritten;
- Terminal: SixelRaster class, a StreamRaster interface for sixel images, is added to the package.
- Terminal: A subset of xterm's window-op reports are implemented.
- Terminal: An I/O synchronization issue with the PtyProcess class that led to artifacts on screen on some setups is fixed.
- Terminal: Inline image support is improved.
- Terminal: Room is made for other inline image protocols.
- Terminal: WhenSixel event is removed in favor of a generic WhenImage event.
- Terminal: Image rendering strategy is changed to cell-level rendering for further flexibility.
- Terminal: An LRU-type shared image data cache is implemented.
- Terminal: Support for Jexer, a modern text user interface (TUI) and windowing system for terminal emulators, is added.
- Terminal: A general purpose data variable is added to the cell structure.
- Terminal: SGR image flag is added to the cell structure.
- Examples: Examples are further simplified.
- Various optimizations and fixes.
- Image gallery is updated.
The "final boss" for this release was the jexer support. Jexer is a modern text user interface and window manager that runs inside terminal emulators. (It is an advanced terminal multiplexer.)
There were only four high-end terminal emulators (xterm, mlterm, rlogin and jexer itself) fully supporting the jexer, Now they are five 
I've made short videos of Terminal ctrl.
The ssh terminal example on windows also demonstrates the power of Core/SSH package. (It connects to a Linux device over 300 km distance, and runs jexer with inline images support, which is very demanding).
On Linux
- A basic terminal example with sixel graphics, and mouse tracking support.
- Used apps and tools: Jexer text user interface (TUI), GNUPlot, Emacs, Nano, htop, ncurses demos.
- Link: https://vimeo.com/359241367
On Windows
- A basic SSH2 terminal example with sixel graphics, and mouse tracking support.
- Used apps and tools: Jexer text user interface.
- Link: https://vimeo.com/361556973
On Turtle HTML-5 backend (in a web browser)
- A basic terminal example with sixel graphics, and mouse tracking support.
- Used apps and tools: Jexer text user interface.
- Link: https://vimeo.com/361558519
Screenshot (Windows, ssh terminal example):

Terminal@: https://github.com/ismail-yilmaz/upp-components/tree/master/ CtrlLib/Terminal
Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Sun, 22 September 2019 12:46] Report message to a moderator
|
|
|
|
Re: A terminal emulator widget for U++ [message #52644 is a reply to message #51415] |
Sun, 03 November 2019 15:03   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
Terminal package and Terminal ctrl is updated.
There are fixes and clean-ups here and there, but most notably a new feature is added:
Terminal ctrl is now able to display 24-bit jpeg, gif, bmp, etc. raster formats, using the Jexer Image Protocol and Upp's own StreamRaster interface.
This means that if the raster images you are working with have registered decoders in upp/plugins, or somewhere else, Terminal ctrl will be able to display it.
Four main benefits of this inline images protocol is:
1) It is "8-bit clean". It can be safely deliver images over the network, and with Utf-8.
2) Popular image formats can be decoded much faster than sixels. (Up to 8 to 10 times faster on bigger image files), and usually have a lower bandwidth requirements.
3) Allows 24 bit (true color) images.
4) The wire protocol is very simple.
Screenshot with 24 bit images:
(Taken from the pre-alpha version of Toad, a cross-platform, multithreaded SSH2 client with tabs and splitter support, that will be available in -hopefully- January 2020):

Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
|
|
|
Re: A terminal emulator widget for U++ [message #52684 is a reply to message #51415] |
Sun, 10 November 2019 21:49   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
A new week, and another update with new features. 
- Explicit hyperlinks support is added.
- Standard menu improved and modularized.
- Cell tracking methods are implemented.
- Various fixes and cosmetics.
- Docs are updated accordingly.
Explicit hyperlinks are currently supported by GCC, ls, systemd, and a number of other high profile products.
One advantage of this hyperlinks protocol is that it is relatively well-defined and cheap.
To test it on linux, compile the TerminalExample, and run an updated version of the "ls" command:
Gif:

Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Sun, 10 November 2019 23:23] Report message to a moderator
|
|
|
|
|
Re: A terminal emulator widget for U++ [message #53262 is a reply to message #51415] |
Wed, 25 March 2020 14:20   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
Three months of silence is finally broken. 
Terminal package is scheduled to be updated to v0.3 on April 6, 2020.
Meanwhile the package has seen tons of improvements. (Note that the changes are not pushed to git yet).
Some highlights of the upcoming version:
- Initial steps for scripting support (using the Esc language).
- A proper double-width (Eastern-Asian/CJK) characters support.
- A proper tmux/screen support.
- A proper support for ISO 8613-6 true/indexed color formats.
- A much faster renderer. (In some torture tests (such as ncurses/dots on fulscreen mode) the performance gain can be up to %80.
And much more... (full list will be available with the release).
I am currently testing the package for regressions.
To whet yout appetite (tmux/screen, on Linux):

Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Wed, 25 March 2020 14:34] Report message to a moderator
|
|
|
|
|
Re: A terminal emulator widget for U++ [message #53542 is a reply to message #51415] |
Fri, 10 April 2020 02:17   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
Hello,
The day has come. Terminal package is upgraded to v0.3. 
This is a huge release, with lots of changes, fixes, additions and improvements.
I am not going to list every change but some highlights here. If you want to see the full list, please check out the git history.
- Source code is restructured.
- Console class is ditched for the sake of simplicity. There is now only Terminal, deriving from Upp:CTrl.
- Eastern-Asian/CJK double width characters support is added.
- Text overline attribute is now supported.
- APCs (application programming commands) are now supported. This is the first step towards terminal scripting feature. APCs can be also be used by client code for private purposes.
- TRUECOLOR flag is removed. Terminal ctrl is now fully and officially a true color terminal emulator.
- Accordingly, CMY and CMYK color spaces are now supported too!
- Support for color text specifications (rgb, hash3, hash6, hash9, hash12) are added.
- xterm window actions are reports are implemented. It is now possible for host apps to move, resize, minimize, maximize, fullscreen the terminal.
- Renderer has seen a significat performance boost (up to 80% on some torture tests).
- tmux/screen is fully supported.
- Hyperlinks now show nice dots under their texts when they are "inactive" (i.e. no mouse hovering over them)
- API docs and specifications docs are significantly improved.
But how compliant is it?
Using George Nachmann's (iTerm2's developer) excellent and comprehensive test suite (it is analogous to the browser standard compliance tests), esctest, the results are as follows:
expected-terminal=xterm
max-vt-level=4
Terminal ctrl: v0.3, passed 407 tests, failed on 101 tests,
Terminal ctrl: v0.2 passed only 160 of the same tests.
Let us now look at the latest stable version of Gnome terminal and Kitty, with same settings:
expected-terminal=xterm
max-vt-level=4
Gnome Terminal (v.3.36.1.1): passed 163 tests and failed on 345 tests.
Kitty: passed 122 tests, and failed on 386 tests.
xterm: Fassed all tests. (not suprisingly)
Keep in mind that I am not even implying that Terminal ctrl is better. (It isn't. Gnome Terminal is a very high quality product with excellent features).
I am simply pointing out where our VT engine stands on the xterm compliance front (since xterm is the defacto standard), and the progress made with the nev version.
Hyperlinks with dots:

You can find the new version on my git repo.
If you have any questions, suggestions, bug reports, patches, feature requests, etc. please feel free to contact me via my github address or this forum topic.
Enjoy!
Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Fri, 10 April 2020 11:40] Report message to a moderator
|
|
|
|
|
|
Re: A terminal emulator widget for U++ [message #53704 is a reply to message #51415] |
Wed, 22 April 2020 18:51   |
Oblivion
Messages: 1206 Registered: August 2007
|
Senior Contributor |
|
|
A small but important news is that I've found a bottleneck in the Terminal ctrl's code that was puzzling me for some time.
It was in the display update and scrolling mechanism. Hopefully I have fixed it. 
However, I won't push the change to github before I test it thoroughly and be sure it doesn't break anything.
It appears that, after the fix, Terminal ctrl will be one of the most fastest out there.
Below statistics are the average results of a test automatically run 100 times:
All terminal emulators use the same font/page size settings, and run on Gnome 3.36
Results of command: time find /usr/share
Terminal Emulator real user sys
----------------- ---------- ---------- ----------
Terminal Ctrl (Current): 0m23,104s 0m1,297s 0m2,879s
Terminal Ctrl (with fix): **0m4,002s 0m0,774s 0m1,622s**
xterm 0m15,059s 0m0,991s 0m2,527s
Gnome Terminal 0m4,217s 0m0,778s 0m1,773s
Kitty 0m4,907s 0m0,887s 0m2,325s
If everything goes well, I will push this change next week.
Best regards,
Oblivion
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Wed, 22 April 2020 18:55] Report message to a moderator
|
|
|
Goto Forum:
Current Time: Fri May 09 11:26:33 CEST 2025
Total time taken to generate the page: 0.01213 seconds
|
|
|