fix for a comment or two that got scrambled at some point.
[feisty_meow.git] / scripts / core / functions.sh
index 61118b7e8ff9e919d49904992915cb41140929f1..0f185ee5288710a4657fc0ae05ad25b1601f2695 100644 (file)
@@ -8,7 +8,7 @@ function_sentinel &>/dev/null
 if [ $? -eq 0 ]; then
   # there was no error, so we can skip the inits.
   if [ ! -z "$SHELL_DEBUG" ]; then
-    echo skipping functions.sh because already defined.
+    echo "skipping function definitions, because already defined."
   fi
   skip_all=yes
 fi
@@ -16,7 +16,7 @@ fi
 if [ -z "$skip_all" ]; then
 
   if [ ! -z "$SHELL_DEBUG" ]; then
-    echo function definitions begin...
+    echo "feisty meow function definitions beginning now..."
   fi
 
   # a handy little method that can be used for date strings.  it was getting
@@ -34,19 +34,48 @@ if [ -z "$skip_all" ]; then
     cd "$1"
   }
 
+  function is_array() {
+    [[ "$(declare -p $1)" =~ "declare -a" ]]
+  }
+
+  function is_alias() {
+    alias $1 &>/dev/null
+    return $?
+  }
+
   # displays the value of a variable in bash friendly format.
   function var() {
+    HOLDIFS="$IFS"
+    IFS=""
     while true; do
       local varname="$1"; shift
       if [ -z "$varname" ]; then
         break
       fi
-      if [ -z "${!varname}" ]; then
+
+      if is_alias "$varname"; then
+#echo found $varname is alias
+        local tmpfile="$(mktemp $TMP/aliasout.XXXXXX)"
+        alias $varname | sed -e 's/.*=//' >$tmpfile
+        echo "alias $varname=$(cat $tmpfile)"
+        \rm $tmpfile
+      elif [ -z "${!varname}" ]; then
         echo "$varname undefined"
       else
-        echo "$varname=${!varname}"
+        if is_array "$varname"; then
+#echo found $varname is array var 
+          local temparray
+          eval temparray="(\${$varname[@]})"
+          echo "$varname=(${temparray[@]})"
+#hmmm: would be nice to print above with elements enclosed in quotes, so that we can properly
+# see ones that have spaces in them.
+        else
+#echo found $varname is simple
+          echo "$varname=${!varname}"
+        fi
       fi
     done
+    IFS="$HOLDIFS"
   }
 
   function success_sound()
@@ -78,10 +107,13 @@ if [ -z "$skip_all" ]; then
   # locates a process given a search pattern to match in the process list.
   function psfind() {
     local -a patterns=("${@}")
+#echo ====
+#echo patterns list is: "${patterns[@]}"
+#echo ====
     local PID_DUMP="$(mktemp "$TMP/zz_pidlist.XXXXXX")"
     local -a PIDS_SOUGHT
     if [ "$OS" == "Windows_NT" ]; then
-      # needs to be a windows format filename for 'type' to work.
+      # windows case has some odd gyrations to get the user list.
       if [ ! -d c:/tmp ]; then
         mkdir c:/tmp
       fi
@@ -97,9 +129,11 @@ if [ -z "$skip_all" ]; then
         flag='//c'
       fi
       # we 'type' the file to get rid of the unicode result from wmic.
+      # needs to be a windows format filename for 'type' to work.
       cmd $flag type "$tmppid" >$PID_DUMP
       \rm "$tmppid"
-      local appropriate_pattern="s/^.*  *\([0-9][0-9]*\) *\$/\1/p"
+      local appropriate_pattern='s/^.*[[:space:]][[:space:]]*\([0-9][0-9]*\) *\$/\1/p'
+      local i
       for i in "${patterns[@]}"; do
         PIDS_SOUGHT+=($(cat $PID_DUMP \
           | grep -i "$i" \
@@ -107,17 +141,29 @@ if [ -z "$skip_all" ]; then
       done
     else
       /bin/ps $extra_flags wuax >$PID_DUMP
+#echo ====
+#echo got all this stuff in the pid dump file:
+#cat $PID_DUMP
+#echo ====
       # pattern to use for peeling off the process numbers.
-      local appropriate_pattern='s/^[-a-zA-Z_0-9][-a-zA-Z_0-9]*  *\([0-9][0-9]*\).*$/\1/p'
+      local appropriate_pattern='s/^[-+a-zA-Z_0-9][-+a-zA-Z_0-9]*[[:space:]][[:space:]]*\([0-9][0-9]*\).*$/\1/p'
       # remove the first line of the file, search for the pattern the
       # user wants to find, and just pluck the process ids out of the
       # results.
+      local i
       for i in "${patterns[@]}"; do
+#echo pattern is $i
+#echo phase 1: $(cat $PID_DUMP | sed -e '1d' )
+#echo phase 2: $(cat $PID_DUMP | sed -e '1d' | grep -i "$i" )
         PIDS_SOUGHT+=($(cat $PID_DUMP \
           | sed -e '1d' \
           | grep -i "$i" \
           | sed -n -e "$appropriate_pattern"))
       done
+#echo ====
+#echo pids sought list became:
+#echo "${PIDS_SOUGHT[@]}"
+#echo ====
     fi
     if [ ${#PIDS_SOUGHT[*]} -ne 0 ]; then
       local PIDS_SOUGHT2=$(printf -- '%s\n' ${PIDS_SOUGHT[@]} | sort | uniq)
@@ -281,12 +327,18 @@ if [ -z "$skip_all" ]; then
   # recreates all the generated files that the feisty meow scripts use.
   function regenerate() {
     # do the bootstrapping process again.
+    echo "regenerating feisty meow script environment."
     bash $FEISTY_MEOW_SCRIPTS/core/bootstrap_shells.sh
     echo
     # force a full reload by turning off sentinel variable and alias.
-    unset NECHUNG function_sentinel
+    # the nethack one is used by fred's customizations.
+    # interesting note perhaps: found that the NETHACKOPTIONS variable was
+    # not being unset correctly when preceded by an alias.  split them up
+    # like they are now due to that bug.
+    unset -v CORE_ALIASES_LOADED FEISTY_MEOW_GENERATED NECHUNG NETHACKOPTIONS 
+    unset -f function_sentinel 
     # reload feisty meow environment in current shell.
-    source ~/feisty_meow/scripts/core/launch_feisty_meow.sh
+    source $FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh
     # run nechung oracle to give user a new fortune.
     nechung
   }
@@ -351,13 +403,13 @@ if [ -z "$skip_all" ]; then
     regenerate
   }
 
+#uhhh, this does what now?
   function add_cygwin_drive_mounts() {
     for i in c d e f g h q z ; do
       ln -s /cygdrive/$i $i
     done
   }
 
-
   # takes a file to modify, and then it will replace any occurrences of the
   # pattern provided as the second parameter with the text in the third
   # parameter.
@@ -374,11 +426,35 @@ if [ -z "$skip_all" ]; then
     sed -i -e "s%$pattern%$replacement%g" "$file"
   }
 
+  function spacem()
+  {
+    while [ $# -gt 0 ]; do
+      arg="$1"; shift
+      if [ ! -f "$arg" -a ! -d "$arg" ]; then
+        echo "failure to find a file or directory named '$arg'."
+        continue
+      fi
+      # first we rename the file to be lower case.
+      perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$arg" &>/dev/null
+      # oops, now the name is all lower-case.  we need to make the
+      # same adjustment.
+      arg2="$(echo "$arg" | tr A-Z a-z)"
+      # we definitely wanted to adjust the case first, rather than doing all
+      # the wacky stuff this script does to the filename...  we will capture
+      # the output of the replace operaton for reporting.
+      final_name="$(perl "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg2")"
+      # now zap the intermediate part of the name off.
+      final_name="$(echo $final_name | sed -e 's/.*=> //')"
+      # printout the combined operation results.
+      echo "'$arg' => $final_name"
+    done
+  }
+
   ##############
 
   function function_sentinel() { return 0; }
   
-  if [ ! -z "$SHELL_DEBUG" ]; then echo function definitions end....; fi
+  if [ ! -z "$SHELL_DEBUG" ]; then echo "feisty meow function definitions done."; fi
   
 fi