diff --git a/GNUmakefile b/GNUmakefile index 2eef88e..d1be774 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,7 +1,8 @@ -PROG= doas -MAN= doas.1 doas.conf.5 +PROG= doas +MAN= doas.1 doas.conf.5 +COMPLETION= doas.completion -SRCS= parse.y doas.c env.c +SRCS= parse.y doas.c env.c include config.mk @@ -19,17 +20,20 @@ install: ${PROG} ${MAN} mkdir -p -m 0755 ${DESTDIR}${BINDIR} mkdir -p -m 0755 ${DESTDIR}${MANDIR}/man1 mkdir -p -m 0755 ${DESTDIR}${MANDIR}/man5 + mkdir -p -m 0755 ${DESTDIR}${COMPDIR}/completions cp -f ${PROG} ${DESTDIR}${BINDIR} chown ${BINOWN}:${BINGRP} ${DESTDIR}${BINDIR}/${PROG} chmod ${BINMODE} ${DESTDIR}${BINDIR}/${PROG} cp -f doas.1 ${DESTDIR}${MANDIR}/man1 cp -f doas.conf.5 ${DESTDIR}${MANDIR}/man5 + cp -f doas.completion ${DESTDIR}${COMPDIR}/completions/doas uninstall: rm -f ${DESTDIR}${BINDIR}/${PROG} rm -f ${DESTDIR}${PAMDIR}/doas rm -f ${DESTDIR}${MANDIR}/man1/doas.1 rm -f ${DESTDIR}${MANDIR}/man5/doas.conf.5 + rm -f ${DESTDIR}${COMPDIR}/completions/doas clean: rm -f ${PROG} ${OBJS} ${OBJS:.o=.d} parse.c diff --git a/configure b/configure index 1f92f01..62e4503 100755 --- a/configure +++ b/configure @@ -14,6 +14,7 @@ usage: configure [options] --bindir=DIR user executables [PREFIX/bin] --datadir=DIR architecture-independent data files [PREFIX/share] --mandir=DIR manual pages [DATADIR/man] + --compdir=DIR bash completions [DATADIR/bash-completion] --sysconfdir=DIR directory for configuration files [/etc] --build=build-alias a cpu-vendor-opsys for the system where the application will be built @@ -50,6 +51,7 @@ for x; do --bindir) BINDIR=$var ;; --datadir) SHAREDIR=$var ;; --mandir) MANDIR=$var ;; + --compdir) COMPDIR=$var ;; --sysconfdir) SYSCONFDIR=$var ;; --build) BUILD=$var ;; --host) HOST=$var ;; @@ -131,6 +133,7 @@ esac : ${BINDIR:=${PREFIX}/bin} : ${SHAREDIR:=${PREFIX}/share} : ${MANDIR:=${SHAREDIR}/man} +: ${COMPDIR:=${SHAREDIR}/bash-completion} : ${SYSCONFDIR:=/etc} : ${BINMODE:=4755} : ${BINOWN:=root} @@ -142,6 +145,7 @@ EPREFIX ?= ${EPREFIX} BINDIR ?= ${BINDIR} SHAREDIR ?= ${SHAREDIR} MANDIR ?= ${MANDIR} +COMPDIR ?= ${COMPDIR} SYSCONFDIR?= ${SYSCONFDIR} BINMODE ?= ${BINMODE} BINOWN ?= ${BINOWN} diff --git a/doas.completion b/doas.completion new file mode 100644 index 0000000..e11c3d6 --- /dev/null +++ b/doas.completion @@ -0,0 +1,19 @@ +# bash completion for doas(1) -*- shell-script -*- + +_doas() { + local cur prev words cword split + _init_completion -s || return + + for ((i = 1; i <= cword; i++)); do + if [[ ${words[i]} != -* ]]; then + local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin + local root_command=${words[i]} + _command_offset $i + return + fi + + [[ ${words[i]} == -@(u|C) ]] && ((i++)) + done +} && complete -F _doas doas + +# ex: filetype=sh