# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
__dconf-editor() {
function gen_paths() {
local _cur=$1
local _prefix=$2
local dconf_choices="$(dconf _complete '' "${_cur}")"
local gsettings_current_path=""
local gsettings_choices="$(gsettings list-schemas --print-paths |
cut -f2 -d" " |
grep ^${_cur} |
sed -e 's,^'"${_cur}"',,' |
awk '{if($0 != "") {print $1} else if ("'"${_cur:0-1}"'" == "/") {print ""}}' |
awk -F'/' '{if ($0 == "") {print ""} else if(($1 != "") AND ("'"${_cur:0-1}"'" != "/")) {print $1 "/"}}' |
sed -e 's,.*,'"${_prefix} ${_cur}"'&,' )"
local keys_choices="$(gsettings list-schemas --print-paths |
awk -F' ' '{if ("'"${_cur%/*}/"'" == $2) {system("gsettings list-keys "$1)}}' |
sed -e 's,.*,'"${_prefix} ${_cur%/*}/"'&,' )"
echo "$(echo "$dconf_choices" "
" "$gsettings_current_path" "
" "$gsettings_choices" "
" "$keys_choices" |
sort | uniq)"
}
function gen_fixed() {
local _cur=$1
local _prefix=$2
echo "$(gsettings list-schemas |
grep ^${_cur} |
sed -e 's,^'"${_cur}"',,' |
awk -F'.' '{if ($2 != "") {print $1 "."} else {print $1}}' |
sed -e 's,.*,'"${_prefix} ${_cur}"'&,' |
sort | uniq)"
}
function gen_reloc() {
local _cur=$1
local _prefix=$2
echo "$(gsettings list-relocatable-schemas |
grep ^${_cur} |
sed -e 's,^'"${_cur}"',,' |
awk -F'.' '{if ($2 != "") {print $1 "."} else {print $1 "\\\\:/"}}' |
sed -e 's,.*,'"${_prefix} ${_cur}"'&,' |
sort | uniq)"
}
function gen_schemas() {
local _cur=$1
local _prefix=$2
echo "$(echo "$(gen_fixed $1 $2)" "
" "$(gen_reloc $1 $2)" | sort | uniq)"
}
function gen_keys() {
local _schema=$1
echo "$(gsettings list-keys "${_schema}" |
sort)"
}
local cur="${COMP_WORDS[COMP_CWORD]}"
local complist=""
local nosoloopt="--I-understand-that-changing-options-can-break-applications"
if [[ "${COMP_CWORD}" == "1" ]]; then
if [[ "${cur}" == "${nosoloopt}" ]]; then
local IFS=$'\n'
complist="$(gen_paths "/" "${nosoloopt}") $(gen_schemas "" "${nosoloopt}")"
else
local soloopts="--help
--list-relocatable-schemas
--version"
if [[ "${cur}" == -* ]]; then complist="${soloopts} ${nosoloopt}"
elif [[ "${cur}" == "" ]]; then complist="${soloopts} ${nosoloopt} $(gen_paths "/" ) $(gen_schemas "" )"
elif [[ "${cur}" == /* ]]; then complist=" $(gen_paths "${cur}") "
else complist=" $(gen_schemas "${cur}")"
fi
fi
elif [[ "${COMP_CWORD}" == "2" ]]; then
local prim="${COMP_WORDS[1]}"
if [[ "${prim:0:1}" == "/" ]]; then
complist="${nosoloopt}"
elif [[ ("$(gsettings list-schemas | grep ^"${prim}" )" != "") ||
("$(gsettings list-relocatable-schemas | grep ^"$(echo "${prim}" | awk -F':' '{print substr($1, 1, length($1)-1)}')")" != "") ]]; then
complist="${nosoloopt} $(gen_keys "$(echo "${prim}" | awk -F':' '{if (substr($1, length($1)) == "\\") {print substr($1, 1, length($1)-1)} else {print $1}}')")"
elif [[ "${prim}" == "${nosoloopt}" ]]; then
if [[ "${cur}" == "" ]]; then complist=" $(gen_paths "/" ) $(gen_schemas "" )"
elif [[ "${cur}" == /* ]]; then complist=" $(gen_paths "${cur}") "
else complist=" $(gen_schemas "${cur}")"
fi
fi
elif [[ "${COMP_CWORD}" == "3" ]]; then
local prim="${COMP_WORDS[1]}"
if [[ "${prim}" == "${nosoloopt}" ]]; then
complist="$(gen_keys "${COMP_WORDS[2]}")"
elif [[ ("$(gsettings list-schemas | grep ^"${prim}")" != "") && ("${COMP_WORDS[2]}" != "${nosoloopt}") ]]; then
complist="${nosoloopt}"
fi
# problem with paths containing a ':', considered having four words or more
fi
COMPREPLY=($(compgen -o nosort -W "${complist}" -- "${cur}"))
return 0
}
####################################################################################################
complete -o nospace -o nosort -F __dconf-editor dconf-editor