X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fcore%2Ffunctions.sh;h=6c8bc68ad64e13b805ad1fc326f536558ae2b980;hb=f6066f2fa1be664694756f980e25f3d0a4b8228b;hp=238277e31673f2336830e8bb7135f3440fc00d79;hpb=55921f6e3a3f4c916a247ba736e2cf5719e0b430;p=feisty_meow.git diff --git a/scripts/core/functions.sh b/scripts/core/functions.sh index 238277e3..6c8bc68a 100644 --- a/scripts/core/functions.sh +++ b/scripts/core/functions.sh @@ -2,12 +2,16 @@ # 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 @@ -17,7 +21,7 @@ fi if [ -z "$skip_all" ]; then - if [ ! -z "$SHELL_DEBUG" ]; then + if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then echo "feisty meow function definitions beginning now..." fi @@ -80,6 +84,15 @@ if [ -z "$skip_all" ]; then 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() @@ -148,8 +161,9 @@ if [ -z "$skip_all" ]; then 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' @@ -244,8 +258,15 @@ if [ -z "$skip_all" ]; then done } - function fix_alsa() { - sudo /etc/init.d/alsasound restart +# function fix_alsa() { +# sudo /etc/init.d/alsasound restart +# } + + function screen() { + save_terminal_title +#hmmm: ugly absolute path here. + /usr/bin/screen $* + restore_terminal_title } # switches from a /X/path form to an X:/ form. this also processes cygwin paths. @@ -300,7 +321,7 @@ if [ -z "$skip_all" ]; then # 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. @@ -330,7 +351,7 @@ if [ -z "$skip_all" ]; then # 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 @@ -353,6 +374,7 @@ if [ -z "$skip_all" ]; then # recreates all the generated files that the feisty meow scripts use. function regenerate() { # do the bootstrapping process again. + save_terminal_title echo "regenerating feisty meow script environment." bash $FEISTY_MEOW_SCRIPTS/core/reconfigure_feisty_meow.sh echo @@ -361,32 +383,33 @@ if [ -z "$skip_all" ]; then 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 } # copies a set of custom scripts into the proper location for feisty meow # to merge their functions and aliases with the standard set. function recustomize() { - user="$1"; shift - if [ -z "$user" ]; then + local custom_user="$1"; shift + if [ -z "$custom_user" ]; then # use our default example user if there was no name provided. - user=fred + custom_user=fred fi save_terminal_title - if [ ! -d "$FEISTY_MEOW_APEX/customize/$user" ]; then - echo "The customization folder provided for $user should be:" - echo " '$FEISTY_MEOW_APEX/customize/$user'" + if [ ! -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" ]; then + echo "The customization folder provided for $custom_user should be:" + echo " '$FEISTY_MEOW_SCRIPTS/customize/$custom_user'" echo "but that folder does not exist. Skipping customization." return 1 fi regenerate >/dev/null pushd "$FEISTY_MEOW_LOADING_DOCK/custom" &>/dev/null - incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_APEX/customize/$user" "$FEISTY_MEOW_LOADING_DOCK/custom")" + incongruous_files="$(bash "$FEISTY_MEOW_SCRIPTS/files/list_non_dupes.sh" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom")" #echo "the incongruous files list is: $incongruous_files" # disallow a single character result, since we get "*" as result when nothing exists yet. @@ -396,12 +419,12 @@ if [ -z "$skip_all" ]; then echo fi popd &>/dev/null - echo "copying custom overrides for $user" + echo "copying custom overrides for $custom_user" mkdir -p "$FEISTY_MEOW_LOADING_DOCK/custom" 2>/dev/null - perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_APEX/customize/$user" "$FEISTY_MEOW_LOADING_DOCK/custom" - if [ -d "$FEISTY_MEOW_APEX/customize/$user/scripts" ]; then - echo "copying custom scripts for $user" - \cp -R "$FEISTY_MEOW_APEX/customize/$user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" + perl "$FEISTY_MEOW_SCRIPTS/text/cpdiff.pl" "$FEISTY_MEOW_SCRIPTS/customize/$custom_user" "$FEISTY_MEOW_LOADING_DOCK/custom" + if [ -d "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" ]; then + echo "copying custom scripts for $custom_user" + \cp -R "$FEISTY_MEOW_SCRIPTS/customize/$custom_user/scripts" "$FEISTY_MEOW_LOADING_DOCK/custom/" fi echo regenerate @@ -644,6 +667,17 @@ 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 + } + + ############## + # just shows a separator line for an 80 column console, or uses the first # parameter as the number of columns to expect. function separator() @@ -668,12 +702,47 @@ return 0 ############## + # 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 ##############