# util # # Miscellaneous utility functions # # Copyright © 1994–2017 martin f. krafft # Released under the terms of the Artistic Licence 2.0 # # Source repository: http://git.madduck.net/v/etc/zsh.git # is_root() { test ${EUID:?} -eq 0 } array_prepend() { local arrayname="$1"; shift local i for i; do eval "typeset -ga $arrayname; $arrayname=(\$i \${$arrayname[@]/\$i})" done } array_append() { local arrayname="$1"; shift local i for i; do eval "typeset -ga $arrayname; $arrayname=(\${$arrayname[@]/\$i} \$i)" done } function trace() { ( eval "set -x; $@"; ) } function run_at_most_every() { local timespec= case "$1" in ((#b)([0-9]##)([smhd])) timespec="${match[2]}-${match[1]}";; (*) zerror "missing timespec: $@" return esac shift local sentinel_dir="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/run_at_most_once_per" mkdir --parent "${sentinel_dir}" local sentinel="${sentinel_dir}/${*//[^[:alnum:]]##/_}_${timespec}" if test -z ${sentinel}(#qNm${timespec}); then touch "${sentinel}" $@ return $? fi } # vim:ft=zsh