mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[core] Support auto-tty and no_color-tty for --color (#10453)
				
					
				
			Authored by: Grub4K
This commit is contained in:
		| @@ -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', | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Simon Sawicki
					Simon Sawicki