From: martin f. krafft <madduck@madduck.net>
Date: Thu, 1 Mar 2018 02:47:04 +0000 (+1300)
Subject: provide run_at_most_every function
X-Git-Url: https://git.madduck.net/etc/zsh.git/commitdiff_plain/8375a5c6acd872547e7f2236a5a9f55dd04ac791?ds=sidebyside

provide run_at_most_every function
---

diff --git a/.zsh/util b/.zsh/util
index 422dba9..9b86536 100644
--- a/.zsh/util
+++ b/.zsh/util
@@ -30,4 +30,24 @@ array_append() {
 
 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