From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11608 invoked by alias); 29 Apr 2012 17:01:18 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 17043 Received: (qmail 7459 invoked from network); 29 Apr 2012 17:01:12 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at benizi.com designates 64.130.10.15 as permitted sender) Date: Sun, 29 Apr 2012 13:00:45 -0400 (EDT) From: "Benjamin R. Haskell" To: Zsh Users Subject: Re: Command not found handler for non-searched commands? In-Reply-To: Message-ID: References: User-Agent: Alpine 2.01 (LNX 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed 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