mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-24 10:23:43 +08:00
29f35d6cdf
This gives us more accurate completions because completion scripts get expanded paths
97 lines
4.3 KiB
Fish
97 lines
4.3 KiB
Fish
# Fish completions for glibs's "gsettings" configuration tool
|
|
|
|
function __fish_complete_gsettings_args
|
|
set -l schema_commands get monitor writable range describe set reset reset-recursively list-keys list-children list-recursively
|
|
set -l key_commands get monitor writable range describe set reset
|
|
|
|
set -l schemadir
|
|
set -l cmd (commandline -pxc)
|
|
set -e cmd[1]
|
|
|
|
if set -q cmd[2]
|
|
and string match -q -- --schemadir $cmd[1]
|
|
# TODO: This needs to support proper expansion of paths (~, variables, etc.)
|
|
set schemadir --schemadir $cmd[2]
|
|
set -e cmd[1..2]
|
|
end
|
|
|
|
if not set -q cmd[1]
|
|
return 1
|
|
end
|
|
|
|
set -l subcommand $cmd[1]
|
|
|
|
if not contains -- $subcommand $schema_commands
|
|
return 1
|
|
end
|
|
|
|
if not set -q cmd[2]
|
|
# Non-relocatable schemas
|
|
gsettings $schemadir list-schemas 2>/dev/null
|
|
|
|
# Relocatable schemas require a dconf path, but there is no universal way of
|
|
# finding the right paths to suggest here. Just default to '/'.
|
|
gsettings $schemadir list-relocatable-schemas 2>/dev/null | string replace -r \$ ':/'
|
|
return 0
|
|
end
|
|
|
|
if not contains -- $subcommand $key_commands
|
|
return 1
|
|
end
|
|
|
|
set -l schema $cmd[2]
|
|
|
|
if not set -q cmd[3]
|
|
gsettings $schemadir list-keys $schema 2>/dev/null
|
|
return 0
|
|
end
|
|
|
|
if test $subcommand != set
|
|
return 1
|
|
end
|
|
|
|
if not set -q cmd[4]
|
|
set -l key $cmd[3]
|
|
set -l range (gsettings $schemadir range $schema $key 2>/dev/null)
|
|
set -l key_type $range[1]
|
|
set -e range[1]
|
|
switch $key_type
|
|
case 'type b'
|
|
echo true
|
|
echo false
|
|
case enum
|
|
string join \n $range
|
|
case '*'
|
|
# If no sensible suggestions can be made, just use the current value.
|
|
# It gives a good indication on the expected format and is likely already close to what the user wants.
|
|
gsettings $schemadir get $schema $key 2>/dev/null
|
|
end
|
|
return 0
|
|
end
|
|
|
|
return 1
|
|
end
|
|
|
|
set -l valid_commands get monitor writable range describe set reset reset-recursively list-schemas list-relocatable-schemas list-keys list-children list-recursively help
|
|
|
|
complete -f -c gsettings
|
|
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -l version -d 'Print the version information'
|
|
complete -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -l schemadir -d 'Specify a custom schemas directory' -xa "(__fish_complete_directories (commandline -ct))"
|
|
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a get -d 'Get the value of a key'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a writable -d 'Determine if a key is writable'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a range -d 'Determine the valid value range of a key'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a describe -d 'Print the description of a key'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a set -d 'Set the value of a key'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a reset -d 'Reset a key to its default value'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a reset-recursively -d 'Reset all keys under the given schema'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a list-schemas -d 'List all installed, non-relocatable schemas'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a list-relocatable-schemas -d 'List all installed, relocatable schemas'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a list-keys -d 'List all keys in a schema'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a list-children -d 'List all children of a schema'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a list-recursively -d 'List keys and values, recursively'
|
|
complete -f -c gsettings -n "not __fish_seen_subcommand_from $valid_commands" -a help -d 'Print help'
|
|
|
|
complete -f -c gsettings -n "__fish_seen_subcommand_from $valid_commands" -xa "(__fish_complete_gsettings_args)"
|