plugged in timestamper in a couple places
[feisty_meow.git] / scripts / core / functions.sh
index fa5df8630417d3ee51db2f89466c71a4234ac4d5..c99cb0b6ff305de050d2cd176f235f7eef25c528 100644 (file)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # This defines some general, useful functions.
 
@@ -32,19 +32,34 @@ if [ -z "$skip_all" ]; then
     if [ -z "$sep" ]; then sep='_'; fi
     date +"%Y$sep%m$sep%d$sep%H%M$sep%S" | tr -d '/\n/'
   }
+
+  # a slightly different but also handy time and date function.  this is
+  # intended for prefixing on log lines, so that each line has the time it
+  # occurred as the first element.
+  function timestamper() {
+    date +"[%Y-%m-%d %H:%M:%S] " | tr -d '/\n/'
+  }
   
   # a wrapper for the which command that finds items on the path.  some OSes
   # do not provide which, so we want to not be spewing errors when that
   # happens.
   function whichable()
   {
-    to_find="$1"; shift
-    local WHICHER="$(\which which 2>/dev/null)"
+    local to_find="$1"; shift
+    local WHICHER="$(/usr/bin/which which 2>/dev/null)"
+#>&2 echo "got whicher as: $WHICHER"
     if [ $? -ne 0 ]; then
       # there is no which command here.  we produce nothing due to this.
       echo
+      return 2
     fi
-    echo $($WHICHER $to_find 2>/dev/null)
+    local sporkenz  # must be defined local here, before call, or we don't get exit value?!
+    sporkenz=$($WHICHER "$to_find" 2>/dev/null)
+#>&2 echo "broken with this line, but here is exit val: $?"
+    local err=$?
+#>&2 echo "got whicher as: $WHICHER"
+    echo $sporkenz
+    return $err
   }
 
   # makes a directory of the name specified and then tries to change the
@@ -68,6 +83,7 @@ if [ -z "$skip_all" ]; then
   # makes the status of pipe number N (passed as first parameter) into the
   # main return value (i.e., the value for $?).  this is super handy to avoid
   # repeating the awkward looking code below in multiple places.
+  # the numbering starts at zero, for the first item at the head of the pipe.
   function promote_pipe_return()
   {
     ( exit ${PIPESTATUS[$1]} )
@@ -205,7 +221,7 @@ if [ -z "$skip_all" ]; then
   # accepts any number of arguments and outputs them to the feisty meow event log.
   function log_feisty_meow_event()
   {
-    echo -e "$(date_stringer) -- ${USER}@$(hostname): $*" >> "$FEISTY_MEOW_EVENT_LOG"
+    echo -e "$(timestamper)-- ${USER}@$(hostname): $*" >> "$FEISTY_MEOW_EVENT_LOG"
   }
 
   ##############
@@ -284,15 +300,18 @@ if [ -z "$skip_all" ]; then
       # gets cygwin's (god awful) ps to show windoze processes also.
       local EXTRA_DOZER_FLAGS="-W"
       # pattern to use for peeling off the process numbers.
-      local pid_finder_pattern='s/ *\([0-9][0-9]*\) *.*$/\1/p'
-
+#      local pid_finder_cmd="awk -- '{ print \$4; }'"
+      local field_number=4
     else
       # flags which clean up the process listing output on unixes.
       # apparently cygwin doesn't count as a type of unix, because their
       # crummy specialized ps command doesn't support normal ps flags.
       local EXTRA_UNIX_FLAGS="-o pid,args"
       # pattern to use for peeling off the process numbers.
-      local pid_finder_pattern='s/^[[:space:]]*\([0-9][0-9]*\).*$/\1/p'
+#      local pid_finder_cmd="sed -n -e \\'s/^[[:space:]]*\([0-9][0-9]*\).*$/\\\\1/p\\'"
+#echo pidfinder: $pid_finder_cmd
+#      local pid_finder_cmd="awk -- '{ print \$1; }'"
+      local field_number=1
     fi
 
     /bin/ps $EXTRA_DOZER_FLAGS $EXTRA_UNIX_FLAGS $user_flag | tail -n +2 >$PID_DUMP
@@ -309,7 +328,7 @@ if [ -z "$skip_all" ]; then
       PIDS_SOUGHT+=($(cat $PID_DUMP \
         | grep -i "$i" \
         | grep -v "$excluder" \
-        | sed -n -e "$pid_finder_pattern"))
+        | awk -- "{ print \$${field_number}; }" ))
     done
 #echo ====
 #echo pids sought list became:
@@ -364,6 +383,11 @@ if [ -z "$skip_all" ]; then
         # special case for windows.
         ps | head -1
         for curr in $p; do
+#hmmm: currently not working right for windows cygwin.  we're getting proper
+#      winpids out of the list now, but not able to use them in ps?
+#      should i be keeping the weirdo pid that we were getting in column 1 and
+#      use that, except when talking to taskkill?
+#      need further research.
           ps -W -p $curr | tail -n +2
         done
       else
