"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "libedit/emacs.c" between
tnftp-20151004.tar.gz and tnftp-20200705.tar.gz

About: tnftp is an enhanced ftp client (prior name "lukemftp").

emacs.c  (tnftp-20151004):emacs.c  (tnftp-20200705)
/* $NetBSD: emacs.c,v 1.5 2005/06/09 16:48:57 lukem Exp $ */ /* $NetBSD: emacs.c,v 1.8 2020/07/04 13:43:21 lukem Exp $ */
/* from NetBSD: emacs.c,v 1.19 2004/10/28 21:14:52 dsl Exp */ /* from NetBSD: emacs.c,v 1.36 2016/05/09 21:46:56 christos Exp */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved. * The Regents of the University of California. All rights reserved.
* *
* This code is derived from software contributed to Berkeley by * This code is derived from software contributed to Berkeley by
* Christos Zoulas of Cornell University. * Christos Zoulas of Cornell University.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
skipping to change at line 36 skipping to change at line 36
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "tnftp.h" #include "config.h"
#include "sys.h"
#if 0 /* tnftp */
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID(" NetBSD: emacs.c,v 1.36 2016/05/09 21:46:56 christos Exp ");
#endif
#endif /* not lint && not SCCSID */
#endif /* tnftp */
/* /*
* emacs.c: Emacs functions * emacs.c: Emacs functions
*/ */
#include <ctype.h>
#include "el.h" #include "el.h"
#include "emacs.h"
#include "fcns.h"
/* em_delete_or_list(): /* em_delete_or_list():
* Delete character under cursor or list completions if at end of line * Delete character under cursor or list completions if at end of line
* [^D] * [^D]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_delete_or_list(EditLine *el, int c __attribute__((__unused__))) em_delete_or_list(EditLine *el, wint_t c)
{ {
if (el->el_line.cursor == el->el_line.lastchar) { if (el->el_line.cursor == el->el_line.lastchar) {
/* if I'm at the end */ /* if I'm at the end */
if (el->el_line.cursor == el->el_line.buffer) { if (el->el_line.cursor == el->el_line.buffer) {
/* and the beginning */ /* and the beginning */
term_overwrite(el, STReof, 4); /* then do a EOF */ terminal_writec(el, c); /* then do an EOF */
term__flush(); return CC_EOF;
return (CC_EOF);
} else { } else {
/* /*
* Here we could list completions, but it is an * Here we could list completions, but it is an
* error right now * error right now
*/ */
term_beep(el); terminal_beep(el);
return (CC_ERROR); return CC_ERROR;
} }
} else { } else {
if (el->el_state.doingarg) if (el->el_state.doingarg)
c_delafter(el, el->el_state.argument); c_delafter(el, el->el_state.argument);
else else
c_delafter1(el); c_delafter1(el);
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
/* bounds check */ /* bounds check */
return (CC_REFRESH); return CC_REFRESH;
} }
} }
/* em_delete_next_word(): /* em_delete_next_word():
* Cut from cursor to end of current word * Cut from cursor to end of current word
* [M-d] * [M-d]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_delete_next_word(EditLine *el, int c __attribute__((__unused__))) em_delete_next_word(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp, *p, *kp; wchar_t *cp, *p, *kp;
if (el->el_line.cursor == el->el_line.lastchar) if (el->el_line.cursor == el->el_line.lastchar)
return (CC_ERROR); return CC_ERROR;
cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, cp = c__next_word(el->el_line.cursor, el->el_line.lastchar,
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++)
/* save the text */ /* save the text */
*kp++ = *p; *kp++ = *p;
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
c_delafter(el, cp - el->el_line.cursor); /* delete after dot */ c_delafter(el, (int)(cp - el->el_line.cursor)); /* delete after dot */
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
/* bounds check */ /* bounds check */
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_yank(): /* em_yank():
* Paste cut buffer at cursor position * Paste cut buffer at cursor position
* [^Y] * [^Y]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_yank(EditLine *el, int c __attribute__((__unused__))) em_yank(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *kp, *cp; wchar_t *kp, *cp;
if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf)
return (CC_NORM); return CC_NORM;
if (el->el_line.lastchar + if (el->el_line.lastchar +
(el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >=
el->el_line.limit) el->el_line.limit)
return (CC_ERROR); return CC_ERROR;
el->el_chared.c_kill.mark = el->el_line.cursor; el->el_chared.c_kill.mark = el->el_line.cursor;
cp = el->el_line.cursor; cp = el->el_line.cursor;
/* open the space, */ /* open the space, */
c_insert(el, el->el_chared.c_kill.last - el->el_chared.c_kill.buf); c_insert(el,
(int)(el->el_chared.c_kill.last - el->el_chared.c_kill.buf));
/* copy the chars */ /* copy the chars */
for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++)
*cp++ = *kp; *cp++ = *kp;
/* if an arg, cursor at beginning else cursor at end */ /* if an arg, cursor at beginning else cursor at end */
if (el->el_state.argument == 1) if (el->el_state.argument == 1)
el->el_line.cursor = cp; el->el_line.cursor = cp;
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_kill_line(): /* em_kill_line():
* Cut the entire line and save in cut buffer * Cut the entire line and save in cut buffer
* [^U] * [^U]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_kill_line(EditLine *el, int c __attribute__((__unused__))) em_kill_line(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *kp, *cp; wchar_t *kp, *cp;
cp = el->el_line.buffer; cp = el->el_line.buffer;
kp = el->el_chared.c_kill.buf; kp = el->el_chared.c_kill.buf;
while (cp < el->el_line.lastchar) while (cp < el->el_line.lastchar)
*kp++ = *cp++; /* copy it */ *kp++ = *cp++; /* copy it */
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
/* zap! -- delete all of it */ /* zap! -- delete all of it */
el->el_line.lastchar = el->el_line.buffer; el->el_line.lastchar = el->el_line.buffer;
el->el_line.cursor = el->el_line.buffer; el->el_line.cursor = el->el_line.buffer;
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_kill_region(): /* em_kill_region():
* Cut area between mark and cursor and save in cut buffer * Cut area between mark and cursor and save in cut buffer
* [^W] * [^W]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_kill_region(EditLine *el, int c __attribute__((__unused__))) em_kill_region(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *kp, *cp; wchar_t *kp, *cp;
if (!el->el_chared.c_kill.mark) if (!el->el_chared.c_kill.mark)
return (CC_ERROR); return CC_ERROR;
if (el->el_chared.c_kill.mark > el->el_line.cursor) { if (el->el_chared.c_kill.mark > el->el_line.cursor) {
cp = el->el_line.cursor; cp = el->el_line.cursor;
kp = el->el_chared.c_kill.buf; kp = el->el_chared.c_kill.buf;
while (cp < el->el_chared.c_kill.mark) while (cp < el->el_chared.c_kill.mark)
*kp++ = *cp++; /* copy it */ *kp++ = *cp++; /* copy it */
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
c_delafter(el, cp - el->el_line.cursor); c_delafter(el, (int)(cp - el->el_line.cursor));
} else { /* mark is before cursor */ } else { /* mark is before cursor */
cp = el->el_chared.c_kill.mark; cp = el->el_chared.c_kill.mark;
kp = el->el_chared.c_kill.buf; kp = el->el_chared.c_kill.buf;
while (cp < el->el_line.cursor) while (cp < el->el_line.cursor)
*kp++ = *cp++; /* copy it */ *kp++ = *cp++; /* copy it */
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
c_delbefore(el, cp - el->el_chared.c_kill.mark); c_delbefore(el, (int)(cp - el->el_chared.c_kill.mark));
el->el_line.cursor = el->el_chared.c_kill.mark; el->el_line.cursor = el->el_chared.c_kill.mark;
} }
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_copy_region(): /* em_copy_region():
* Copy area between mark and cursor to cut buffer * Copy area between mark and cursor to cut buffer
* [M-W] * [M-W]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_copy_region(EditLine *el, int c __attribute__((__unused__))) em_copy_region(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *kp, *cp; wchar_t *kp, *cp;
if (!el->el_chared.c_kill.mark) if (!el->el_chared.c_kill.mark)
return (CC_ERROR); return CC_ERROR;
if (el->el_chared.c_kill.mark > el->el_line.cursor) { if (el->el_chared.c_kill.mark > el->el_line.cursor) {
cp = el->el_line.cursor; cp = el->el_line.cursor;
kp = el->el_chared.c_kill.buf; kp = el->el_chared.c_kill.buf;
while (cp < el->el_chared.c_kill.mark) while (cp < el->el_chared.c_kill.mark)
*kp++ = *cp++; /* copy it */ *kp++ = *cp++; /* copy it */
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
} else { } else {
cp = el->el_chared.c_kill.mark; cp = el->el_chared.c_kill.mark;
kp = el->el_chared.c_kill.buf; kp = el->el_chared.c_kill.buf;
while (cp < el->el_line.cursor) while (cp < el->el_line.cursor)
*kp++ = *cp++; /* copy it */ *kp++ = *cp++; /* copy it */
el->el_chared.c_kill.last = kp; el->el_chared.c_kill.last = kp;
} }
return (CC_NORM); return CC_NORM;
} }
/* em_gosmacs_transpose(): /* em_gosmacs_transpose():
* Exchange the two characters before the cursor * Exchange the two characters before the cursor
* Gosling emacs transpose chars [^T] * Gosling emacs transpose chars [^T]
*/ */
protected el_action_t libedit_private el_action_t
em_gosmacs_transpose(EditLine *el, int c) em_gosmacs_transpose(EditLine *el, wint_t c)
{ {
if (el->el_line.cursor > &el->el_line.buffer[1]) { if (el->el_line.cursor > &el->el_line.buffer[1]) {
/* must have at least two chars entered */ /* must have at least two chars entered */
c = el->el_line.cursor[-2]; c = el->el_line.cursor[-2];
el->el_line.cursor[-2] = el->el_line.cursor[-1]; el->el_line.cursor[-2] = el->el_line.cursor[-1];
el->el_line.cursor[-1] = c; el->el_line.cursor[-1] = c;
return (CC_REFRESH); return CC_REFRESH;
} else } else
return (CC_ERROR); return CC_ERROR;
} }
/* em_next_word(): /* em_next_word():
* Move next to end of current word * Move next to end of current word
* [M-f] * [M-f]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_next_word(EditLine *el, int c __attribute__((__unused__))) em_next_word(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
if (el->el_line.cursor == el->el_line.lastchar) if (el->el_line.cursor == el->el_line.lastchar)
return (CC_ERROR); return CC_ERROR;
el->el_line.cursor = c__next_word(el->el_line.cursor, el->el_line.cursor = c__next_word(el->el_line.cursor,
el->el_line.lastchar, el->el_line.lastchar,
el->el_state.argument, el->el_state.argument,
ce__isword); ce__isword);
if (el->el_map.type == MAP_VI) if (el->el_map.type == MAP_VI)
if (el->el_chared.c_vcmd.action != NOP) { if (el->el_chared.c_vcmd.action != NOP) {
cv_delfini(el); cv_delfini(el);
return (CC_REFRESH); return CC_REFRESH;
} }
return (CC_CURSOR); return CC_CURSOR;
} }
/* em_upper_case(): /* em_upper_case():
* Uppercase the characters from cursor to end of current word * Uppercase the characters from cursor to end of current word
* [M-u] * [M-u]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_upper_case(EditLine *el, int c __attribute__((__unused__))) em_upper_case(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp, *ep; wchar_t *cp, *ep;
ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, ep = c__next_word(el->el_line.cursor, el->el_line.lastchar,
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) for (cp = el->el_line.cursor; cp < ep; cp++)
if (islower((unsigned char)*cp)) if (iswlower(*cp))
*cp = toupper((unsigned char)*cp); *cp = towupper(*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_capitol_case(): /* em_capitol_case():
* Capitalize the characters from cursor to end of current word * Capitalize the characters from cursor to end of current word
* [M-c] * [M-c]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_capitol_case(EditLine *el, int c __attribute__((__unused__))) em_capitol_case(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp, *ep; wchar_t *cp, *ep;
ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, ep = c__next_word(el->el_line.cursor, el->el_line.lastchar,
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) { for (cp = el->el_line.cursor; cp < ep; cp++) {
if (isalpha((unsigned char)*cp)) { if (iswalpha(*cp)) {
if (islower((unsigned char)*cp)) if (iswlower(*cp))
*cp = toupper((unsigned char)*cp); *cp = towupper(*cp);
cp++; cp++;
break; break;
} }
} }
for (; cp < ep; cp++) for (; cp < ep; cp++)
if (isupper((unsigned char)*cp)) if (iswupper(*cp))
*cp = tolower((unsigned char)*cp); *cp = towlower(*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_lower_case(): /* em_lower_case():
* Lowercase the characters from cursor to end of current word * Lowercase the characters from cursor to end of current word
* [M-l] * [M-l]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_lower_case(EditLine *el, int c __attribute__((__unused__))) em_lower_case(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp, *ep; wchar_t *cp, *ep;
ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, ep = c__next_word(el->el_line.cursor, el->el_line.lastchar,
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) for (cp = el->el_line.cursor; cp < ep; cp++)
if (isupper((unsigned char)*cp)) if (iswupper(*cp))
*cp = tolower((unsigned char)*cp); *cp = towlower(*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_set_mark(): /* em_set_mark():
* Set the mark at cursor * Set the mark at cursor
* [^@] * [^@]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_set_mark(EditLine *el, int c __attribute__((__unused__))) em_set_mark(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
el->el_chared.c_kill.mark = el->el_line.cursor; el->el_chared.c_kill.mark = el->el_line.cursor;
return (CC_NORM); return CC_NORM;
} }
/* em_exchange_mark(): /* em_exchange_mark():
* Exchange the cursor and mark * Exchange the cursor and mark
* [^X^X] * [^X^X]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_exchange_mark(EditLine *el, int c __attribute__((__unused__))) em_exchange_mark(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp; wchar_t *cp;
cp = el->el_line.cursor; cp = el->el_line.cursor;
el->el_line.cursor = el->el_chared.c_kill.mark; el->el_line.cursor = el->el_chared.c_kill.mark;
el->el_chared.c_kill.mark = cp; el->el_chared.c_kill.mark = cp;
return (CC_CURSOR); return CC_CURSOR;
} }
/* em_universal_argument(): /* em_universal_argument():
* Universal argument (argument times 4) * Universal argument (argument times 4)
* [^U] * [^U]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_universal_argument(EditLine *el, int c __attribute__((__unused__))) em_universal_argument(EditLine *el, wint_t c __attribute__((__unused__)))
{ /* multiply current argument by 4 */ { /* multiply current argument by 4 */
if (el->el_state.argument > 1000000) if (el->el_state.argument > 1000000)
return (CC_ERROR); return CC_ERROR;
el->el_state.doingarg = 1; el->el_state.doingarg = 1;
el->el_state.argument *= 4; el->el_state.argument *= 4;
return (CC_ARGHACK); return CC_ARGHACK;
} }
/* em_meta_next(): /* em_meta_next():
* Add 8th bit to next character typed * Add 8th bit to next character typed
* [<ESC>] * [<ESC>]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_meta_next(EditLine *el, int c __attribute__((__unused__))) em_meta_next(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
el->el_state.metanext = 1; el->el_state.metanext = 1;
return (CC_ARGHACK); return CC_ARGHACK;
} }
/* em_toggle_overwrite(): /* em_toggle_overwrite():
* Switch from insert to overwrite mode or vice versa * Switch from insert to overwrite mode or vice versa
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_toggle_overwrite(EditLine *el, int c __attribute__((__unused__))) em_toggle_overwrite(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ?
MODE_REPLACE : MODE_INSERT; MODE_REPLACE : MODE_INSERT;
return (CC_NORM); return CC_NORM;
} }
/* em_copy_prev_word(): /* em_copy_prev_word():
* Copy current word to cursor * Copy current word to cursor
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_copy_prev_word(EditLine *el, int c __attribute__((__unused__))) em_copy_prev_word(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
char *cp, *oldc, *dp; wchar_t *cp, *oldc, *dp;
if (el->el_line.cursor == el->el_line.buffer) if (el->el_line.cursor == el->el_line.buffer)
return (CC_ERROR); return CC_ERROR;
oldc = el->el_line.cursor; oldc = el->el_line.cursor;
/* does a bounds check */ /* does a bounds check */
cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, cp = c__prev_word(el->el_line.cursor, el->el_line.buffer,
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
c_insert(el, oldc - cp); c_insert(el, (int)(oldc - cp));
for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++) for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++)
*dp++ = *cp; *dp++ = *cp;
el->el_line.cursor = dp;/* put cursor at end */ el->el_line.cursor = dp;/* put cursor at end */
return (CC_REFRESH); return CC_REFRESH;
} }
/* em_inc_search_next(): /* em_inc_search_next():
* Emacs incremental next search * Emacs incremental next search
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_inc_search_next(EditLine *el, int c __attribute__((__unused__))) em_inc_search_next(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
el->el_search.patlen = 0; el->el_search.patlen = 0;
return (ce_inc_search(el, ED_SEARCH_NEXT_HISTORY)); return ce_inc_search(el, ED_SEARCH_NEXT_HISTORY);
} }
/* em_inc_search_prev(): /* em_inc_search_prev():
* Emacs incremental reverse search * Emacs incremental reverse search
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_inc_search_prev(EditLine *el, int c __attribute__((__unused__))) em_inc_search_prev(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
el->el_search.patlen = 0; el->el_search.patlen = 0;
return (ce_inc_search(el, ED_SEARCH_PREV_HISTORY)); return ce_inc_search(el, ED_SEARCH_PREV_HISTORY);
} }
/* em_delete_prev_char(): /* em_delete_prev_char():
* Delete the character to the left of the cursor * Delete the character to the left of the cursor
* [^?] * [^?]
*/ */
protected el_action_t libedit_private el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_delete_prev_char(EditLine *el, int c __attribute__((__unused__))) em_delete_prev_char(EditLine *el, wint_t c __attribute__((__unused__)))
{ {
if (el->el_line.cursor <= el->el_line.buffer) if (el->el_line.cursor <= el->el_line.buffer)
return (CC_ERROR); return CC_ERROR;
if (el->el_state.doingarg) if (el->el_state.doingarg)
c_delbefore(el, el->el_state.argument); c_delbefore(el, el->el_state.argument);
else else
c_delbefore1(el); c_delbefore1(el);
el->el_line.cursor -= el->el_state.argument; el->el_line.cursor -= el->el_state.argument;
if (el->el_line.cursor < el->el_line.buffer) if (el->el_line.cursor < el->el_line.buffer)
el->el_line.cursor = el->el_line.buffer; el->el_line.cursor = el->el_line.buffer;
return (CC_REFRESH); return CC_REFRESH;
} }
 End of changes. 95 change blocks. 
104 lines changed or deleted 117 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)