Skip to content

Commit 40e01c3

Browse files
committed
Add bash-completion support
Loosely based on bash-completion's sudo support
1 parent 9a25a6d commit 40e01c3

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

GNUmakefile

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
PROG= doas
2-
MAN= doas.1 doas.conf.5
1+
PROG= doas
2+
MAN= doas.1 doas.conf.5
3+
COMPLETION= doas.completion
34

4-
SRCS= parse.y doas.c env.c
5+
SRCS= parse.y doas.c env.c
56

67
include config.mk
78

@@ -19,17 +20,20 @@ install: ${PROG} ${MAN}
1920
mkdir -p -m 0755 ${DESTDIR}${BINDIR}
2021
mkdir -p -m 0755 ${DESTDIR}${MANDIR}/man1
2122
mkdir -p -m 0755 ${DESTDIR}${MANDIR}/man5
23+
mkdir -p -m 0755 ${DESTDIR}${COMPDIR}/completions
2224
cp -f ${PROG} ${DESTDIR}${BINDIR}
2325
chown ${BINOWN}:${BINGRP} ${DESTDIR}${BINDIR}/${PROG}
2426
chmod ${BINMODE} ${DESTDIR}${BINDIR}/${PROG}
2527
cp -f doas.1 ${DESTDIR}${MANDIR}/man1
2628
cp -f doas.conf.5 ${DESTDIR}${MANDIR}/man5
29+
cp -f doas.completion ${DESTDIR}$(COMPDIR)/completions/doas
2730

2831
uninstall:
2932
rm -f ${DESTDIR}${BINDIR}/${PROG}
3033
rm -f ${DESTDIR}${PAMDIR}/doas
3134
rm -f ${DESTDIR}${MANDIR}/man1/doas.1
3235
rm -f ${DESTDIR}${MANDIR}/man5/doas.conf.5
36+
rm -f ${DESTDIR}${COMPDIR}/completions/doas
3337

3438
clean:
3539
rm -f ${PROG} ${OBJS} ${OBJS:.o=.d} parse.c

configure

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ usage: configure [options]
1414
--bindir=DIR user executables [PREFIX/bin]
1515
--datadir=DIR architecture-independent data files [PREFIX/share]
1616
--mandir=DIR manual pages [DATADIR/man]
17+
--compdir=DIR bash completions [DATADIR/bash-completion]
1718
--sysconfdir=DIR directory for configuration files [/etc]
1819
1920
--build=build-alias a cpu-vendor-opsys for the system where the application will be built
@@ -50,6 +51,7 @@ for x; do
5051
--bindir) BINDIR=$var ;;
5152
--datadir) SHAREDIR=$var ;;
5253
--mandir) MANDIR=$var ;;
54+
--compdir) COMPDIR=$var ;;
5355
--sysconfdir) SYSCONFDIR=$var ;;
5456
--build) BUILD=$var ;;
5557
--host) HOST=$var ;;
@@ -131,6 +133,7 @@ esac
131133
: ${BINDIR:=${PREFIX}/bin}
132134
: ${SHAREDIR:=${PREFIX}/share}
133135
: ${MANDIR:=${SHAREDIR}/man}
136+
: ${COMPDIR:=${SHAREDIR}/bash-completion}
134137
: ${SYSCONFDIR:=/etc}
135138
: ${BINMODE:=4755}
136139
: ${BINOWN:=root}
@@ -142,6 +145,7 @@ EPREFIX ?= ${EPREFIX}
142145
BINDIR ?= ${BINDIR}
143146
SHAREDIR ?= ${SHAREDIR}
144147
MANDIR ?= ${MANDIR}
148+
COMPDIR ?= ${COMPDIR}
145149
SYSCONFDIR?= ${SYSCONFDIR}
146150
BINMODE ?= ${BINMODE}
147151
BINOWN ?= ${BINOWN}

doas.completion

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# bash completion for doas(1) -*- shell-script -*-
2+
3+
_doas() {
4+
local cur prev words cword split
5+
_init_completion -s || return
6+
7+
for ((i = 1; i <= cword; i++)); do
8+
if [[ ${words[i]} != -* ]]; then
9+
local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
10+
local root_command=${words[i]}
11+
_command_offset $i
12+
return
13+
fi
14+
15+
[[ ${words[i]} == -@(u|C) ]] && ((i++))
16+
done
17+
} && complete -F _doas doas
18+
19+
# ex: filetype=sh

0 commit comments

Comments
 (0)