Conversation
src/control.rs
Outdated
| #[allow(unused_mut)] | ||
| #[allow(unused_assignments)] | ||
| let mut tty = false; | ||
| #[cfg(feature = "tty")] | ||
| { | ||
| tty = atty::is(atty::Stream::Stdout); | ||
| } |
There was a problem hiding this comment.
| #[allow(unused_mut)] | |
| #[allow(unused_assignments)] | |
| let mut tty = false; | |
| #[cfg(feature = "tty")] | |
| { | |
| tty = atty::is(atty::Stream::Stdout); | |
| } | |
| let tty = if cfg!(feature = "tty") { | |
| atty::is(atty::Stream::Stdout) | |
| } else { | |
| false | |
| }; |
There was a problem hiding this comment.
Good idea. I like this better than mine but it doesn't compile. This compiles:
let tty = if cfg!(feature = "tty") {
#[cfg(feature = "tty")]
{
atty::is(atty::Stream::Stdout)
}
#[cfg(not(feature = "tty"))]
false
} else {
false
};
But we can clean it up further to this:
let tty = {
#[cfg(feature = "tty")]
{
atty::is(atty::Stream::Stdout)
}
#[cfg(not(feature = "tty"))]
false
};
And sorry there are some commits that I didn't mean to put into this PR.
There was a problem hiding this comment.
You could also use
use std::io::{self, IsTerminal};
let tty = io::stdout().is_terminal();that was very recently introduced in the Rust 1.70.0 std library.
There was a problem hiding this comment.
Could use that and drop the atty dependency.
This reverts commit 1ab549c.
Cargo recommends features be additive. And when I tried testing without this commit with the following commands: ```sh cargo test --all-features cargo test --no-default-features cargo test ``` Some were breaking on account of "no_color". Updated the README.
|
I reverted the changes that weren't meant to go into this PR (removed a struct called |
744b5dd to
1921f20
Compare
|
Thanks for the PR @shanecelis! I've been invited on as a contributor to overlook some things, and I'll get this PR look at once I get a bit more familiar with the codebase. I just need to get a better grasp on how everything's working internally, and then I'll be able to look over this code and give it a good review. |
|
Hey @shanecelis, there's plans for a Once that issue gets implemented, it should avoid any allocations entirely, which this PR seems to aim for but not entirely achieve. I do like the idea of allocating less, but I'm not positive it'll make much of a difference in the actual speed/memory usage of a program. Would you have any metrics for that? |
|
#154 intends to expose the internals of A common pattern seems to be having the colouring and styling orthogonal to the backing string. I think a good way forward would be to create a generic structure which is agnostic to the backing string, such as struct Colored<T> {
input: T,
fgcolor: Option<Color>,
bgcolor: Option<Color>,
style: style::Style,
}And then implement the required conversions, dereferencing, and formatting agnostic to the backing type. |
Great project. I saw an opportunity to alloc less. This PR changes
inputfrom aStringto aCow<'a, str>and the implementation for&'a strtoInto<Cow<'a, str>>which will cover&stras before andStringandCows and makes the necessary changes to support that. No usage change for the end user, just broader support and less allocs.As an aside, I added print statements to the dynamic_colors example.