Bash Completion mit Leerzeichen im Wert für einen Schalter

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Bash Completion mit Leerzeichen im Wert für einen Schalter

Beitrag von inne » 30.11.2023 14:31:11

Hallo,

wie kann ich denn in diesem Beispiel für --profile die Bash Completion richtig schreiben? Ich hätte das gerne für ein Programm, was (noch) keine Bash Completion hat.

Das quote_readline ist glaube ich falsch und nur für die Ausgabe in der Kommandozeile?

Code: Alles auswählen

_dothejob() 
{
	local cur prev opts
	COMPREPLY=()
	cur=`_get_cword`
	prev=`_get_pword`

	case ${cur} in
		-*)
			opts="--input-file --profile --output-dir"
			COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
			return 0
		;;
	esac

	case ${prev} in
		--input-file)
			_filedir
			return 0
		;;
		--output-dir)
			_filedir -d
			return 0
		;;
		--profile)
			opts=()
			opts[0]="v a l u e"
			COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
			return 0
		;;
	esac
}

complete -F _dothejob dothejob
Zuletzt geändert von inne am 01.12.2023 08:23:06, insgesamt 1-mal geändert.

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Bash Completion mit Leerzeichen im Wert für einen Schalter

Beitrag von inne » 30.11.2023 16:54:50

Mal anderes gefragt: Ist das überhaupt vorgesehen?

Im Internet habe ich nun diese Lösung gefunden. Aber es bleibt ein "\ " in den Vorschlägen, was zwar nur Kosmetik ist, aber bei der Dateinamensvervollständigung hat es das z.B. nicht.

Code: Alles auswählen

declare -a completions
mapfile -t completions < <( compgen -W "$(printf '%q ' "${opts[@]}")" -- "$cur" )
local completion
COMPREPLY=()
for completion in "${completions[@]}"; do
	COMPREPLY+=("$(printf "%q" "$completion")")
done

Antworten