# This defines some general, useful functions.
+#hmmm: starting to get a bit beefy in here. perhaps there is a good way to refactor the functions into more specific folders, if they aren't really totally general purpose?
+
+##############
+
# test whether we've been here before or not.
skip_all=
type function_sentinel &>/dev/null
if [ $? -eq 0 ]; then
# there was no error, so we can skip the inits.
- if [ ! -z "$SHELL_DEBUG" ]; then
+ if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
echo "skipping function definitions, because already defined."
fi
skip_all=yes
if [ -z "$skip_all" ]; then
- if [ ! -z "$SHELL_DEBUG" ]; then
+ if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
echo "feisty meow function definitions beginning now..."
fi
IFS="$HOLDIFS"
}
+ # when passed a list of things, this will return the unique items from that list as an echo.
+ function uniquify()
+ {
+ # do the uniquification: split the space separated items into separate lines, then
+ # sort the list, then run the uniq tool on the list. results will be packed back onto
+ # one line when invoked like: local fredlist="$(uniquify a b c e d a e f a e d b)"
+ echo $* | tr ' ' '\n' | sort | uniq
+ }
+
# sets the variable in parameter 1 to the value in parameter 2, but only if
# that variable was undefined.
function set_var_if_undefined()
local pid_finder_pattern='s/ *\([0-9][0-9]*\) *.*$/\1/p'
else
- # flags which clean up the output on unixes, which apparently cygwin
- # doesn't count as. their crappy specialized ps doesn't support this.
+ # 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'
# information for su.
# get the x authority info for our current user.
- source $FEISTY_MEOW_SCRIPTS/x_win/get_x_auth.sh
+ source "$FEISTY_MEOW_SCRIPTS/security/get_x_auth.sh"
if [ -z "$X_auth_info" ]; then
# if there's no authentication info to pass along, we just do a normal su.
# fi
}
- # trashes the .#blah files that cvs and svn leave behind when finding conflicts.
+ # trashes the .#blah files that cvs and subversion leave behind when finding conflicts.
# this kind of assumes you've already checked them for any salient facts.
function clean_cvs_junk() {
for i in $*; do
unalias CORE_ALIASES_LOADED &>/dev/null
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
restore_terminal_title
return 0
}
- # defines a variable within the feisty meow environment and remembers that
- # this is a new or modified definition. if the feisty meow codebase is
- # unloaded, then so are all the variables that were defined.
- # this function always exports the variables it defines.
-# function define_yeti_variable()
-# {
-## if variable exists already, save old value for restore,
-## otherwise save null value for restore,
-## have to handle unsetting if there was no prior value of one
-## we newly defined.
-## add variable name to a list of feisty defined variables.
-#
-##hmmm: first implem just sets it up and exports the variable.
-## i.e., this method always exports.
-#export "${@}"
-#
-#
-#return 0
-# }
+ ##############
+
+#hmmm: this points to an extended functions file being needed; not all of these are core.
+
+ # displays documentation in "md" formatted files.
+ function show_md()
+ {
+ local file="$1"; shift
+ pandoc "$file" | lynx -stdin
+ }
##############
##############
+ # count the number of sub-directories in a directory and echo the result.
+ function count_directories()
+ {
+ local appsdir="$1"; shift
+ numdirs="$(find "$appsdir" -mindepth 1 -maxdepth 1 -type d | wc -l)"
+ echo $numdirs
+ }
+
+ # takes a string and capitalizes just the first character. any capital letters in the remainder of
+ # the string are made lower case. the processed string is returned by an echo.
+ function capitalize_first_char()
+ {
+ local to_dromedary="$1"; shift
+ to_dromedary="$(tr '[:lower:]' '[:upper:]' <<< ${to_dromedary:0:1})$(tr '[:upper:]' '[:lower:]' <<< ${to_dromedary:1})"
+ echo "$to_dromedary"
+ }
+
+ # given a source path and a target path, this will make a symbolic link from
+ # the source to the destination, but only if the source actually exists.
+ function make_safe_link()
+ {
+ local src="$1"; shift
+ local target="$1"; shift
+
+ if [ -d "$src" ]; then
+ ln -s "$src" "$target"
+ check_result "Creating symlink from '$src' to '$target'"
+ fi
+ echo "Created symlink from '$src' to '$target'."
+ }
+
+ ##############
+
+ # NOTE: no more function definitions are allowed after this point.
+
function function_sentinel()
{
return 0;
}
- if [ ! -z "$SHELL_DEBUG" ]; then echo "feisty meow function definitions done."; fi
+ if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then echo "feisty meow function definitions done."; fi
##############