a step to remove __fish_sgrep per issue #2450

This commit is contained in:
Kurtis Rader 2017-04-14 23:21:17 -07:00
parent 0be8d0d385
commit cc3efcc3ab
2 changed files with 22 additions and 9 deletions

View file

@ -3,6 +3,25 @@
# #
__fish_complete_ssh scp __fish_complete_ssh scp
# Helper functions to simplify the completions.
function __scp2ssh_port_number
# There is a silly inconsistency between the ssh and scp commands regarding the short flag name
# for specifying the TCP port number. This function deals with that by extracting the port
# number if present and emitting it as a flag appropriate for ssh.
set -l port (commandline -c | string match -r -- ' -P ?(\d+)\b')
and echo -p\n$port[2]
end
function __scp_remote_target
set -l target (commandline -ct | string match -r -- '(.*):')
and echo $target[2]
end
function __scp_remote_path_prefix
set -l path_prefix (commandline -ct | string match -r -- ':(.*)')
and echo $path_prefix[2]
end
# #
# scp specific completions # scp specific completions
# #
@ -11,7 +30,6 @@ __fish_complete_ssh scp
# Hostname # Hostname
# #
complete -c scp -d Hostname -n "commandline --cut-at-cursor --current-token | string match -v '*:*'" -a " complete -c scp -d Hostname -n "commandline --cut-at-cursor --current-token | string match -v '*:*'" -a "
(__fish_print_hostnames): (__fish_print_hostnames):
( (
@ -29,15 +47,10 @@ complete -c scp -d "Local Path" -n "commandline -ct | string match ':'"
# Remote path # Remote path
# #
complete -c scp -d "Remote Path" -f -n "commandline --cut-at-cursor --current-token | string match -r '.+:'" -a " complete -c scp -d "Remote Path" -f -n "commandline --cut-at-cursor --current-token | string match -r '.+:'" -a "
(__scp_remote_target):(
( # Get the list of remote files from the scp target.
#Prepend any user@host information supplied before the remote completion ssh (__scp2ssh_port_number) -o 'BatchMode yes' (__scp_remote_target) ls\ -dp\ (__scp_remote_path_prefix)\* 2>/dev/null
commandline -ct| __fish_sgrep -o '.*:'
)(
#Get the list of remote files from the specified ssh server
ssh (commandline -c| __fish_sgrep -o '\-P [0-9]*'|tr P p) -o \"BatchMode yes\" (commandline -ct|sed -ne 's/\(.*\):.*/\1/p') ls\ -dp\ (commandline -ct|sed -ne 's/.*://p')\* 2> /dev/null
) )
" "
complete -c scp -s B -d "Batch mode" complete -c scp -s B -d "Batch mode"
complete -c scp -s l -x -d "Bandwidth limit" complete -c scp -s l -x -d "Bandwidth limit"