112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* $NetBSD: emacs.c,v 1.25 2011/07/29 15:16:33 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[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93"; 3912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#else 4012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala__RCSID("$NetBSD: emacs.c,v 1.25 2011/07/29 15:16:33 christos Exp $"); 4112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif 4212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif /* not lint && not SCCSID */ 4312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 4412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* 4512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * emacs.c: Emacs functions 4612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 4712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include "el.h" 4812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 4912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_delete_or_list(): 5012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Delete character under cursor or list completions if at end of line 5112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^D] 5212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 5312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 5412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 5512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_delete_or_list(EditLine *el, Int c) 5612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 5712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 5812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.lastchar) { 5912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* if I'm at the end */ 6012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.buffer) { 6112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* and the beginning */ 6212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal_writec(el, c); /* then do an EOF */ 6312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_EOF; 6412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { 6512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* 6612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Here we could list completions, but it is an 6712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * error right now 6812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 6912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala terminal_beep(el); 7012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 7112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 7212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { 7312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.doingarg) 7412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delafter(el, el->el_state.argument); 7512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala else 7612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delafter1(el); 7712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.lastchar) 7812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 7912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* bounds check */ 8012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 8112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 8212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 8312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 8412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 8512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_delete_next_word(): 8612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Cut from cursor to end of current word 8712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-d] 8812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 8912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 9012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 9112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_delete_next_word(EditLine *el, Int c __attribute__((__unused__))) 9212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 9312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *p, *kp; 9412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 9512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.lastchar) 9612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 9712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 9812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, 9912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 10012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 10112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) 10212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* save the text */ 10312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *p; 10412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 10512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 10612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delafter(el, (int)(cp - el->el_line.cursor)); /* delete after dot */ 10712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.lastchar) 10812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 10912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* bounds check */ 11012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 11112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 11212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 11312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 11412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_yank(): 11512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Paste cut buffer at cursor position 11612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^Y] 11712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 11812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 11912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 12012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_yank(EditLine *el, Int c __attribute__((__unused__))) 12112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 12212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *kp, *cp; 12312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 12412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) 12512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 12612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 12712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.lastchar + 12812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= 12912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.limit) 13012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 13112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 13212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.mark = el->el_line.cursor; 13312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.cursor; 13412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 13512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* open the space, */ 13612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_insert(el, 13712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala (int)(el->el_chared.c_kill.last - el->el_chared.c_kill.buf)); 13812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* copy the chars */ 13912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) 14012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *cp++ = *kp; 14112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 14212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* if an arg, cursor at beginning else cursor at end */ 14312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument == 1) 14412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = cp; 14512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 14612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 14712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 14812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 14912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 15012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_kill_line(): 15112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Cut the entire line and save in cut buffer 15212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^U] 15312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 15412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 15512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 15612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_kill_line(EditLine *el, Int c __attribute__((__unused__))) 15712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 15812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *kp, *cp; 15912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 16012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.buffer; 16112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 16212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_line.lastchar) 16312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 16412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 16512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* zap! -- delete all of it */ 16612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.lastchar = el->el_line.buffer; 16712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; 16812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 16912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 17012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 17112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 17212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_kill_region(): 17312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Cut area between mark and cursor and save in cut buffer 17412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^W] 17512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 17612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 17712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 17812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_kill_region(EditLine *el, Int c __attribute__((__unused__))) 17912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 18012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *kp, *cp; 18112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 18212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!el->el_chared.c_kill.mark) 18312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 18412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 18512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_kill.mark > el->el_line.cursor) { 18612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.cursor; 18712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 18812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_chared.c_kill.mark) 18912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 19012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 19112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delafter(el, (int)(cp - el->el_line.cursor)); 19212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { /* mark is before cursor */ 19312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_chared.c_kill.mark; 19412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 19512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_line.cursor) 19612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 19712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 19812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delbefore(el, (int)(cp - el->el_chared.c_kill.mark)); 19912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_chared.c_kill.mark; 20012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 20112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 20212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 20312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 20412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 20512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_copy_region(): 20612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Copy area between mark and cursor to cut buffer 20712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-W] 20812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 20912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 21012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 21112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_copy_region(EditLine *el, Int c __attribute__((__unused__))) 21212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 21312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *kp, *cp; 21412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 21512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (!el->el_chared.c_kill.mark) 21612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 21712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 21812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_kill.mark > el->el_line.cursor) { 21912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.cursor; 22012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 22112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_chared.c_kill.mark) 22212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 22312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 22412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else { 22512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_chared.c_kill.mark; 22612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala kp = el->el_chared.c_kill.buf; 22712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala while (cp < el->el_line.cursor) 22812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *kp++ = *cp++; /* copy it */ 22912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.last = kp; 23012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 23112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 23212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 23312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 23412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 23512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_gosmacs_transpose(): 23612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Exchange the two characters before the cursor 23712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Gosling emacs transpose chars [^T] 23812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 23912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 24012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_gosmacs_transpose(EditLine *el, Int c) 24112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 24212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 24312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > &el->el_line.buffer[1]) { 24412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* must have at least two chars entered */ 24512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c = el->el_line.cursor[-2]; 24612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor[-2] = el->el_line.cursor[-1]; 24712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor[-1] = c; 24812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 24912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } else 25012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 25112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 25212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 25312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 25412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_next_word(): 25512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Move next to end of current word 25612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-f] 25712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 25812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 25912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 26012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_next_word(EditLine *el, Int c __attribute__((__unused__))) 26112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 26212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.lastchar) 26312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 26412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 26512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = c__next_word(el->el_line.cursor, 26612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.lastchar, 26712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, 26812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ce__isword); 26912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 27012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_map.type == MAP_VI) 27112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_chared.c_vcmd.action != NOP) { 27212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cv_delfini(el); 27312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 27412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 27512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 27612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 27712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 27812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 27912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_upper_case(): 28012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Uppercase the characters from cursor to end of current word 28112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-u] 28212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 28312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 28412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 28512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_upper_case(EditLine *el, Int c __attribute__((__unused__))) 28612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 28712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *ep; 28812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 28912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 29012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 29112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 29212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (cp = el->el_line.cursor; cp < ep; cp++) 29312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (Islower(*cp)) 29412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *cp = Toupper(*cp); 29512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 29612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = ep; 29712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.lastchar) 29812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 29912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 30012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 30112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 30212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 30312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_capitol_case(): 30412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Capitalize the characters from cursor to end of current word 30512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-c] 30612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 30712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 30812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 30912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_capitol_case(EditLine *el, Int c __attribute__((__unused__))) 31012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 31112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *ep; 31212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 31312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 31412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 31512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 31612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (cp = el->el_line.cursor; cp < ep; cp++) { 31712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (Isalpha(*cp)) { 31812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (Islower(*cp)) 31912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *cp = Toupper(*cp); 32012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp++; 32112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala break; 32212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 32312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala } 32412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (; cp < ep; cp++) 32512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (Isupper(*cp)) 32612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *cp = Tolower(*cp); 32712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 32812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = ep; 32912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.lastchar) 33012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 33112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 33212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 33312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 33412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 33512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_lower_case(): 33612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Lowercase the characters from cursor to end of current word 33712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [M-l] 33812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 33912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 34012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 34112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_lower_case(EditLine *el, Int c __attribute__((__unused__))) 34212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 34312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *ep; 34412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 34512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 34612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 34712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 34812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (cp = el->el_line.cursor; cp < ep; cp++) 34912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (Isupper(*cp)) 35012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *cp = Tolower(*cp); 35112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 35212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = ep; 35312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor > el->el_line.lastchar) 35412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.lastchar; 35512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 35612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 35712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 35812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 35912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_set_mark(): 36012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Set the mark at cursor 36112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^@] 36212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 36312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 36412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 36512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_set_mark(EditLine *el, Int c __attribute__((__unused__))) 36612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 36712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 36812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.mark = el->el_line.cursor; 36912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 37012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 37112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 37212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 37312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_exchange_mark(): 37412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Exchange the cursor and mark 37512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^X^X] 37612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 37712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 37812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 37912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_exchange_mark(EditLine *el, Int c __attribute__((__unused__))) 38012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 38112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp; 38212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 38312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = el->el_line.cursor; 38412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_chared.c_kill.mark; 38512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_chared.c_kill.mark = cp; 38612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_CURSOR; 38712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 38812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 38912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 39012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_universal_argument(): 39112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Universal argument (argument times 4) 39212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^U] 39312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 39412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 39512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 39612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_universal_argument(EditLine *el, Int c __attribute__((__unused__))) 39712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ /* multiply current argument by 4 */ 39812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 39912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.argument > 1000000) 40012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 40112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.doingarg = 1; 40212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument *= 4; 40312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ARGHACK; 40412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 40512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 40612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 40712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_meta_next(): 40812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Add 8th bit to next character typed 40912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [<ESC>] 41012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 41112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 41212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 41312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_meta_next(EditLine *el, Int c __attribute__((__unused__))) 41412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 41512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 41612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.metanext = 1; 41712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ARGHACK; 41812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 41912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 42012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 42112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_toggle_overwrite(): 42212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Switch from insert to overwrite mode or vice versa 42312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 42412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 42512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 42612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_toggle_overwrite(EditLine *el, Int c __attribute__((__unused__))) 42712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 42812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 42912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? 43012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala MODE_REPLACE : MODE_INSERT; 43112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_NORM; 43212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 43312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 43412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 43512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_copy_prev_word(): 43612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Copy current word to cursor 43712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 43812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 43912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 44012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_copy_prev_word(EditLine *el, Int c __attribute__((__unused__))) 44112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 44212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala Char *cp, *oldc, *dp; 44312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 44412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor == el->el_line.buffer) 44512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 44612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 44712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala oldc = el->el_line.cursor; 44812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala /* does a bounds check */ 44912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, 45012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_state.argument, ce__isword); 45112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_insert(el, (int)(oldc - cp)); 45312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++) 45412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *dp++ = *cp; 45512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = dp;/* put cursor at end */ 45712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 45812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 45912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 46012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 46112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 46212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_inc_search_next(): 46312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Emacs incremental next search 46412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 46512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 46612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 46712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_inc_search_next(EditLine *el, Int c __attribute__((__unused__))) 46812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 46912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 47012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_search.patlen = 0; 47112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return ce_inc_search(el, ED_SEARCH_NEXT_HISTORY); 47212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 47312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 47412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 47512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_inc_search_prev(): 47612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Emacs incremental reverse search 47712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 47812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 47912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 48012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_inc_search_prev(EditLine *el, Int c __attribute__((__unused__))) 48112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 48212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_search.patlen = 0; 48412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return ce_inc_search(el, ED_SEARCH_PREV_HISTORY); 48512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 48612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 48812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* em_delete_prev_char(): 48912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Delete the character to the left of the cursor 49012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * [^?] 49112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */ 49212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaprotected el_action_t 49312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*ARGSUSED*/ 49412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaem_delete_prev_char(EditLine *el, Int c __attribute__((__unused__))) 49512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala{ 49612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 49712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor <= el->el_line.buffer) 49812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_ERROR; 49912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala 50012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_state.doingarg) 50112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delbefore(el, el->el_state.argument); 50212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala else 50312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala c_delbefore1(el); 50412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor -= el->el_state.argument; 50512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala if (el->el_line.cursor < el->el_line.buffer) 50612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala el->el_line.cursor = el->el_line.buffer; 50712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala return CC_REFRESH; 50812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} 509