# Helper function for contextual autocompletion of GPG key ids

function __fish_complete_gpg_key_id -d 'Complete using gpg key ids' -a __fish_complete_gpg_command list_arg
    # Use user id as description
    set -l keyid
    set -q list_arg[1]; or set list_arg --list-keys
    $__fish_complete_gpg_command $list_arg --with-colons | while read -l garbage
        switch $garbage
            case "uid*"
                # Extract user ids (note: gpg escapes colons as '\x3a')
                set -l __uid (string split ":" -- $garbage)
                set -l uid (string replace -a '\x3a' ':' -- $__uid[10])
                printf "%s\t%s\n" $keyid $uid
                # NOTE key is preceded by "sec" instead of "pub" when listing secret keys
            case "pub*" "sec*"
                # Extract key fingerprints (no subkeys)
                set -l __pub (string split ":" -- $garbage)
                set keyid $__pub[5]
        end
    end
end