Comments (3)
Thanks for this suggestion!
I would be happy to receive pull request for this feature.
Before starting, do we have a way to check if the current terminal support 16colors/256colors/16Mcolors?
I would suggest reading: https://gist.github.com/XVilka/8346728.
Maybe proceeding like this:
- Checking the env variable $COLORTERM (truecolor => 256
- [fallback] Checking the environment variable $TERM if it contains "256.
- [fallback] Use 16colors.
Alternatively, maybe we can try to read the terminfo?
https://invisible-island.net/ncurses/man/terminfo.5.html
Ideally:
- On terminal not configured for 256colors, it should fallback gracefully by selecting the closest 16colors.
- The new API should preserve compatibility with the current FTXUI version.
- Be cross-platform?
from ftxui.
Cool I'll start working on it then ! Not sure how long it will take me though. It will depend on how much free time I have in the upcoming days/weeks.
Thanks for the links ! I'll take a look and test how we can check color support on terminals.
About the last three points :
On terminal not configured for 256colors, it should fallback gracefully by selecting the closest 16colors.
Since one can override the 16 basic colors of the terminal we'll need to check whether we can get the correct rgb color code from the terminal. Also, the part in the link you sent (https://gist.github.com/XVilka/8346728#terminals-that-parse-ansi-color-sequences-but-approximate-them-to-256-palette) about color approximation and how the correct formula could be performance intensive worries me a little.The new API should preserve compatibility with the current FTXUI version.
I'm not sure how it could be 100% compatible without becoming a little less clear. If we consider the case where someone was casting an int into a Color enum I'm not sure the API could be compatible without keeping the old color enum around and overriding the operator=. That's not necessarily a problem but having a Color enum and an RGBColor(or some other name) class could be confusing.Be cross-platform
I only have a linux at home but I was planning to test it on various terminals. Do you have a list of terminals you regularly test on ?
from ftxui.
Also, the part in the link you sent (https://gist.github.com/XVilka/8346728#terminals-that-parse-ansi-color-sequences-but-approximate-them-to-256-palette) about color approximation and how the correct formula could be performance intensive worries me a little.
Let's see first how it goes without optimization, if there are performance issues, we can still install a tiny cache to this function.
The new API should preserve compatibility with the current FTXUI version.
I'm not sure how it could be 100% compatible without becoming a little less clear. If we consider the case where someone was casting an int into a Color enum I'm not sure the API could be compatible without keeping the old color enum around and overriding the operator=. That's not necessarily a problem but having a Color enum and an RGBColor(or some other name) class could be confusing.
An int shouldn't have been casted into the enum class. If someone did this, they will be broken by their fault. This won't be an issue for us.
I think the enum class can be transformed into a class with an enum.
class Color {
// The 16 standard colors
enum Enumerated {
}
Color(Enumated) // Implicit constructor to transform Color::Enumated into Color.
static Color RGB(int r, int g, int b)
}
This way, people will still be able to use Color::Red, but also Color::RGB(255,0,0)
Be cross-platform
I only have a linux at home but I was planning to test it on various terminals. Do you have a list of terminals you regularly test on ?
Let's say Windows will fallback on 16 colors initially.
from ftxui.
Related Issues (20)
- when will release new version HOT 4
- Simulate a timeline HOT 2
- dropdown example bugs HOT 2
- Creating an input window, and outputting entered text after hitting enter or special key. HOT 3
- how to hide the cursor HOT 2
- About Support for Full width Characters in FTXUI HOT 10
- Is there an Event handling when CTRL+SHIFT+C is pressed? HOT 2
- From ftxui::Element to std::string or char* HOT 3
- focus problem HOT 2
- Untidy exit on std::terminate() HOT 1
- Do you have any recommended fonts? The font provided by windows is not very beautiful HOT 2
- How to highlight text inside ftxui::text() or ftxui::paragraph() HOT 1
- Is there a bug between full width characters and vertical?
- Running tests alters the terminal state HOT 2
- The scrollbar doesn't work in the "homescreen.cpp" demo HOT 3
- [feature request] Scatter plots HOT 1
- Dynamically adding elements to Checkboxes HOT 5
- Correctness of layout requirement for flexbox. Scrollbar implementation. HOT 1
- I've tried everything. I need help HOT 1
- Compression priority when rendering a vbox with inadequate space. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ftxui.