robosats/scripts/traditional/robosats.bash-completion
2024-12-27 20:03:06 +01:00

282 lines
8.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# adapted from
# https://github.com/bitcoin/bitcoin/blob/master/contrib/completions/bash/bitcoin-cli.bash
_bitcoin_cli() {
local cur prev words=() cword
local bitcoin_cli
# save and use original argument to invoke bitcoin-cli for -help, help and RPC
# as bitcoin-cli might not be in $PATH
bitcoin_cli="$1"
if ! command -v "$bitcoin_cli" >/dev/null 2>&1; then
return 0
fi
COMPREPLY=()
_get_comp_words_by_ref -n = cur prev words cword
if ((cword > 5)); then
case ${words[cword-5]} in
sendtoaddress)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
return 0
;;
esac
fi
if ((cword > 4)); then
case ${words[cword-4]} in
importaddress|listtransactions|setban)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
return 0
;;
signrawtransactionwithkey|signrawtransactionwithwallet)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) )
return 0
;;
esac
fi
if ((cword > 3)); then
case ${words[cword-3]} in
addmultisigaddress)
return 0
;;
getbalance|gettxout|importaddress|importpubkey|importprivkey|listreceivedbyaddress|listsinceblock)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
return 0
;;
esac
fi
if ((cword > 2)); then
case ${words[cword-2]} in
addnode)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) )
return 0
;;
setban)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "add remove" -- "$cur" ) )
return 0
;;
fundrawtransaction|getblock|getblockheader|getmempoolancestors|getmempooldescendants|getrawtransaction|gettransaction|listreceivedbyaddress|sendrawtransaction)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
return 0
;;
esac
fi
case "$prev" in
backupwallet|dumpwallet|importwallet)
_filedir
return 0
;;
getaddednodeinfo|getrawmempool|lockunspent)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
return 0
;;
getbalance|getnewaddress|listtransactions|sendmany)
return 0
;;
esac
# determine already specified args necessary for RPC
local rpcargs=()
local i
for i in ${COMP_LINE}; do
case "$i" in
-conf=*|-datadir=*|-rpc*|-chain=*|-testnet|-signet|-regtest)
rpcargs=( "${rpcargs[@]}" "$i" )
;;
esac
done
case "$cur" in
-conf=*)
cur="${cur#*=}"
_filedir
return 0
;;
-datadir=*)
cur="${cur#*=}"
_filedir -d
return 0
;;
-rpcwallet=*)
cur="${cur#*=}"
wallets="$($bitcoin_cli "${rpcargs[@]}" listwallets | jq -r '.[]')"
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "$wallets" -- "$cur" ) )
return 0
;;
-*=*) # prevent nonsense completions
return 0
;;
*)
local helpopts commands completions
# only parse -help if senseful
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
helpopts=$($bitcoin_cli -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
fi
# only parse help if senseful
if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then
commands=$($bitcoin_cli "${rpcargs[@]}" help 2>/dev/null | awk '$1 ~ /^[a-z]/ { print $1; }')
fi
completions="$helpopts $commands generatetoaddress"
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "$completions" -- "$cur" ) )
# Prevent space if an argument is desired
local word
for word in "${COMPREPLY[@]}"; do
case "$word" in
*=)
compopt -o nospace
break
;;
esac
done
return 0
;;
esac
} &&
complete -F _bitcoin_cli btc_reg
# adapted from
# https://github.com/ElementsProject/lightning/blob/master/contrib/lightning-cli.bash-completion
_lightning_cli() {
local command_name="$1"
# local current_word="$2"
local previous_word="$3"
local lightning_cli
# lightning_cli might not be in $PATH
lightning_cli="$command_name"
if ! command -v "$lightning_cli" >/dev/null 2>&1; then
return 0
fi
if [ "${COMP_CWORD}" -eq 1 ]; then
complete_opt=true
else
case "$previous_word" in
--help|-h) complete_opt=false ;;
help|-*) complete_opt=true ;;
*) complete_opt=false ;;
esac
fi
if [ "$complete_opt" = true ]; then
# shellcheck disable=SC2034
local cur prev words=() cword
COMPREPLY=()
_get_comp_words_by_ref -n = cur prev words cword
case "$cur" in
-*=*) # prevent nonsense completions
return 0
;;
*)
local helpopts globalcmds
# get the global options, starting with --
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
globalcmds="$(
$lightning_cli --help 2>&1 |
tr '|' '\n' |
sed -n -e 's/ .*//' -e 's/\(-[-a-z0-9A-Z]*\).*/\1/p'
)"
fi
# get the regular commands
if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then
helpopts="$(
$lightning_cli help 2>/dev/null |
sed -n 's/^\([a-z][a-z_-]*\).*/\1/p' |
sed '$ d'
)"
fi
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "$helpopts $globalcmds" -X "*," -- "$cur" ) )
;;
esac
else
_minimal
fi
} &&
complete -F _lightning_cli cln_coord &&
complete -F _lightning_cli cln_user
# adapted from
# https://github.com/lightningnetwork/lnd/blob/master/contrib/lncli.bash-completion
_lncli() {
local cur prev words=() cword
local lncli
# lncli might not be in $PATH
lncli="$1"
if ! command -v "$lncli" >/dev/null 2>&1; then
return 0
fi
COMPREPLY=()
_get_comp_words_by_ref -n = cur prev words cword
case "$prev" in
# example of further completion
newaddress)
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "p2wkh np2wkh" -- "$cur" ) )
return 0
;;
esac
case "$cur" in
-*=*) # prevent nonsense completions
return 0
;;
esac
if [ "$cword" -eq 1 ] || {
[ "$cword" -eq 2 ] && [ "$prev" = "help" ]
}; then
local helpopts globalcmds completions
# get the global options, starting with --
if [[ -z "$cur" || "$cur" =~ ^- ]]; then
globalcmds=$($lncli help 2>&1 | awk '$1 ~ /^-/ { sub(/,/, ""); print $1}')
fi
# get the regular commands
if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then
helpopts=$($lncli help 2>/dev/null | awk '$1 ~ /^[a-z]/ { print $1; }' )
fi
completions="$helpopts $globalcmds help"
# shellcheck disable=SC2207
COMPREPLY=( $( compgen -W "$completions" -X "*," -- "$cur" ) )
fi
} &&
complete -F _lncli lnd_coord &&
complete -F _lncli lnd_user