mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 15:12:12 +00:00 
			
		
		
		
	Use "-o fullquote" and "-o noquote" to escape Bash completions
This commit is contained in:
		
							
								
								
									
										26
									
								
								assets/completions/bat.bash.in
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								assets/completions/bat.bash.in
									
									
									
									
										vendored
									
									
								
							| @@ -14,18 +14,36 @@ __bat_escape_completions() | ||||
| { | ||||
| 	# Do not escape if completing a quoted value. | ||||
| 	[[ $cur == [\"\']* ]] && return 0 | ||||
| 	# printf -v to an array index is available in bash >= 4.1. | ||||
| 	# Use it if available, as -o filenames is semantically incorrect if | ||||
| 	# we are not actually completing filenames, and it has side effects | ||||
| 	# (e.g. adds trailing slash to candidates matching present dirs). | ||||
| 	if (( | ||||
| 		BASH_VERSINFO[0] > 5 || \ | ||||
| 		BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3 | ||||
| 	)); then | ||||
| 		# bash >= 5.3 has "compopt -o fullquote", which exactly does | ||||
| 		# what this function tries to do. | ||||
| 		compopt -o fullquote | ||||
| 	elif (( | ||||
| 		BASH_VERSINFO[0] > 4 || \ | ||||
| 		BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0 | ||||
| 	)); then | ||||
| 		# printf -v to an array index is available in bash >= 4.1. | ||||
| 		# Use it if available, as -o filenames is semantically | ||||
| 		# incorrect if we are not actually completing filenames, and it | ||||
| 		# has side effects (e.g. adds trailing slash to candidates | ||||
| 		# matching present dirs). | ||||
| 		local i | ||||
| 		for i in ${!COMPREPLY[*]}; do | ||||
| 			printf -v "COMPREPLY[i]" %q "${COMPREPLY[i]}" | ||||
| 		done | ||||
|  | ||||
| 		# We can use "compopt -o noquote" available in bash >= 4.3 to | ||||
| 		# prevent further quoting by the shell, which would be | ||||
| 		# unexpectedly applied when a quoted result matches a filename. | ||||
| 		if (( | ||||
| 			BASH_VERSINFO[0] > 4 || \ | ||||
| 			BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3 | ||||
| 		)); then | ||||
| 			compopt -o noquote | ||||
| 		fi | ||||
| 	else | ||||
| 		compopt -o filenames | ||||
| 	fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user