From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23761 invoked by alias); 2 Aug 2011 16:45:36 -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: 16193 Received: (qmail 20518 invoked from network); 2 Aug 2011 16:45:34 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received-SPF: none (ns1.primenet.com.au: domain at closedmail.com does not designate permitted sender hosts) From: Bart Schaefer Message-id: <110802094509.ZM28603@torch.brasslantern.com> Date: Tue, 02 Aug 2011 09:45:09 -0700 In-reply-to: <4E38178A.9050406@gmx.net> Comments: In reply to Pascal Wittmann "Re: zle insert problems" (Aug 2, 5:28pm) References: <4E380791.2090807@gmx.net> <4E380FF2.3020309@gmx.net> <4E38178A.9050406@gmx.net> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-users@zsh.org Subject: Re: zle insert problems MIME-version: 1.0 Content-type: text/plain; charset=us-ascii On Aug 2, 5:28pm, Pascal Wittmann wrote: } } I'll take this solution but just to have a explicit no: There is no way } doing this only via zle? I'm going to disagree with PWS a little here (horrors!) and assert that it's OK to use zle commands to emulate user interactions in the case where you want to precisely mimic a command's behavior. For example it's much easier to do zle vi-backward-word than it is to analyze $LBUFFER to figure out where that cursor motion would have left you. The whole set of widget actions isn't flushed to the screen until the widget finishes or something like "zle -R" is run, so it's not as if the user sees the cursor jumping about. This is particularly true if you're working with multi-line buffers or want to move up and down in the history. Also you can mix zle actions with direct assignments to the various control parameters. So your original example could be written do-something() { CURSOR=0 LBUFFER="something" zle end-of-line } Thus, similarly, replace-pacman-command() { if [[ $LBUFFER = "pacman"* ]]; then CURSOR=0 zle forward-word zle delete-word LBUFFER+="$*" zle end-of-line fi } Another reason for using zle commands is that they properly maintain the relative positions of $MARK and $CURSOR, which get lost when you modify LBUFFER directly. However, there isn't a zle command to insert arbitrary characters.