diff --git a/_vcsh b/_vcsh
index 9f5b00658d0751c60ade48d957ef3dbe67522114..424914407252e2946ca6949fb96e45c202da7447 100644
--- a/_vcsh
+++ b/_vcsh
@@ -5,6 +5,7 @@ _arguments \
clone\:"clone from repo"
help\:"display help"
delete\:"delete repo"
+ enter\:"Enter repo; spawn new \$SHELL"
exit\:"Exit repo; unset"
init\:"init & clone from repo"
list\:"list all repos"
diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 015e76ed573ffc8acedd1e1ff22f02282fd95f8f..71fbc6ac5a16104f593cd89d11c7d653c0c9dd22 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -7,6 +7,8 @@ vcsh(1) - manage and sync config files via git
`vcsh` delete <repo>
+`vcsh` enter <repo>
+
`vcsh` exit
`vcsh` help
@@ -50,8 +52,11 @@ A sample configuration for `vcsh` and `mr` can be found at
* delete:
Delete an existing repository.
+* enter:
+ Enter repository; spawn new <$SHELL>.
+
* exit:
- Exit repository; unset ENV
+ Exit repository; unset ENV.
* help:
Display help.
@@ -70,7 +75,7 @@ A sample configuration for `vcsh` and `mr` can be found at
Seed .gitignore.d/<repo> from git ls-files.
* use:
- Use repository; set ENV
+ Use repository; set ENV.
* <repo> <gitcommand>:
Shortcut to run `vcsh` on a repo. Will prepend `git` to <command> by itself.
diff --git a/vcsh b/vcsh
index 4ba30e53e7e3635406782fdbdd6677c1636e4ac0..b5e703eddc9f0a03ecae035c9ef3a93411471aaf 100755
--- a/vcsh
+++ b/vcsh
@@ -21,6 +21,7 @@ help() {
[<repo>] Clone from an existing repository
help Display this help text
delete Delete an existing repository
+ enter Enter repository; spawn new $SHELL
exit Exit repository; unset ENV
init <repo> Initialize a new repository
list List all repositories
@@ -89,6 +90,7 @@ if [ "$1" = 'clone' ]; then
export VCSH_REPO_NAME
export GIT_DIR="$VCSH_BASE/$VCSH_REPO_NAME.git"
elif [ "$1" = 'delete' ] ||
+ [ "$1" = 'enter' ] ||
[ "$1" = 'init' ] ||
[ "$1" = 'run' ] ||
[ "$1" = 'seed-gitignore' ] ||
@@ -177,6 +179,13 @@ To continue, type \"Yes, do as I say\""
cd "$old_dir"
verbose "delete end"
+elif [ "$VCSH_COMMAND" = 'enter' ]; then
+ verbose "enter begin"
+ use || return $?
+ $SHELL
+ leave
+ verbose "enter end"
+
elif [ "$VCSH_COMMAND" = 'exit' ]; then
verbose "exit begin"
# if [ -n "$ZSH_VERSION" ] && [ "$VCSH_NO_IGNORE_EOF" = '1' ]; then