[core] Support `auto-tty` and `no_color-tty` for `--color` (#10453)

Authored by: Grub4K
pull/10486/head
Simon Sawicki 4 months ago committed by GitHub
parent 66ce3d76d8
commit d9cbced493
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -452,7 +452,8 @@ class YoutubeDL:
Can also just be a single color policy, Can also just be a single color policy,
in which case it applies to all outputs. in which case it applies to all outputs.
Valid stream names are 'stdout' and 'stderr'. Valid stream names are 'stdout' and 'stderr'.
Valid color policies are one of 'always', 'auto', 'no_color' or 'never'. Valid color policies are one of 'always', 'auto',
'no_color', 'never', 'auto-tty' or 'no_color-tty'.
geo_bypass: Bypass geographic restriction via faking X-Forwarded-For geo_bypass: Bypass geographic restriction via faking X-Forwarded-For
HTTP header HTTP header
geo_bypass_country: geo_bypass_country:
@ -659,12 +660,15 @@ class YoutubeDL:
self.params['color'] = 'no_color' self.params['color'] = 'no_color'
term_allow_color = os.getenv('TERM', '').lower() != 'dumb' term_allow_color = os.getenv('TERM', '').lower() != 'dumb'
no_color = bool(os.getenv('NO_COLOR')) base_no_color = bool(os.getenv('NO_COLOR'))
def process_color_policy(stream): def process_color_policy(stream):
stream_name = {sys.stdout: 'stdout', sys.stderr: 'stderr'}[stream] stream_name = {sys.stdout: 'stdout', sys.stderr: 'stderr'}[stream]
policy = traverse_obj(self.params, ('color', (stream_name, None), {str}), get_all=False) policy = traverse_obj(self.params, ('color', (stream_name, None), {str}, any)) or 'auto'
if policy in ('auto', None): if policy in ('auto', 'auto-tty', 'no_color-tty'):
no_color = base_no_color
if policy.endswith('tty'):
no_color = policy.startswith('no_color')
if term_allow_color and supports_terminal_sequences(stream): if term_allow_color and supports_terminal_sequences(stream):
return 'no_color' if no_color else True return 'no_color' if no_color else True
return False return False

@ -468,7 +468,7 @@ def validate_options(opts):
default_downloader = ed.get_basename() default_downloader = ed.get_basename()
for policy in opts.color.values(): for policy in opts.color.values():
if policy not in ('always', 'auto', 'no_color', 'never'): if policy not in ('always', 'auto', 'auto-tty', 'no_color', 'no_color-tty', 'never'):
raise ValueError(f'"{policy}" is not a valid color policy') raise ValueError(f'"{policy}" is not a valid color policy')
warnings, deprecation_warnings = [], [] warnings, deprecation_warnings = [], []

@ -462,6 +462,7 @@ def create_parser():
'the STREAM (stdout or stderr) to apply the setting to. ' 'the STREAM (stdout or stderr) to apply the setting to. '
'Can be one of "always", "auto" (default), "never", or ' 'Can be one of "always", "auto" (default), "never", or '
'"no_color" (use non color terminal sequences). ' '"no_color" (use non color terminal sequences). '
'Use "auto-tty" or "no_color-tty" to decide based on terminal support only. '
'Can be used multiple times')) 'Can be used multiple times'))
general.add_option( general.add_option(
'--compat-options', '--compat-options',

Loading…
Cancel
Save