-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cows. Cows everywhere. #135
base: master
Are you sure you want to change the base?
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#[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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
input
from aString
to aCow<'a, str>
and the implementation for&'a str
toInto<Cow<'a, str>>
which will cover&str
as before andString
andCow
s 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.