Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Command not found handler for non-searched commands?



On Sun, 29 Apr 2012, Benjamin R. Haskell wrote:

On Sun, 29 Apr 2012, Benjamin R. Haskell wrote:

I use autocd quite a bit. And often the first thing I want to do when starting a new project is to create a directory and cd into it. I tried creating the following command_not_found_handler:


Okay.  Different tack, different problem:

preexec {
 __last_command=$1
 # ... etc.
}

trap '
 local dir= create=
 set -- ${=__last_command}
 (( $# == 1 )) || return 1
 [[ $1 == */* ]] || return 1
 dir=$1
 read -q "create?Create $dir [y/N]? " || return 1
 mkdir -p $dir || return 1
 cd $dir
' ZERR

Now $dir ends up containing '~/tmp/one-off-project', with the '~' unexpanded. Seeing as how the directory doesn't yet exist, I can't just glob it. Is there a function to do just named-directory expansion?

Answered my own question, kind of... I found the '~' parameter expansion flag. Still don't 100% understand why pattern expansion (terminology?) is different than globbing w.r.t. non-existent files. Final solution ended up as the following (Difference is the 'dir=${~1}' line):


preexec {
 __last_command=$1
 # ... etc.
}

trap '
 local dir= create=
 set -- ${=__last_command}
 (( $# == 1 )) || return 1
 [[ $1 == */* ]] || return 1
 dir=${~1}
 read -q "create?Create $dir [y/N]? " || return 1
 mkdir -p $dir || return 1
 cd $dir
' ZERR

--
Best,
Ben



Messages sorted by: Reverse Date, Date, Thread, Author