11573Srgrimes/*- 21573Srgrimes * Copyright (c) 1992, 1993 31573Srgrimes * The Regents of the University of California. All rights reserved. 41573Srgrimes * 51573Srgrimes * This code is derived from software contributed to Berkeley by 61573Srgrimes * Christos Zoulas of Cornell University. 71573Srgrimes * 81573Srgrimes * Redistribution and use in source and binary forms, with or without 91573Srgrimes * modification, are permitted provided that the following conditions 101573Srgrimes * are met: 111573Srgrimes * 1. Redistributions of source code must retain the above copyright 121573Srgrimes * notice, this list of conditions and the following disclaimer. 131573Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 141573Srgrimes * notice, this list of conditions and the following disclaimer in the 151573Srgrimes * documentation and/or other materials provided with the distribution. 16148834Sstefanf * 3. Neither the name of the University nor the names of its contributors 171573Srgrimes * may be used to endorse or promote products derived from this software 181573Srgrimes * without specific prior written permission. 191573Srgrimes * 201573Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 211573Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 221573Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 231573Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 241573Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 251573Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 261573Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 271573Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 281573Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 291573Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 301573Srgrimes * SUCH DAMAGE. 3184260Sobrien * 32167457Sstefanf * $NetBSD: emacs.c,v 1.21 2006/03/06 21:11:56 christos Exp $ 331573Srgrimes */ 341573Srgrimes 351573Srgrimes#if !defined(lint) && !defined(SCCSID) 361573Srgrimesstatic char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93"; 371573Srgrimes#endif /* not lint && not SCCSID */ 3884260Sobrien#include <sys/cdefs.h> 3984260Sobrien__FBSDID("$FreeBSD$"); 401573Srgrimes 418870Srgrimes/* 421573Srgrimes * emacs.c: Emacs functions 431573Srgrimes */ 441573Srgrimes#include "sys.h" 451573Srgrimes#include "el.h" 461573Srgrimes 471573Srgrimes/* em_delete_or_list(): 481573Srgrimes * Delete character under cursor or list completions if at end of line 491573Srgrimes * [^D] 501573Srgrimes */ 511573Srgrimesprotected el_action_t 521573Srgrimes/*ARGSUSED*/ 53167457Sstefanfem_delete_or_list(EditLine *el, int c) 541573Srgrimes{ 5584260Sobrien 5684260Sobrien if (el->el_line.cursor == el->el_line.lastchar) { 5784260Sobrien /* if I'm at the end */ 5884260Sobrien if (el->el_line.cursor == el->el_line.buffer) { 5984260Sobrien /* and the beginning */ 60167457Sstefanf term_writec(el, c); /* then do an EOF */ 6184260Sobrien return (CC_EOF); 6284260Sobrien } else { 6384260Sobrien /* 6484260Sobrien * Here we could list completions, but it is an 6584260Sobrien * error right now 6684260Sobrien */ 6784260Sobrien term_beep(el); 6884260Sobrien return (CC_ERROR); 6984260Sobrien } 7084260Sobrien } else { 71148834Sstefanf if (el->el_state.doingarg) 72148834Sstefanf c_delafter(el, el->el_state.argument); 73148834Sstefanf else 74148834Sstefanf c_delafter1(el); 7584260Sobrien if (el->el_line.cursor > el->el_line.lastchar) 7684260Sobrien el->el_line.cursor = el->el_line.lastchar; 7784260Sobrien /* bounds check */ 7884260Sobrien return (CC_REFRESH); 791573Srgrimes } 801573Srgrimes} 811573Srgrimes 821573Srgrimes 831573Srgrimes/* em_delete_next_word(): 841573Srgrimes * Cut from cursor to end of current word 851573Srgrimes * [M-d] 861573Srgrimes */ 871573Srgrimesprotected el_action_t 881573Srgrimes/*ARGSUSED*/ 89148834Sstefanfem_delete_next_word(EditLine *el, int c __unused) 901573Srgrimes{ 9184260Sobrien char *cp, *p, *kp; 921573Srgrimes 9384260Sobrien if (el->el_line.cursor == el->el_line.lastchar) 9484260Sobrien return (CC_ERROR); 951573Srgrimes 9684260Sobrien cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, 9784260Sobrien el->el_state.argument, ce__isword); 981573Srgrimes 9984260Sobrien for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) 10084260Sobrien /* save the text */ 10184260Sobrien *kp++ = *p; 10284260Sobrien el->el_chared.c_kill.last = kp; 1031573Srgrimes 10484260Sobrien c_delafter(el, cp - el->el_line.cursor); /* delete after dot */ 10584260Sobrien if (el->el_line.cursor > el->el_line.lastchar) 10684260Sobrien el->el_line.cursor = el->el_line.lastchar; 10784260Sobrien /* bounds check */ 10884260Sobrien return (CC_REFRESH); 1091573Srgrimes} 1101573Srgrimes 1111573Srgrimes 1121573Srgrimes/* em_yank(): 1131573Srgrimes * Paste cut buffer at cursor position 1141573Srgrimes * [^Y] 1151573Srgrimes */ 1161573Srgrimesprotected el_action_t 1171573Srgrimes/*ARGSUSED*/ 118148834Sstefanfem_yank(EditLine *el, int c __unused) 1191573Srgrimes{ 12084260Sobrien char *kp, *cp; 1211573Srgrimes 122148834Sstefanf if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) 123148834Sstefanf return (CC_NORM); 1241573Srgrimes 12584260Sobrien if (el->el_line.lastchar + 12684260Sobrien (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= 12784260Sobrien el->el_line.limit) 12884260Sobrien return (CC_ERROR); 1291573Srgrimes 13084260Sobrien el->el_chared.c_kill.mark = el->el_line.cursor; 13184260Sobrien cp = el->el_line.cursor; 1321573Srgrimes 13384260Sobrien /* open the space, */ 13484260Sobrien c_insert(el, el->el_chared.c_kill.last - el->el_chared.c_kill.buf); 13584260Sobrien /* copy the chars */ 13684260Sobrien for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) 13784260Sobrien *cp++ = *kp; 1381573Srgrimes 13984260Sobrien /* if an arg, cursor at beginning else cursor at end */ 14084260Sobrien if (el->el_state.argument == 1) 14184260Sobrien el->el_line.cursor = cp; 1421573Srgrimes 14384260Sobrien return (CC_REFRESH); 1441573Srgrimes} 1451573Srgrimes 1461573Srgrimes 1471573Srgrimes/* em_kill_line(): 1481573Srgrimes * Cut the entire line and save in cut buffer 1491573Srgrimes * [^U] 1501573Srgrimes */ 1511573Srgrimesprotected el_action_t 1521573Srgrimes/*ARGSUSED*/ 153148834Sstefanfem_kill_line(EditLine *el, int c __unused) 1541573Srgrimes{ 15584260Sobrien char *kp, *cp; 1561573Srgrimes 15784260Sobrien cp = el->el_line.buffer; 15884260Sobrien kp = el->el_chared.c_kill.buf; 15984260Sobrien while (cp < el->el_line.lastchar) 16084260Sobrien *kp++ = *cp++; /* copy it */ 16184260Sobrien el->el_chared.c_kill.last = kp; 16284260Sobrien /* zap! -- delete all of it */ 16384260Sobrien el->el_line.lastchar = el->el_line.buffer; 16484260Sobrien el->el_line.cursor = el->el_line.buffer; 16584260Sobrien return (CC_REFRESH); 1661573Srgrimes} 1671573Srgrimes 1681573Srgrimes 1691573Srgrimes/* em_kill_region(): 1701573Srgrimes * Cut area between mark and cursor and save in cut buffer 1711573Srgrimes * [^W] 1721573Srgrimes */ 1731573Srgrimesprotected el_action_t 1741573Srgrimes/*ARGSUSED*/ 175148834Sstefanfem_kill_region(EditLine *el, int c __unused) 1761573Srgrimes{ 17784260Sobrien char *kp, *cp; 1781573Srgrimes 17984260Sobrien if (!el->el_chared.c_kill.mark) 18084260Sobrien return (CC_ERROR); 1811573Srgrimes 18284260Sobrien if (el->el_chared.c_kill.mark > el->el_line.cursor) { 18384260Sobrien cp = el->el_line.cursor; 18484260Sobrien kp = el->el_chared.c_kill.buf; 18584260Sobrien while (cp < el->el_chared.c_kill.mark) 18684260Sobrien *kp++ = *cp++; /* copy it */ 18784260Sobrien el->el_chared.c_kill.last = kp; 18884260Sobrien c_delafter(el, cp - el->el_line.cursor); 18984260Sobrien } else { /* mark is before cursor */ 19084260Sobrien cp = el->el_chared.c_kill.mark; 19184260Sobrien kp = el->el_chared.c_kill.buf; 19284260Sobrien while (cp < el->el_line.cursor) 19384260Sobrien *kp++ = *cp++; /* copy it */ 19484260Sobrien el->el_chared.c_kill.last = kp; 19584260Sobrien c_delbefore(el, cp - el->el_chared.c_kill.mark); 19684260Sobrien el->el_line.cursor = el->el_chared.c_kill.mark; 19784260Sobrien } 19884260Sobrien return (CC_REFRESH); 1991573Srgrimes} 2001573Srgrimes 2011573Srgrimes 2021573Srgrimes/* em_copy_region(): 2031573Srgrimes * Copy area between mark and cursor to cut buffer 2041573Srgrimes * [M-W] 2051573Srgrimes */ 2061573Srgrimesprotected el_action_t 2071573Srgrimes/*ARGSUSED*/ 208148834Sstefanfem_copy_region(EditLine *el, int c __unused) 2091573Srgrimes{ 21084260Sobrien char *kp, *cp; 2111573Srgrimes 212148834Sstefanf if (!el->el_chared.c_kill.mark) 21384260Sobrien return (CC_ERROR); 2141573Srgrimes 21584260Sobrien if (el->el_chared.c_kill.mark > el->el_line.cursor) { 21684260Sobrien cp = el->el_line.cursor; 21784260Sobrien kp = el->el_chared.c_kill.buf; 21884260Sobrien while (cp < el->el_chared.c_kill.mark) 21984260Sobrien *kp++ = *cp++; /* copy it */ 22084260Sobrien el->el_chared.c_kill.last = kp; 22184260Sobrien } else { 22284260Sobrien cp = el->el_chared.c_kill.mark; 22384260Sobrien kp = el->el_chared.c_kill.buf; 22484260Sobrien while (cp < el->el_line.cursor) 22584260Sobrien *kp++ = *cp++; /* copy it */ 22684260Sobrien el->el_chared.c_kill.last = kp; 22784260Sobrien } 22884260Sobrien return (CC_NORM); 2291573Srgrimes} 2301573Srgrimes 2311573Srgrimes 232148834Sstefanf/* em_gosmacs_transpose(): 2331573Srgrimes * Exchange the two characters before the cursor 2341573Srgrimes * Gosling emacs transpose chars [^T] 2351573Srgrimes */ 2361573Srgrimesprotected el_action_t 237148834Sstefanfem_gosmacs_transpose(EditLine *el, int c) 2381573Srgrimes{ 2391573Srgrimes 24084260Sobrien if (el->el_line.cursor > &el->el_line.buffer[1]) { 24184260Sobrien /* must have at least two chars entered */ 24284260Sobrien c = el->el_line.cursor[-2]; 24384260Sobrien el->el_line.cursor[-2] = el->el_line.cursor[-1]; 24484260Sobrien el->el_line.cursor[-1] = c; 24584260Sobrien return (CC_REFRESH); 24684260Sobrien } else 24784260Sobrien return (CC_ERROR); 2481573Srgrimes} 2491573Srgrimes 2501573Srgrimes 2511573Srgrimes/* em_next_word(): 2521573Srgrimes * Move next to end of current word 2531573Srgrimes * [M-f] 2541573Srgrimes */ 2551573Srgrimesprotected el_action_t 2561573Srgrimes/*ARGSUSED*/ 257148834Sstefanfem_next_word(EditLine *el, int c __unused) 2581573Srgrimes{ 25984260Sobrien if (el->el_line.cursor == el->el_line.lastchar) 26084260Sobrien return (CC_ERROR); 2611573Srgrimes 26284260Sobrien el->el_line.cursor = c__next_word(el->el_line.cursor, 26384260Sobrien el->el_line.lastchar, 26484260Sobrien el->el_state.argument, 26584260Sobrien ce__isword); 2661573Srgrimes 26784260Sobrien if (el->el_map.type == MAP_VI) 268148834Sstefanf if (el->el_chared.c_vcmd.action != NOP) { 26984260Sobrien cv_delfini(el); 27084260Sobrien return (CC_REFRESH); 27184260Sobrien } 27284260Sobrien return (CC_CURSOR); 2731573Srgrimes} 2741573Srgrimes 27584260Sobrien 2761573Srgrimes/* em_upper_case(): 2771573Srgrimes * Uppercase the characters from cursor to end of current word 2781573Srgrimes * [M-u] 2791573Srgrimes */ 2801573Srgrimesprotected el_action_t 2811573Srgrimes/*ARGSUSED*/ 282148834Sstefanfem_upper_case(EditLine *el, int c __unused) 2831573Srgrimes{ 28484260Sobrien char *cp, *ep; 2851573Srgrimes 28684260Sobrien ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 28784260Sobrien el->el_state.argument, ce__isword); 2881573Srgrimes 28984260Sobrien for (cp = el->el_line.cursor; cp < ep; cp++) 290148834Sstefanf if (islower((unsigned char)*cp)) 291148834Sstefanf *cp = toupper((unsigned char)*cp); 2921573Srgrimes 29384260Sobrien el->el_line.cursor = ep; 29484260Sobrien if (el->el_line.cursor > el->el_line.lastchar) 29584260Sobrien el->el_line.cursor = el->el_line.lastchar; 29684260Sobrien return (CC_REFRESH); 2971573Srgrimes} 2981573Srgrimes 2991573Srgrimes 3001573Srgrimes/* em_capitol_case(): 3011573Srgrimes * Capitalize the characters from cursor to end of current word 3021573Srgrimes * [M-c] 3031573Srgrimes */ 3041573Srgrimesprotected el_action_t 3051573Srgrimes/*ARGSUSED*/ 306148834Sstefanfem_capitol_case(EditLine *el, int c __unused) 3071573Srgrimes{ 30884260Sobrien char *cp, *ep; 3091573Srgrimes 31084260Sobrien ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 31184260Sobrien el->el_state.argument, ce__isword); 3121573Srgrimes 31384260Sobrien for (cp = el->el_line.cursor; cp < ep; cp++) { 314148834Sstefanf if (isalpha((unsigned char)*cp)) { 315148834Sstefanf if (islower((unsigned char)*cp)) 316148834Sstefanf *cp = toupper((unsigned char)*cp); 31784260Sobrien cp++; 31884260Sobrien break; 31984260Sobrien } 3201573Srgrimes } 32184260Sobrien for (; cp < ep; cp++) 322148834Sstefanf if (isupper((unsigned char)*cp)) 323148834Sstefanf *cp = tolower((unsigned char)*cp); 3241573Srgrimes 32584260Sobrien el->el_line.cursor = ep; 32684260Sobrien if (el->el_line.cursor > el->el_line.lastchar) 32784260Sobrien el->el_line.cursor = el->el_line.lastchar; 32884260Sobrien return (CC_REFRESH); 3291573Srgrimes} 3301573Srgrimes 33184260Sobrien 3321573Srgrimes/* em_lower_case(): 3331573Srgrimes * Lowercase the characters from cursor to end of current word 3341573Srgrimes * [M-l] 3351573Srgrimes */ 3361573Srgrimesprotected el_action_t 3371573Srgrimes/*ARGSUSED*/ 338148834Sstefanfem_lower_case(EditLine *el, int c __unused) 3391573Srgrimes{ 34084260Sobrien char *cp, *ep; 3411573Srgrimes 34284260Sobrien ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, 34384260Sobrien el->el_state.argument, ce__isword); 3441573Srgrimes 34584260Sobrien for (cp = el->el_line.cursor; cp < ep; cp++) 346148834Sstefanf if (isupper((unsigned char)*cp)) 347148834Sstefanf *cp = tolower((unsigned char)*cp); 3481573Srgrimes 34984260Sobrien el->el_line.cursor = ep; 35084260Sobrien if (el->el_line.cursor > el->el_line.lastchar) 35184260Sobrien el->el_line.cursor = el->el_line.lastchar; 35284260Sobrien return (CC_REFRESH); 3531573Srgrimes} 3541573Srgrimes 3551573Srgrimes 3561573Srgrimes/* em_set_mark(): 3571573Srgrimes * Set the mark at cursor 3581573Srgrimes * [^@] 3591573Srgrimes */ 3601573Srgrimesprotected el_action_t 3611573Srgrimes/*ARGSUSED*/ 362148834Sstefanfem_set_mark(EditLine *el, int c __unused) 3631573Srgrimes{ 36484260Sobrien 36584260Sobrien el->el_chared.c_kill.mark = el->el_line.cursor; 36684260Sobrien return (CC_NORM); 3671573Srgrimes} 3681573Srgrimes 3691573Srgrimes 3701573Srgrimes/* em_exchange_mark(): 3718870Srgrimes * Exchange the cursor and mark 3721573Srgrimes * [^X^X] 3731573Srgrimes */ 3741573Srgrimesprotected el_action_t 3751573Srgrimes/*ARGSUSED*/ 376148834Sstefanfem_exchange_mark(EditLine *el, int c __unused) 3771573Srgrimes{ 37884260Sobrien char *cp; 3791573Srgrimes 38084260Sobrien cp = el->el_line.cursor; 38184260Sobrien el->el_line.cursor = el->el_chared.c_kill.mark; 38284260Sobrien el->el_chared.c_kill.mark = cp; 38384260Sobrien return (CC_CURSOR); 3841573Srgrimes} 3851573Srgrimes 38684260Sobrien 3871573Srgrimes/* em_universal_argument(): 3881573Srgrimes * Universal argument (argument times 4) 3891573Srgrimes * [^U] 3901573Srgrimes */ 3911573Srgrimesprotected el_action_t 3921573Srgrimes/*ARGSUSED*/ 393148834Sstefanfem_universal_argument(EditLine *el, int c __unused) 3941573Srgrimes{ /* multiply current argument by 4 */ 39584260Sobrien 39684260Sobrien if (el->el_state.argument > 1000000) 39784260Sobrien return (CC_ERROR); 39884260Sobrien el->el_state.doingarg = 1; 39984260Sobrien el->el_state.argument *= 4; 40084260Sobrien return (CC_ARGHACK); 4011573Srgrimes} 4021573Srgrimes 40384260Sobrien 4041573Srgrimes/* em_meta_next(): 4051573Srgrimes * Add 8th bit to next character typed 4061573Srgrimes * [<ESC>] 4071573Srgrimes */ 4081573Srgrimesprotected el_action_t 4091573Srgrimes/*ARGSUSED*/ 410148834Sstefanfem_meta_next(EditLine *el, int c __unused) 4111573Srgrimes{ 41284260Sobrien 41384260Sobrien el->el_state.metanext = 1; 41484260Sobrien return (CC_ARGHACK); 4151573Srgrimes} 4161573Srgrimes 4171573Srgrimes 4181573Srgrimes/* em_toggle_overwrite(): 4191573Srgrimes * Switch from insert to overwrite mode or vice versa 4201573Srgrimes */ 4211573Srgrimesprotected el_action_t 4221573Srgrimes/*ARGSUSED*/ 423148834Sstefanfem_toggle_overwrite(EditLine *el, int c __unused) 4241573Srgrimes{ 42584260Sobrien 42684260Sobrien el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? 42784260Sobrien MODE_REPLACE : MODE_INSERT; 42884260Sobrien return (CC_NORM); 4291573Srgrimes} 4301573Srgrimes 4311573Srgrimes 4321573Srgrimes/* em_copy_prev_word(): 4331573Srgrimes * Copy current word to cursor 4341573Srgrimes */ 4351573Srgrimesprotected el_action_t 4361573Srgrimes/*ARGSUSED*/ 437148834Sstefanfem_copy_prev_word(EditLine *el, int c __unused) 4381573Srgrimes{ 43984260Sobrien char *cp, *oldc, *dp; 4401573Srgrimes 44184260Sobrien if (el->el_line.cursor == el->el_line.buffer) 44284260Sobrien return (CC_ERROR); 4431573Srgrimes 44484260Sobrien oldc = el->el_line.cursor; 44584260Sobrien /* does a bounds check */ 44684260Sobrien cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, 44784260Sobrien el->el_state.argument, ce__isword); 4481573Srgrimes 44984260Sobrien c_insert(el, oldc - cp); 45084260Sobrien for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++) 45184260Sobrien *dp++ = *cp; 4521573Srgrimes 45384260Sobrien el->el_line.cursor = dp;/* put cursor at end */ 4541573Srgrimes 45584260Sobrien return (CC_REFRESH); 4561573Srgrimes} 4571573Srgrimes 4581573Srgrimes 4591573Srgrimes/* em_inc_search_next(): 4601573Srgrimes * Emacs incremental next search 4611573Srgrimes */ 4621573Srgrimesprotected el_action_t 4631573Srgrimes/*ARGSUSED*/ 464148834Sstefanfem_inc_search_next(EditLine *el, int c __unused) 4651573Srgrimes{ 46684260Sobrien 46784260Sobrien el->el_search.patlen = 0; 46884260Sobrien return (ce_inc_search(el, ED_SEARCH_NEXT_HISTORY)); 4691573Srgrimes} 4701573Srgrimes 4711573Srgrimes 4721573Srgrimes/* em_inc_search_prev(): 4731573Srgrimes * Emacs incremental reverse search 4741573Srgrimes */ 4751573Srgrimesprotected el_action_t 4761573Srgrimes/*ARGSUSED*/ 477148834Sstefanfem_inc_search_prev(EditLine *el, int c __unused) 4781573Srgrimes{ 47984260Sobrien 48084260Sobrien el->el_search.patlen = 0; 48184260Sobrien return (ce_inc_search(el, ED_SEARCH_PREV_HISTORY)); 4821573Srgrimes} 483148834Sstefanf 484148834Sstefanf 485148834Sstefanf/* em_delete_prev_char(): 486148834Sstefanf * Delete the character to the left of the cursor 487148834Sstefanf * [^?] 488148834Sstefanf */ 489148834Sstefanfprotected el_action_t 490148834Sstefanf/*ARGSUSED*/ 491148834Sstefanfem_delete_prev_char(EditLine *el, int c __unused) 492148834Sstefanf{ 493148834Sstefanf 494148834Sstefanf if (el->el_line.cursor <= el->el_line.buffer) 495148834Sstefanf return (CC_ERROR); 496148834Sstefanf 497148834Sstefanf if (el->el_state.doingarg) 498148834Sstefanf c_delbefore(el, el->el_state.argument); 499148834Sstefanf else 500148834Sstefanf c_delbefore1(el); 501148834Sstefanf el->el_line.cursor -= el->el_state.argument; 502148834Sstefanf if (el->el_line.cursor < el->el_line.buffer) 503148834Sstefanf el->el_line.cursor = el->el_line.buffer; 504148834Sstefanf return (CC_REFRESH); 505148834Sstefanf} 506