summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--bash-completion22
-rw-r--r--functions47
-rwxr-xr-xrc.d3
-rwxr-xr-xrc.sysinit4
-rw-r--r--zsh-completion37
6 files changed, 94 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index ad8a058..968cfb9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
VER := $(shell git describe)
-DIRS := /etc/rc.d /etc/conf.d /etc/rc.d/functions.d /etc/cron.hourly /sbin /etc/modprobe.d
+DIRS := /etc/rc.d /etc/conf.d /etc/rc.d/functions.d /etc/cron.hourly /sbin /etc/modprobe.d /etc/bash_completion.d /usr/share/zsh/site-functions
minilogd: minilogd.o
@@ -14,6 +14,8 @@ install: minilogd installdirs
install -m755 -t $(DESTDIR)/etc/rc.d hwclock network netfs
install -m755 -t $(DESTDIR)/sbin minilogd rc.d modprobe-blacklist
ln -s /run/initscripts/modprobe-blacklist.conf $(DESTDIR)/etc/modprobe.d/arch-blacklist.conf
+ install -m644 -T bash-completion $(DESTDIR)/etc/bash_completion.d/rc.d
+ install -m644 -T zsh-completion $(DESTDIR)/usr/share/zsh/site-functions/_rc.d
clean:
rm -f minilogd minilogd.o
diff --git a/bash-completion b/bash-completion
new file mode 100644
index 0000000..5151972
--- /dev/null
+++ b/bash-completion
@@ -0,0 +1,22 @@
+# rc.d bash completion by Seblu <seblu@seblu.net>
+
+_rc.d ()
+{
+ local action="help list start stop reload restart"
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local caction="${COMP_WORDS[1]}"
+ if ((${COMP_CWORD} == 1)); then
+ COMPREPLY=($(compgen -W "${action}" -- "$cur"))
+ elif [[ "$caction" =~ help|list ]]; then
+ COMPREPLY=()
+ elif [[ "$caction" == start ]]; then
+ COMPREPLY=($(comm -23 <(cd /etc/rc.d && compgen -f -X 'functions*' "$cur"|sort) <(cd /run/daemons/ && compgen -f "$cur"|sort)))
+ elif [[ "$caction" =~ stop|restart|reload ]]; then
+ COMPREPLY=($(cd /run/daemons/ && compgen -f "$cur"|sort))
+ elif ((${COMP_CWORD} > 1)); then
+ COMPREPLY=($(cd /etc/rc.d && compgen -f -X 'functions*' "$cur"|sort))
+ fi
+}
+complete -F _rc.d rc.d
+
+# vim: set ts=2 sw=2 ft=sh noet:
diff --git a/functions b/functions
index 6d279cc..27e53d0 100644
--- a/functions
+++ b/functions
@@ -49,28 +49,37 @@ else
export LANG=C
fi
-# colors:
-if [[ $USECOLOR = YES || $USECOLOR = yes ]]; then
- C_MAIN="\033[1;37;40m" # main text
-
- C_OTHER="\033[1;34;40m" # prefix & brackets
- C_SEPARATOR="\033[1;30;40m" # separator
-
- C_BUSY="\033[0;36;40m" # busy
- C_FAIL="\033[1;31;40m" # failed
- C_DONE="\033[1;37;40m" # completed
- C_BKGD="\033[1;35;40m" # backgrounded
-
- C_H1="\033[1;37;40m" # highlight text 1
- C_H2="\033[1;36;40m" # highlight text 2
-
- C_CLEAR="\033[1;0m"
+# set colors
+if [[ $USECOLOR =~ yes|YES ]]; then
+ if /bin/tput setaf 0 &>/dev/null; then
+ C_CLEAR="$(tput sgr0)" # clear text
+ C_MAIN="${C_CLEAR}$(/bin/tput bold)" # main text
+ C_OTHER="${C_MAIN}$(/bin/tput setaf 4)" # prefix & brackets
+ C_SEPARATOR="${C_MAIN}$(/bin/tput setaf 0)" # separator
+ C_BUSY="${C_CLEAR}$(/bin/tput setaf 6)" # busy
+ C_FAIL="${C_MAIN}$(/bin/tput setaf 1)" # failed
+ C_DONE="${C_MAIN}" # completed
+ C_BKGD="${C_MAIN}$(/bin/tput setaf 5)" # backgrounded
+ C_H1="${C_MAIN}" # highlight text 1
+ C_H2="${C_MAIN}$(/bin/tput setaf 6)" # highlight text 2
+ else
+ C_CLEAR="\e[m" # clear text
+ C_MAIN="\e[;1m" # main text
+ C_OTHER="\e[1;34m" # prefix & brackets
+ C_SEPARATOR="\e[1;30m" # separator
+ C_BUSY="\e[;36m" # busy
+ C_FAIL="\e[1;31m" # failed
+ C_DONE="${C_MAIN}" # completed
+ C_BKGD="\e[1;35m" # backgrounded
+ C_H1="${$C_MAIN}" # highlight text 1
+ C_H2="\e[1;36m" # highlight text 2
+ fi
fi
if [[ -t 1 ]]; then
- SAVE_POSITION="\033[s"
- RESTORE_POSITION="\033[u"
- DEL_TEXT="\033[$(($STAT_COL+4))G"
+ SAVE_POSITION="\e[s"
+ RESTORE_POSITION="\e[u"
+ DEL_TEXT="\e[$(($STAT_COL+4))G"
else
SAVE_POSITION=""
RESTORE_POSITION=""
diff --git a/rc.d b/rc.d
index 02c2b6c..55871b1 100755
--- a/rc.d
+++ b/rc.d
@@ -50,6 +50,7 @@ case $1 in
ENV+=" PREVLEVEL='${runlevel:0:1}'"
ENV+=" RUNLEVEL='${runlevel:2:1}'"
ENV+=" CONSOLE='${CONSOLE:-/dev/console}'"
+ ENV+=" TERM='${TERM}'"
for i; do
[[ -x "/etc/rc.d/$i" ]] && cd / && eval /usr/bin/env -i $ENV "/etc/rc.d/$i" "$action"
(( ret += !! $? )) # clamp exit value to 0/1
@@ -58,4 +59,4 @@ esac
exit $ret
-# vim: set ts=2 sw=2 noet:
+# vim: set ts=2 sw=2 ft=sh noet:
diff --git a/rc.sysinit b/rc.sysinit
index 9d30da2..b8553e9 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -354,7 +354,7 @@ if [[ ${LOCALE,,} =~ utf ]]; then
# but also when user has set vt.default_utf8=0 but LOCALE is *.UTF-8.
for i in /dev/tty[0-9]*; do
/usr/bin/kbd_mode -u < ${i}
- printf "\033%%G" > ${i}
+ printf "\e%%G" > ${i}
done
echo 1 > /sys/module/vt/parameters/default_utf8
stat_done
@@ -364,7 +364,7 @@ else
# make non-UTF-8 consoles work on 2.6.24 and newer kernels
for i in /dev/tty[0-9]*; do
/usr/bin/kbd_mode -a < ${i}
- printf "\033%%@" > ${i}
+ printf "\e%%@" > ${i}
done
echo 0 > /sys/module/vt/parameters/default_utf8
stat_done
diff --git a/zsh-completion b/zsh-completion
new file mode 100644
index 0000000..f1b7165
--- /dev/null
+++ b/zsh-completion
@@ -0,0 +1,37 @@
+#compdef rc.d
+
+_rc.d () {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments "1: :->action" "*: :->service"
+
+ case $state in
+ action)
+ _arguments "1:action:(list help start stop restart)"
+ ;;
+ service)
+ local action="$words[2]"
+ curcontext="${curcontext%:*:*}:rc.d-${action}:"
+
+ case $action in
+ list|help)
+ _arguments "*: :"
+ ;;
+ start)
+ _arguments "*: :($(comm -23 <(echo /etc/rc.d/*(N-*:t)|tr ' ' '\n') <(echo /run/daemons/*(N:t)|tr ' ' '\n')))"
+ ;;
+ stop|restart|reload)
+ _arguments "*: :(/run/daemons/*(N:t))"
+ ;;
+ *)
+ _arguments "*: :(/etc/rc.d/*(N-*:t))"
+ ;;
+ esac
+ ;;
+ esac
+}
+
+_rc.d "$@"
+
+# vim: set ts=2 sw=2 ft=sh noet: