Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Kevin Lyda
vcsh
Commits
6d52838a
Commit
6d52838a
authored
Aug 23, 2017
by
Roland Hopferwieser
Browse files
Add bash-completion
parent
36a7cedf
Changes
1
Hide whitespace changes
Inline
Side-by-side
_vcsh_bash
0 → 100644
View file @
6d52838a
# bash completion for vcsh.
# run git command
# based on bash_completion:_command_offset()
_vcsh_git_command
()
{
local
word_offset
=
$1
for
((
i
=
0
;
i <
$word_offset
;
i++
))
;
do
for
((
j
=
0
;
j <
=
${#
COMP_LINE
}
;
j++
))
;
do
[[
"
$COMP_LINE
"
==
"
${
COMP_WORDS
[i]
}
"
*
]]
&&
break
COMP_LINE
=
${
COMP_LINE
:1
}
((
COMP_POINT--
))
done
COMP_LINE
=
${
COMP_LINE
#
"
${
COMP_WORDS
[i]
}
"
}
((
COMP_POINT-
=
${#
COMP_WORDS
[i]
}
))
done
COMP_LINE
=
"git
$COMP_LINE
"
((
COMP_POINT+
=
4
))
# shift COMP_WORDS elements and adjust COMP_CWORD
for
((
i
=
1
;
i <
=
COMP_CWORD -
$word_offset
+ 1
;
i++
))
;
do
COMP_WORDS[i]
=
${
COMP_WORDS
[i+
$word_offset
-1]
}
done
for
((
i
;
i <
=
COMP_CWORD
;
i++
))
;
do
unset
'COMP_WORDS[i]'
done
COMP_WORDS[0]
=
git
((
COMP_CWORD -
=
$word_offset
- 1
))
local
cspec
=
$(
complete
-p
git 2>/dev/null
)
if
[[
-n
$cspec
]]
;
then
if
[[
${
cspec
#* -F
}
!=
$cspec
]]
;
then
local
func
=
${
cspec
#*-F
}
func
=
${
func
%% *
}
if
[[
${#
COMP_WORDS
[@]
}
-ge
2
]]
;
then
$func
git
"
${
COMP_WORDS
[
${#
COMP_WORDS
[@]
}
-1]
}
"
"
${
COMP_WORDS
[
${#
COMP_WORDS
[@]
}
-2]
}
"
else
$func
git
"
${
COMP_WORDS
[
${#
COMP_WORDS
[@]
}
-1]
}
"
fi
# restore initial compopts
local
opt
while
[[
$cspec
==
*
" -o "
*
]]
;
do
# FIXME: should we take "+o opt" into account?
cspec
=
${
cspec
#*-o
}
opt
=
${
cspec
%% *
}
compopt
-o
$opt
cspec
=
${
cspec
#
$opt
}
done
fi
fi
}
_vcsh
()
{
local
cur prev words cword OPTS
_init_completion
-n
=
||
return
local
repos cmds
repos
=(
$(
command
vcsh list
)
)
cmds
=
"clone delete enter foreach help init list list-tracked list-untracked
pull push rename run status upgrade version which write-gitignore"
local
subcword cmd subcmd
for
((
subcword
=
1
;
subcword <
${#
words
[@]
}
-1
;
subcword++
))
;
do
[[
-n
$cmd
&&
${
words
[subcword]
}
!=
-
*
]]
&&
subcmd
=
${
words
[subcword]
}
&&
break
[[
${
words
[subcword]
}
!=
-
*
]]
&&
cmd
=
${
words
[subcword]
}
done
if
[[
-z
$cmd
]]
;
then
case
$prev
in
-c
)
COMPREPLY
=(
$(
compgen
-f
--
$cur
)
)
return
;;
esac
case
$cur
in
-
*
)
OPTS
=
'-c -d -h -v'
COMPREPLY
=(
$(
compgen
-W
"
${
OPTS
[*]
}
"
--
$cur
)
)
return
;;
esac
COMPREPLY
=(
$(
compgen
-W
"
${
repos
[*]
}
${
cmds
[*]
}
"
--
$cur
)
)
return
0
fi
case
$cmd
in
help
|
init|list|pull|push|version|which
)
return
;;
list-untracked
)
[[
$cur
==
-
*
]]
&&
\
COMPREPLY
=(
$(
compgen
-W
'-a -r'
--
$cur
)
)
&&
return
;;
&
run
)
if
[[
-n
$subcmd
&&
-n
"
${
repos
[
$subcmd
]
}
"
]]
;
then
_command_offset
$((
$subcword
+
1
))
return
fi
;;
&
delete|enter|list-tracked|list-untracked|rename|run|status|upgrade|write-gitignore
)
# return repos
if
[[
-z
$subcmd
]]
;
then
COMPREPLY
=(
$(
compgen
-W
"
${
repos
[*]
}
"
--
$cur
)
)
return
fi
return
;;
clone
)
[[
$cur
==
-
*
]]
&&
\
COMPREPLY
=(
$(
compgen
-W
'-b'
--
$cur
)
)
return
;;
foreach
)
[[
$cur
==
-
*
]]
\
&&
COMPREPLY
=(
$(
compgen
-W
"-g"
--
$cur
)
)
&&
return
_vcsh_git_command
$subcword
return
;;
esac
# git command on repository
if
[[
-n
"
${
repos
[
$cmd
]
}
"
]]
;
then
_vcsh_git_command
$subcword
fi
return
0
}
complete
-F
_vcsh vcsh
# vim: ft=sh:
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment