mypastebin/.zsh/completions/_pastebin_client
2025-06-11 18:35:07 +02:00

190 lines
5.3 KiB
Plaintext

#compdef pastebin_client.sh
_pastebin_client() {
local context state line
typeset -A opt_args
API_URL="https://paste.priet.us"
# List of main subcommands
local -a subcommands
subcommands=(
'login:Log in with username and password'
'create:Create a paste from STDIN'
'upload:Upload a file'
'list:List all pastes with optional filters'
'view:Show the content of a paste'
'view_raw:Show raw content of a paste'
'delete:Delete a paste'
'register:Register a new user'
'details:Show details about the logged-in user'
'search:Search for pastes by a search term'
'favorite:Add a paste to favorites'
'unfavorite:Remove a paste from favorites'
'download:Download the content of a paste'
'download_all:Download all pastes'
'download_favorites:Download all favorite pastes'
'list_favorites:List all favorite pastes'
'shared_with_others:List pastes shared with other users'
'shared_with_me:List pastes others shared with me'
'share:Share a paste with another user'
'unshare:Unshare a paste with a user'
'edit:Edit paste from command line and upload changes to the server'
'remove_gps: remove gps metadata from pastte id'
)
# Define the autocompletion logic
_arguments -C \
'1:subcommand:->cmd' \
'*::argument:->args'
case $state in
cmd)
# Display available subcommands
_describe -t subcommands 'subcommand' subcommands
;;
args)
case $words[1] in
login)
# login <username> <password>
_arguments \
'1:Username:_default' \
'2:Password:_default'
;;
create)
_arguments \
'1:Expire after 1 day:_expire_options' \
'2:Private:_private_options' # ✅ Referencia a listas de valores
;;
remove_gps)
# remove_gps <paste_id>
_dynamic_paste_ids
;;
# upload <file> <language>
upload)
_arguments \
'1:File:_files' \
'2:Expire after 1 day:_expire_options' \
'3:Private:_private_options' # ✅ Referencia a listas de valores
;;
list)
# list options: --type, --from, --to
_arguments \
'--type=[Filter by paste type]:type:(Text Image Video)' \
'--from=[Start date (YYYY-MM-DD)]' \
'--to=[End date (YYYY-MM-DD)]'
;;
view|view_raw|delete|favorite|unfavorite|download|edit)
# view <paste_id>, view_raw <paste_id>, delete <paste_id>, favorite <paste_id>, unfavorite <paste_id>, download <paste_id>, edit <paste_id>
_dynamic_paste_ids
;;
download_all|download_favorites|list_favorites)
# No additional arguments
;;
register)
# register <username> <password>
_arguments \
'1:Username:_default' \
'2:Password:_default'
;;
details)
# details (no arguments)
;;
search)
# search <query>
_arguments '1:Search query:_default'
;;
share|unshare)
# share <paste_id> <username> [can_edit]
if [[ $words[1] == "share" ]]; then
_arguments \
'1:Paste ID:_dynamic_paste_ids' \
'2:Username:_dynamic_usernames' \
'3:Can Edit:(true false)'
else
# unshare <paste_id> <username>
_arguments \
'1:Paste ID:_dynamic_paste_ids' \
'2:Username:_dynamic_usernames'
fi
;;
esac
;;
esac
}
_expire_options() {
_values "Expiration option" \
"yes[The paste will expire after 1 day]" \
"no[The paste will not expire]"
}
_private_options() {
_values "Privacy option" \
"yes[The paste will be private]" \
"no[The paste will be public]"
}
# Function to dynamically fetch paste IDs from the server
_dynamic_paste_ids() {
local token_file="$HOME/.pastebin_token"
local token
local response
local paste_ids=()
# Check if the token file exists
if [[ -f "$token_file" ]]; then
token=$(cat "$token_file")
else
_message "No token found. Please log in first."
return
fi
# Fetch paste IDs using the API
response=$(curl -s -H "Authorization: Bearer $token" "$API_URL/pastes")
# Parse the response to extract paste IDs
if [[ $? -eq 0 ]]; then
paste_ids=($(echo "$response" | jq -r '.[].id'))
fi
if (( ${#paste_ids[@]} )); then
_values "paste_id" "${paste_ids[@]}"
else
_message "No pastes found."
fi
}
# Function to dynamically fetch usernames from the server
_dynamic_usernames() {
local token_file="$HOME/.pastebin_token"
local token
local response
local usernames=()
# Check if the token file exists
if [[ -f "$token_file" ]]; then
token=$(cat "$token_file")
else
_message "No token found. Please log in first."
return
fi
# Fetch usernames using the API
response=$(curl -s -H "Authorization: Bearer $token" "$API_URL/api/users")
# Parse the response to extract usernames
if [[ $? -eq 0 ]]; then
usernames=($(echo "$response" | jq -r '.users[]'))
fi
if (( ${#usernames[@]} )); then
_values "username" "${usernames[@]}"
else
_message "No users found."
fi
}
# Associate the autocompletion function with the script name
compdef _pastebin_client pastebin_client.sh