mostly features, some minor bug fixes
[distro-setup] / brc
diff --git a/brc b/brc
index 85583fe0901ebf47334755be6ef47b9476589efb..99fc5b8eb1ddbc87ddd22aef2f026318b04e89c2 100644 (file)
--- a/brc
+++ b/brc
@@ -285,9 +285,10 @@ mysrc /a/bin/distro-functions/src/package-manager-abstractions
 #
 # good guide to some of its basic features is the readme file
 # https://github.com/junegunn/fzf
-if [[ -s /usr/share/doc/fzf/examples/key-bindings.bash ]]; then
-  source /usr/share/doc/fzf/examples/key-bindings.bash
-fi
+
+# if [[ -s /usr/share/doc/fzf/examples/key-bindings.bash ]]; then
+#   source /usr/share/doc/fzf/examples/key-bindings.bash
+# fi
 
 # * functions
 
@@ -958,13 +959,18 @@ digdiff() {
   diff -u /tmp/digdiff <(digsort $s2 "$@")
 }
 
+# date in a format i like reading
 dt() {
   date "+%A, %B %d, %r" "$@"
 }
 dtr() {
   date -R "$@"
 }
-ccomp date dt dtr
+# date with all digits in a format i like
+dtd() {
+  date +%F_%T% "$@"
+}
+ccomp date dt dtr dtd
 
 dus() { # du, sorted, default arg of
   du -sh ${@:-*} | sort -h
@@ -1119,6 +1125,9 @@ egrin() {
 egrinid() {
   sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).* id=([^ ]+) T="(.*)" from (<[^ ]+> .*$)/\1 \5\n \3\n \4/p' <${1:-/var/log/exim4/mainlog}
 }
+etailin() {
+  tail -F /var/log/exim4/mainlog | sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).*T="(.*)" from (<[^ ]+> .*$)/\1 \4\n \3/p'
+}
 
 
 
@@ -1151,13 +1160,61 @@ ffconcat() {
   ffmpeg -f concat -safe 0 -i $tmpf -c copy "$1"
   rm $tmpf
 }
+ffremux() {
+  local tmpf tmpd
+  if (( $# == 0 )); then
+    echo ffremux error expected args >&2
+    return 1
+  fi
+  tmpd=$(mktemp -d)
+  for f; do
+    tmpf=$tmpd/"${f##*/}"
+    ffmpeg -i "$f" -c:v copy -c:a copy $tmpf
+    cat $tmpf >"$f"
+  done
+  rm -r $tmpd
+}
+
+
 
-# full path without resolving symlinks
+# absolute path of file/dir without resolving symlinks.
+#
+# This is what realpath -s does in most cases, but sometimes it
+# actually resolves symlinks, at least when they are in /.
+#
+# Note, if run on a dir, if the final component is relative, it won't
+# resolve that. Use the below fpd for that.
+#
+# note: we could make a variation of this which
+# assigns to a variable name using eval, so that we don't have to do
+# x=$(fp somepath), which might save subshell overhead and look nice,
+# but I'm not going to bother.
 fp() {
-  local dir base
-  base="${1##*/}"
-  dir="${1%$base}"
-  printf "%s/%s\n" $(cd $dir; pwd) "$base"
+  local initial_oldpwd initial_pwd dir base
+  initial_oldpwd="$OLDPWD"
+  initial_pwd="$PWD"
+  if [[ $1 == */* ]]; then
+    dir="${1%/*}"
+    base="/${1##*/}"
+    # CDPATH because having it set will cause cd to possibly print output
+    CDPATH= cd "$dir"
+    printf "%s%s\n" "$PWD" "$base"
+    CDPATH= cd "$initial_pwd"
+    OLDPWD="$initial_oldpwd"
+  else
+    printf "%s/%s\n" "$PWD" "$1"
+  fi
+}
+# full path of directory without resolving symlinks
+fpd() {
+  local initial_oldpwd initial_pwd dir
+  initial_oldpwd="$OLDPWD"
+  initial_pwd="$PWD"
+  dir="$1"
+  CDPATH= cd "$dir"
+  printf "%s%s\n" "$PWD" "$base"
+  cd "$initial_pwd"
+  OLDPWD="$initial_oldpwd"
 }
 
 
@@ -2595,7 +2652,7 @@ if [[ $- == *i* ]]; then
     fi
     jobs_char=
     if [[ $(jobs -p) ]]; then
-      jobs_char='\j '
+      jobs_char='j\j '
     fi
     # We could test if sudo is active with sudo -nv
     # but then we get an email and log of lots of failed sudo commands.