done
 }
 
+#get_files() {
+#      return $(git ls-files)
+#}
+#
+#list_tracked_all() {
+#      use
+#      for repo in $(list); do
+#              files="$files $(get_files $repo)"
+#      done
+#      echo $files | sort -u
+#}
+
 rename() {
        git_dir_exists
        [ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54
        echo '*' > "$tempfile" || fatal "could not write to '$tempfile'" 57
        for gitignore in $gitignores; do
                echo "$gitignore" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57
-               [ -d "$gitignore" ] && echo "$gitignore/*" | sed 's/^/!/'>> "$tempfile" || fatal "could not write to '$tempfile'" 57
+               [ -d "$gitignore" ] && { echo "$gitignore/*" | sed 's/^/!/' >> "$tempfile" || fatal "could not write to '$tempfile'" 57; }
        done
-       if [ diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null ]; then
+       if diff -N "$tempfile" "$HOME/.gitignore.d/$VCSH_REPO_NAME" > /dev/null; then
                rm -f "$tempfile" || error "could not delete '$tempfile'"
                exit
        fi
 elif [ "$1" = 'delete' ] ||
      [ "$1" = 'enter' ] ||
      [ "$1" = 'init' ] ||
+     [ "$1" = 'list-tracked-all' ] ||
      [ "$1" = 'rename' ] ||
      [ "$1" = 'run' ] ||
      [ "$1" = 'seed-gitignore' ] ||
        export VCSH_REPO_NAME="$2"
        export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git"
        [ "$VCSH_COMMAND" = 'rename' ]         && export GIT_DIR_NEW="$VCSH_BASE/$3.git"
-       [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$@"
-       [ "$VCSH_COMMAND" = 'seed-gitignore' ] && export VCSH_COMMAND='seed_gitignore'
+       [ "$VCSH_COMMAND" = 'run' ] && shift 2 && export VCSH_EXTERNAL_COMMAND="$*"
+       [ "$VCSH_COMMAND" = 'seed-gitignore' ]
+#      [ "$VCSH_COMMAND" = 'seed-gitignore' ] && export VCSH_COMMAND='seed_gitignore'
 elif [ "$1" = 'list' ]; then
        export VCSH_COMMAND="$1"
 elif [ -n "$1" ]; then
        help && exit
 fi
 
+# Did we receive a directory instead of a name?
+# Mangle the input to fit normal operation.
+if echo $VCSH_REPO_NAME | grep -q '/'; then
+       export GIT_DIR=$VCSH_REPO_NAME
+       export VCSH_REPO_NAME=$(basename $VCSH_REPO_NAME .git)
+fi
+
+
 for check_directory in "$VCSH_BASE" "$HOME/.gitignore.d"
 do
        if [ ! -d "$check_directory" ]; then
 done
 
 verbose "$VCSH_COMMAND begin"
+export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
 $VCSH_COMMAND
 verbose "$VCSH_COMMAND end, exiting"