From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1I1rYD-0007uT-4y for qemu-devel@nongnu.org; Fri, 22 Jun 2007 18:24:21 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1I1rYA-0007sN-V2 for qemu-devel@nongnu.org; Fri, 22 Jun 2007 18:24:19 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1I1rYA-0007sK-Rb for qemu-devel@nongnu.org; Fri, 22 Jun 2007 18:24:18 -0400 Received: from hansmi.home.forkbomb.ch ([213.144.146.165]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1I1rY9-0003th-RI for qemu-devel@nongnu.org; Fri, 22 Jun 2007 18:24:18 -0400 Date: Sat, 23 Jun 2007 00:24:10 +0200 From: Michael Hanselmann Message-ID: <20070622222410.GA27805@hansmi.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] [PATCH] Implement ^W in readline.c Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Hello The patch below implements ^W (Ctrl+W) in readline.c, allowing it to be used in the monitor. Signed-off-by: Michael Hanselmann Greets, Michael --- Index: readline.c =================================================================== RCS file: /sources/qemu/qemu/readline.c,v retrieving revision 1.1 diff -u -b -B -r1.1 readline.c --- readline.c 1 Aug 2004 21:52:19 -0000 1.1 +++ readline.c 22 Jun 2007 22:17:47 -0000 @@ -156,6 +156,45 @@ } } +static void term_backword(void) +{ + int start; + + if (term_cmd_buf_index == 0 || term_cmd_buf_index > term_cmd_buf_size) { + return; + } + + start = term_cmd_buf_index - 1; + + /* find first word (backwards) */ + while (start > 0) { + if (!isspace(term_cmd_buf[start])) { + break; + } + + --start; + } + + /* find first space (backwards) */ + while (start > 0) { + if (isspace(term_cmd_buf[start])) { + ++start; + break; + } + + --start; + } + + /* remove word */ + if (start < term_cmd_buf_index) { + memmove(term_cmd_buf + start, + term_cmd_buf + term_cmd_buf_index, + term_cmd_buf_size - term_cmd_buf_index); + term_cmd_buf_size -= term_cmd_buf_index - start; + term_cmd_buf_index = start; + } +} + static void term_bol(void) { term_cmd_buf_index = 0; @@ -338,6 +377,10 @@ /* NOTE: readline_start can be called here */ term_readline_func(term_readline_opaque, term_cmd_buf); break; + case 23: + /* ^W */ + term_backword(); + break; case 27: term_esc_state = IS_ESC; break;