112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* $NetBSD: common.c,v 1.29 2012/03/24 20:08:43 christos Exp $ */ 212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*- 412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Copyright (c) 1992, 1993 512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * The Regents of the University of California. All rights reserved. 612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * This code is derived from software contributed to Berkeley by 812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Christos Zoulas of Cornell University. 912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 1012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Redistribution and use in source and binary forms, with or without 1112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * modification, are permitted provided that the following conditions 1212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * are met: 1312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 1. Redistributions of source code must retain the above copyright 1412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * notice, this list of conditions and the following disclaimer. 1512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 2. Redistributions in binary form must reproduce the above copyright 1612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * notice, this list of conditions and the following disclaimer in the 1712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * documentation and/or other materials provided with the distribution. 1812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 3. Neither the name of the University nor the names of its contributors 1912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * may be used to endorse or promote products derived from this software 2012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * without specific prior written permission. 2112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 2212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * SUCH DAMAGE. 3312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 3412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 3512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include "config.h" 3612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#if !defined(lint) && !defined(SCCSID) 3712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#if 0 3812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialastatic char sccsid[] = "@(#)common.c 8.1 (Berkeley) 6/4/93"; 3912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#else 4012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala__RCSID("$NetBSD: common.c,v 1.29 2012/03/24 20:08:43 christos Exp $"); 4112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 4212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif /* not lint && not SCCSID */ 4312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 4412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* 4512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * common.c: Common Editor functions 4612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 4712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include "el.h" 4812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 4912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_end_of_file(): 5012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Indicate end of file 5112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^D] 5212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 5312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 5412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 5512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_end_of_file(EditLine *el, Int c __attribute__((__unused__))) 5612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 5712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 5812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_goto_bottom(el); 5912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; 6012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_EOF; 6112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 6212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 6312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 6412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_insert(): 6512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Add character to the line 6612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Insert a character [bound to all insert keys] 6712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 6812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 6912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_insert(EditLine *el, Int c) 7012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 7112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int count = el->el_state.argument; 7212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 7312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (c == '\0') 7412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 7512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 7612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.lastchar + el->el_state.argument >= 7712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.limit) { 7812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* end of buffer space, try to allocate more */ 7912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!ch_enlargebufs(el, (size_t) count)) 8012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; /* error allocating more */ 8112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 8212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 8312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (count == 1) { 8412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.inputmode == MODE_INSERT 8512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala || el->el_line.cursor >= el->el_line.lastchar) 8612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_insert(el, 1); 8712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 8812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.cursor++ = c; 8912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_fastaddc(el); /* fast refresh for one char. */ 9012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { 9112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.inputmode != MODE_REPLACE_1) 9212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_insert(el, el->el_state.argument); 9312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 9412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (count-- && el->el_line.cursor < el->el_line.lastchar) 9512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.cursor++ = c; 9612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_refresh(el); 9712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 9812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 9912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.inputmode == MODE_REPLACE_1) 10012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return vi_command_mode(el, 0); 10112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 10212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 10312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 10412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 10512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 10612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_delete_prev_word(): 10712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Delete from beginning of current word to cursor 10812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-^?] [^W] 10912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 11012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 11112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 11212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_delete_prev_word(EditLine *el, Int c __attribute__((__unused__))) 11312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 11412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *p, *kp; 11512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 11612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.buffer) 11712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 11812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 11912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, 12012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 12112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 12212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (p = cp, kp = el->el_chared.c_kill.buf; p < el->el_line.cursor; p++) 12312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *p; 12412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 12512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 12612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delbefore(el, (int)(el->el_line.cursor - cp));/* delete before dot */ 12712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = cp; 12812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor < el->el_line.buffer) 12912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; /* bounds check */ 13012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 13112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 13212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 13312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 13412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_delete_next_char(): 13512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Delete character under cursor 13612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^D] [x] 13712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 13812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 13912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 14012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_delete_next_char(EditLine *el, Int c __attribute__((__unused__))) 14112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 14212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef DEBUG_EDIT 14312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define EL el->el_line 14412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errlfile, 14512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala "\nD(b: %x(%s) c: %x(%s) last: %x(%s) limit: %x(%s)\n", 14612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala EL.buffer, EL.buffer, EL.cursor, EL.cursor, EL.lastchar, 14712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala EL.lastchar, EL.limit, EL.limit); 14812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 14912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.lastchar) { 15012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* if I'm at the end */ 15112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) { 15212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.buffer) { 15312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* if I'm also at the beginning */ 15412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef KSHVI 15512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 15612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#else 15712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* then do an EOF */ 15812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal_writec(el, c); 15912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_EOF; 16012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 16112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { 16212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef KSHVI 16312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor--; 16412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#else 16512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 16612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 16712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 16812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else 16912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 17012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 17112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delafter(el, el->el_state.argument); /* delete after dot */ 17212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI && 17312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor >= el->el_line.lastchar && 17412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor > el->el_line.buffer) 17512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* bounds check */ 17612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar - 1; 17712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 17812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 17912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 18012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 18112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_kill_line(): 18212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Cut to the end of line 18312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^K] [^K] 18412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 18512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 18612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 18712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_kill_line(EditLine *el, Int c __attribute__((__unused__))) 18812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 18912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *kp, *cp; 19012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 19112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.cursor; 19212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 19312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_line.lastchar) 19412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 19512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 19612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* zap! -- delete to end */ 19712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.lastchar = el->el_line.cursor; 19812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 19912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 20012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 20112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 20212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_move_to_end(): 20312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move cursor to the end of line 20412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^E] [^E] 20512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 20612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 20712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 20812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_move_to_end(EditLine *el, Int c __attribute__((__unused__))) 20912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 21012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 21112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 21212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) { 21312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 21412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 21512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 21612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 21712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef VI_MOVE 21812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor--; 21912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 22012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 22112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 22212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 22312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 22412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 22512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_move_to_beg(): 22612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move cursor to the beginning of line 22712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^A] [^A] 22812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 22912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 23012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 23112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_move_to_beg(EditLine *el, Int c __attribute__((__unused__))) 23212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 23312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 23412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; 23512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 23612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) { 23712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* We want FIRST non space character */ 23812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (Isspace(*el->el_line.cursor)) 23912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor++; 24012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 24112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 24212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 24312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 24412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 24512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 24612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 24712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 24812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 24912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_transpose_chars(): 25012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Exchange the character to the left of the cursor with the one under it 25112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^T] [^T] 25212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 25312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 25412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_transpose_chars(EditLine *el, Int c) 25512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 25612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 25712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor < el->el_line.lastchar) { 25812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.lastchar <= &el->el_line.buffer[1]) 25912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 26012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala else 26112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor++; 26212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 26312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > &el->el_line.buffer[1]) { 26412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* must have at least two chars entered */ 26512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c = el->el_line.cursor[-2]; 26612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor[-2] = el->el_line.cursor[-1]; 26712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor[-1] = c; 26812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 26912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else 27012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 27112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 27212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 27312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 27412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_next_char(): 27512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the right one character 27612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^F] [^F] 27712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 27812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 27912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 28012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_next_char(EditLine *el, Int c __attribute__((__unused__))) 28112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 28212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *lim = el->el_line.lastchar; 28312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 28412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor >= lim || 28512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_line.cursor == lim - 1 && 28612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_map.type == MAP_VI && 28712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_vcmd.action == NOP)) 28812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 28912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 29012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor += el->el_state.argument; 29112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > lim) 29212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = lim; 29312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 29412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) 29512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 29612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 29712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 29812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 29912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 30012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 30112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 30212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 30312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_prev_word(): 30412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the beginning of the current word 30512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-b] [b] 30612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 30712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 30812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 30912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_prev_word(EditLine *el, Int c __attribute__((__unused__))) 31012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 31112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 31212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.buffer) 31312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 31412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 31512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = c__prev_word(el->el_line.cursor, 31612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.buffer, 31712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, 31812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ce__isword); 31912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 32012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) 32112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 32212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 32312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 32412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 32512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 32612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 32712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 32812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 32912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_prev_char(): 33012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the left one character 33112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^B] [^B] 33212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 33312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 33412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 33512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_prev_char(EditLine *el, Int c __attribute__((__unused__))) 33612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 33712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 33812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.buffer) { 33912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor -= el->el_state.argument; 34012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor < el->el_line.buffer) 34112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; 34212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 34312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) 34412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 34512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 34612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 34712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 34812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 34912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else 35012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 35112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 35212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 35312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 35412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_quoted_insert(): 35512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Add the next character typed verbatim 35612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^V] [^V] 35712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 35812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 35912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_quoted_insert(EditLine *el, Int c) 36012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 36112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int num; 36212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char tc; 36312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 36412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala tty_quotemode(el); 36512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala num = FUN(el,getc)(el, &tc); 36612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c = tc; 36712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala tty_noquotemode(el); 36812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (num == 1) 36912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return ed_insert(el, c); 37012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala else 37112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return ed_end_of_file(el, 0); 37212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 37312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 37412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 37512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_digit(): 37612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Adds to argument or enters a digit 37712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 37812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 37912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_digit(EditLine *el, Int c) 38012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 38112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 38212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!Isdigit(c)) 38312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 38412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 38512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.doingarg) { 38612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* if doing an arg, add this in... */ 38712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.lastcmd == EM_UNIVERSAL_ARGUMENT) 38812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument = c - '0'; 38912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala else { 39012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument > 1000000) 39112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 39212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument = 39312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_state.argument * 10) + (c - '0'); 39412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 39512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ARGHACK; 39612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 39712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 39812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return ed_insert(el, c); 39912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 40012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 40112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 40212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_argument_digit(): 40312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Digit that starts argument 40412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * For ESC-n 40512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 40612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 40712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_argument_digit(EditLine *el, Int c) 40812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 40912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 41012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!Isdigit(c)) 41112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 41212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 41312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.doingarg) { 41412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument > 1000000) 41512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 41612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument = (el->el_state.argument * 10) + 41712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (c - '0'); 41812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { /* else starting an argument */ 41912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument = c - '0'; 42012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.doingarg = 1; 42112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 42212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ARGHACK; 42312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 42412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 42512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 42612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_unassigned(): 42712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Indicates unbound character 42812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Bound to keys that are not assigned 42912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 43012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 43112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 43212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_unassigned(EditLine *el __attribute__((__unused__)), 43312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 43412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 43512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 43612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 43712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 43812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 43912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 44012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/** 44112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ** TTY key handling. 44212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala **/ 44312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 44412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_sigint(): 44512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty interrupt character 44612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^C] 44712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 44812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 44912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 45012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_sigint(EditLine *el __attribute__((__unused__)), 45112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 45212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 45312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 45512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 45612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_dsusp(): 45912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty delayed suspend character 46012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^Y] 46112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 46212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 46312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 46412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_dsusp(EditLine *el __attribute__((__unused__)), 46512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 46612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 46712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 46812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 46912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 47012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 47112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 47212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_flush_output(): 47312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty flush output characters 47412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^O] 47512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 47612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 47712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 47812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_flush_output(EditLine *el __attribute__((__unused__)), 47912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 48012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 48112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 48312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 48412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_sigquit(): 48712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty quit character 48812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^\] 48912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 49012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 49112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 49212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_sigquit(EditLine *el __attribute__((__unused__)), 49312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 49412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 49512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 49612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 49712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 49812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 49912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 50012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_sigtstp(): 50112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty suspend character 50212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^Z] 50312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 50412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 50512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 50612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_sigtstp(EditLine *el __attribute__((__unused__)), 50712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 50812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 50912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 51012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 51112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 51212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 51312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 51412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_stop_output(): 51512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty disallow output characters 51612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^S] 51712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 51812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 51912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 52012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_stop_output(EditLine *el __attribute__((__unused__)), 52112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 52212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 52312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 52412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 52512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 52612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 52712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 52812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_tty_start_output(): 52912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Tty allow output characters 53012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^Q] 53112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 53212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 53312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 53412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_tty_start_output(EditLine *el __attribute__((__unused__)), 53512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 53612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 53712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 53812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 53912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 54012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 54112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 54212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_newline(): 54312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Execute command 54412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^J] 54512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 54612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 54712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 54812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_newline(EditLine *el, Int c __attribute__((__unused__))) 54912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 55012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 55112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_goto_bottom(el); 55212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar++ = '\n'; 55312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; 55412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NEWLINE; 55512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 55612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 55712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 55812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_delete_prev_char(): 55912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Delete the character to the left of the cursor 56012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^?] 56112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 56212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 56312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 56412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_delete_prev_char(EditLine *el, Int c __attribute__((__unused__))) 56512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 56612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 56712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor <= el->el_line.buffer) 56812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 56912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 57012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delbefore(el, el->el_state.argument); 57112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor -= el->el_state.argument; 57212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor < el->el_line.buffer) 57312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; 57412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 57512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 57612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 57712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 57812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_clear_screen(): 57912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Clear screen leaving current line at the top 58012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^L] 58112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 58212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 58312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 58412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_clear_screen(EditLine *el, Int c __attribute__((__unused__))) 58512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 58612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 58712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal_clear_screen(el); /* clear the whole real screen */ 58812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_clear_display(el); /* reset everything */ 58912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 59012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 59112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 59212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 59312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_redisplay(): 59412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Redisplay everything 59512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ^R 59612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 59712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 59812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 59912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_redisplay(EditLine *el __attribute__((__unused__)), 60012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 60112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 60212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 60312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REDISPLAY; 60412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 60512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 60612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 60712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_start_over(): 60812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Erase current line and start from scratch 60912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^G] 61012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 61112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 61212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 61312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_start_over(EditLine *el, Int c __attribute__((__unused__))) 61412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 61512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 61612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ch_reset(el, 0); 61712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 61812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 61912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 62012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 62112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_sequence_lead_in(): 62212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * First character in a bound sequence 62312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Placeholder for external keys 62412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 62512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 62612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 62712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_sequence_lead_in(EditLine *el __attribute__((__unused__)), 62812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Int c __attribute__((__unused__))) 62912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 63012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 63112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 63212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 63312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 63412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 63512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_prev_history(): 63612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the previous history line 63712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^P] [k] 63812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 63912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 64012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 64112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_prev_history(EditLine *el, Int c __attribute__((__unused__))) 64212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 64312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala char beep = 0; 64412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int sv_event = el->el_history.eventno; 64512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 64612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_undo.len = -1; 64712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; /* just in case */ 64812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 64912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.eventno == 0) { /* save the current buffer 65012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * away */ 65112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) Strncpy(el->el_history.buf, el->el_line.buffer, 65212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala EL_BUFSIZ); 65312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.last = el->el_history.buf + 65412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_line.lastchar - el->el_line.buffer); 65512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 65612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno += el->el_state.argument; 65712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 65812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (hist_get(el) == CC_ERROR) { 65912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) { 66012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno = sv_event; 66112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 66212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 66312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala beep = 1; 66412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* el->el_history.eventno was fixed by first call */ 66512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) hist_get(el); 66612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 66712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (beep) 66812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH_BEEP; 66912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 67012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 67112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 67212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 67312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_next_history(): 67412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the next history line 67512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^N] [j] 67612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 67712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 67812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 67912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_next_history(EditLine *el, Int c __attribute__((__unused__))) 68012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 68112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el_action_t beep = CC_REFRESH, rval; 68212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 68312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_undo.len = -1; 68412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; /* just in case */ 68512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 68612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno -= el->el_state.argument; 68712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 68812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.eventno < 0) { 68912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno = 0; 69012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala beep = CC_REFRESH_BEEP; 69112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 69212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala rval = hist_get(el); 69312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (rval == CC_REFRESH) 69412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return beep; 69512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return rval; 69612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 69712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 69812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 69912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 70012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_search_prev_history(): 70112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Search previous in history for a line matching the current 70212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * next search history [M-P] [K] 70312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 70412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 70512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 70612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_search_prev_history(EditLine *el, Int c __attribute__((__unused__))) 70712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 70812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala const Char *hp; 70912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int h; 71012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala bool_t found = 0; 71112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 71212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_vcmd.action = NOP; 71312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_undo.len = -1; 71412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; /* just in case */ 71512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.eventno < 0) { 71612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef DEBUG_EDIT 71712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errfile, 71812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala "e_prev_search_hist(): eventno < 0;\n"); 71912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 72012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno = 0; 72112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 72212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 72312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.eventno == 0) { 72412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) Strncpy(el->el_history.buf, el->el_line.buffer, 72512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala EL_BUFSIZ); 72612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.last = el->el_history.buf + 72712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_line.lastchar - el->el_line.buffer); 72812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 72912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.ref == NULL) 73012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 73112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 73212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp = HIST_FIRST(el); 73312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (hp == NULL) 73412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 73512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 73612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_setpat(el); /* Set search pattern !! */ 73712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 73812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (h = 1; h <= el->el_history.eventno; h++) 73912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp = HIST_NEXT(el); 74012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 74112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (hp != NULL) { 74212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef SDEBUG 74312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp); 74412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 74512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if ((Strncmp(hp, el->el_line.buffer, (size_t) 74612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_line.lastchar - el->el_line.buffer)) || 74712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp[el->el_line.lastchar - el->el_line.buffer]) && 74812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_hmatch(el, hp)) { 74912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala found++; 75012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala break; 75112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 75212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala h++; 75312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp = HIST_NEXT(el); 75412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 75512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 75612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!found) { 75712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef SDEBUG 75812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errfile, "not found\n"); 75912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 76012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 76112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 76212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno = h; 76312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 76412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return hist_get(el); 76512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 76612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 76712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 76812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_search_next_history(): 76912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Search next in history for a line matching the current 77012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-N] [J] 77112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 77212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 77312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 77412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_search_next_history(EditLine *el, Int c __attribute__((__unused__))) 77512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 77612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala const Char *hp; 77712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int h; 77812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala bool_t found = 0; 77912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 78012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_vcmd.action = NOP; 78112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_undo.len = -1; 78212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *el->el_line.lastchar = '\0'; /* just in case */ 78312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 78412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.eventno == 0) 78512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 78612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 78712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_history.ref == NULL) 78812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 78912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 79012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp = HIST_FIRST(el); 79112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (hp == NULL) 79212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 79312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 79412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_setpat(el); /* Set search pattern !! */ 79512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 79612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (h = 1; h < el->el_history.eventno && hp; h++) { 79712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef SDEBUG 79812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errfile, "Comparing with \"%s\"\n", hp); 79912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 80012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if ((Strncmp(hp, el->el_line.buffer, (size_t) 80112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_line.lastchar - el->el_line.buffer)) || 80212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp[el->el_line.lastchar - el->el_line.buffer]) && 80312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_hmatch(el, hp)) 80412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala found = h; 80512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala hp = HIST_NEXT(el); 80612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 80712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 80812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!found) { /* is it the current history number? */ 80912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!c_hmatch(el, el->el_history.buf)) { 81012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef SDEBUG 81112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (void) fprintf(el->el_errfile, "not found\n"); 81212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 81312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 81412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 81512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 81612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_history.eventno = found; 81712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 81812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return hist_get(el); 81912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 82012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 82112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 82212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_prev_line(): 82312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move up one line 82412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Could be [k] [^p] 82512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 82612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 82712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 82812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_prev_line(EditLine *el, Int c __attribute__((__unused__))) 82912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 83012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *ptr; 83112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int nchars = c_hpos(el); 83212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 83312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 83412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the line requested 83512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 83612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (*(ptr = el->el_line.cursor) == '\n') 83712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ptr--; 83812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 83912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (; ptr >= el->el_line.buffer; ptr--) 84012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (*ptr == '\n' && --el->el_state.argument <= 0) 84112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala break; 84212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 84312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument > 0) 84412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 84512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 84612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 84712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the beginning of the line 84812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 84912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (ptr--; ptr >= el->el_line.buffer && *ptr != '\n'; ptr--) 85012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala continue; 85112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 85212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 85312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the character requested 85412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 85512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (ptr++; 85612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala nchars-- > 0 && ptr < el->el_line.lastchar && *ptr != '\n'; 85712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ptr++) 85812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala continue; 85912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 86012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = ptr; 86112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 86212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 86312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 86412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 86512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_next_line(): 86612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move down one line 86712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Could be [j] [^n] 86812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 86912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 87012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 87112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_next_line(EditLine *el, Int c __attribute__((__unused__))) 87212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 87312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *ptr; 87412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int nchars = c_hpos(el); 87512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 87612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 87712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the line requested 87812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 87912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (ptr = el->el_line.cursor; ptr < el->el_line.lastchar; ptr++) 88012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (*ptr == '\n' && --el->el_state.argument <= 0) 88112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala break; 88212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 88312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument > 0) 88412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 88512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 88612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 88712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move to the character requested 88812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 88912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (ptr++; 89012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala nchars-- > 0 && ptr < el->el_line.lastchar && *ptr != '\n'; 89112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ptr++) 89212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala continue; 89312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 89412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = ptr; 89512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 89612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 89712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 89812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 89912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* ed_command(): 90012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Editline extended command 90112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-X] [:] 90212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 90312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 90412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 90512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaed_command(EditLine *el, Int c __attribute__((__unused__))) 90612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 90712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char tmpbuf[EL_BUFSIZ]; 90812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala int tmplen; 90912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 91012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala tmplen = c_gets(el, tmpbuf, STR("\n: ")); 91112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal__putc(el, '\n'); 91212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 91312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (tmplen < 0 || (tmpbuf[tmplen] = 0, parse_line(el, tmpbuf)) == -1) 91412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal_beep(el); 91512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 91612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_map.current = el->el_map.key; 91712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala re_clear_display(el); 91812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 91912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 920