mirror of
https://github.com/RoboSats/robosats.git
synced 2025-02-23 13:49:01 +00:00
282 lines
8.1 KiB
Bash
Executable File
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
|