Add bash completion for riverctl

This commit is contained in:
Leon Henrik Plickat 2021-03-13 17:54:15 +01:00 committed by Isaac Freund
parent 27cac16ced
commit eb1dd401f8
2 changed files with 82 additions and 0 deletions

View file

@ -25,6 +25,12 @@ pub fn build(b: *zbs.Builder) !void {
break :scdoc_found true;
};
const bash_completion = b.option(
bool,
"bash-completion",
"Set to true to install bash completion for riverctl. Defaults to true.",
) orelse true;
const examples = b.option(bool, "examples", "Set to true to build examples") orelse false;
const resolved_prefix = try std.fs.path.resolve(b.allocator, &[_][]const u8{b.install_prefix.?});
@ -88,6 +94,13 @@ pub fn build(b: *zbs.Builder) !void {
try scdoc_step.install();
}
if (bash_completion) {
b.installFile(
"completions/bash/riverctl",
"share/bash-completion/completions/riverctl",
);
}
if (examples) {
inline for (.{ "status", "options" }) |example_name| {
const example = b.addExecutable(example_name, "example/" ++ example_name ++ ".zig");

69
completions/bash/riverctl Normal file
View file

@ -0,0 +1,69 @@
function __riverctl_completion ()
{
if [ "${COMP_CWORD}" -eq 1 ]
then
OPTS=" \
csd-filter-add \
exit \
float-filter-add \
focus-output \
focus-view \
layout \
mod-main-count \
mod-main-factor \
move \
resize \
snap \
send-to-output \
spawn \
swap \
toggle-float \
toggle-fullscreen \
zoom \
set-focused-tags \
set-view-tags \
toggle-focused-tags \
toggle-view-tags \
spawn-tagmask \
declare-mode \
enter-mode \
map \
map-pointer \
unmap \
unmap-pointer \
attach-mode \
background-color \
border-color-focused \
border-color-unfocused \
border-width \
focus-follow-cursor \
opacity \
outer-padding \
set-repeat \
view-padding \
xcursor-theme \
declare-option \
get-option \
set-option \
mod-option"
COMPREPLY=($(compgen -W "${OPTS}" -- "${COMP_WORDS[1]}"))
elif [ "${COMP_CWORD}" -eq 2 ]
then
case "${COMP_WORDS[1]}" in
"focus-output"|"focus-view"|"send-to-output"|"swap") OPTS="next previous" ;;
"move"|"snap") OPTS="up down left right" ;;
"resize") OPTS="horizontal vertical" ;;
"map"|"unmap") OPTS="-release" ;;
"attach-mode") OPTS="top bottom" ;;
"focus-follows-cursor") OPTS="disabled normal strict" ;;
"declare-option"|"get-option"|"set-option"|"mod-option") OPTS="-output -focused-output" ;;
*) return ;;
esac
COMPREPLY=($(compgen -W "${OPTS}" -- "${COMP_WORDS[2]}"))
else
return
fi
}
complete -F __riverctl_completion riverctl