@@ -410,12 +434,12 @@ if [ -z "$skip_all" ]; then
       DOSSYHOME="$(cygpath -am "$HOME")"
     fi
 
-    if [ ! -z "$SERIOUS_SLASH_TREATMENT" ]; then
-      # unless this flag is set, in which case we force dos slashes.
-      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
-    else
+#    if [ ! -z "$SERIOUS_SLASH_TREATMENT" ]; then
+#      # unless this flag is set, in which case we force dos slashes.
+#      echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/' | sed -e 's/\//\\/g'
+#    else
       echo "$1" | sed -e "s?^$HOME?$DOSSYHOME?g" | sed -e 's/\\/\//g' | sed -e 's/\/cygdrive//' | sed -e 's/\/\([a-zA-Z]\)\/\(.*\)/\1:\/\2/'
-    fi
+#    fi
   }
   
 #  # switches from an X:/ form to a /cygdrive/X/path form.  this is only useful
@@ -429,8 +453,12 @@ if [ -z "$skip_all" ]; then
   # returns a successful value (0) if this system is debian or ubuntu.
   function debian_like() {
     # decide if we think this is debian or ubuntu or a variant.
-    DEBIAN_LIKE=$(if [ ! -z "$(grep -i debian /etc/issue)" \
-        -o ! -z "$(grep -i ubuntu /etc/issue)" ]; then echo 1; else echo 0; fi)
+    DEBIAN_LIKE=$( \
+      if [ \
+        ! -z "$(grep -i debian /etc/issue)" -o \
+        ! -z "$(grep -i ubuntu /etc/issue)" -o \
+        ! -z "$(grep -i 'Pop._OS' /etc/issue)" \
+      ]; then echo 1; else echo 0; fi)
     if [ $DEBIAN_LIKE -eq 1 ]; then
       # success; this is debianish.
       return 0
@@ -497,7 +525,7 @@ if [ -z "$skip_all" ]; then
   function regenerate() {
     # do the bootstrapping process again.
     save_terminal_title
-    echo "regenerating feisty meow script environment."
+    echo "$(timestamper)regenerating feisty meow script environment."
     bash $FEISTY_MEOW_SCRIPTS/core/reconfigure_feisty_meow.sh
     echo
     # force a full reload by turning off sentinel variables and methods.
@@ -768,11 +796,11 @@ return 0
   {
     count=$1; shift
     if [ -z "$count" ]; then
-      count=79
+      count=$(($COLUMNS - 1))
     fi
     echo
     local i
-    for ((i=0; i < $count - 1; i++)); do
+    for ((i=0; i < $count; i++)); do
       echo -n "="
     done
     echo
@@ -940,7 +968,10 @@ return 0
   ##############
 
   # space 'em all: fixes naming for all of the files of the appropriate types
-  # in the directories specified.
+  # in the directories specified.  we skip any file with a dot in front, to
+  # respect their hidden nature.  currently the set of files we'll rename is
+  # very boutique; it's in this function, and just happens to be the types of
+  # files we work with a lot.
   function spacemall() {
     local -a dirs=("${@}")
     if [ ${#dirs[@]} -eq 0 ]; then
@@ -951,9 +982,11 @@ return 0
 #hmmm: any way to do the below more nicely or reusably?
 #hmmm: yes!  a variable with a list of files that are considered TEXT_FILE_EXTENSIONS or something like that.
 #hmmm: yes continued!  also a variable for BINARY_FILE_EXTENSIONS to avoid those, where we need to in other scripts.
+#hmmm: wait, we actually have a mix here, since this is a renaming function and not a searching function; get it straight!
+#hmmm: would the composition of those two types of extensions cover all the files i want to rename?  they have to be "important".
     find "${dirs[@]}" -follow -maxdepth 1 -mindepth 1 -type f -and -not -iname ".[a-zA-Z0-9]*" | \
         grep -i \
-"csv\|doc\|docx\|eml\|html\|jpeg\|jpg\|m4a\|mov\|mp3\|ods\|odt\|pdf\|png\|ppt\|pptx\|rtf\|txt\|vsd\|vsdx\|xls\|xlsx\|xml\|zip" | \
+"csv\|doc\|docx\|eml\|html\|ics\|jpeg\|jpg\|m4a\|mov\|mp3\|odp\|ods\|odt\|pdf\|png\|ppt\|pptx\|rtf\|txt\|vsd\|vsdx\|wav\|webp\|xls\|xlsx\|xml\|zip" | \
         sed -e 's/^/"/' | sed -e 's/$/"/' | \
         xargs bash "$FEISTY_MEOW_SCRIPTS/files/spacem.sh"
     # drop the temp file now that we're done.