diff options
author | obrien <obrien@FreeBSD.org> | 2001-10-01 08:41:27 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2001-10-01 08:41:27 +0000 |
commit | 90300f853673b3879ab4d6a60683ff69b564c58b (patch) | |
tree | f9436ba88ca8f8420af319b0a12dd175381b507b /lib/libedit/emacs.c | |
parent | f805e363ed51ace3356b37eb173c3d6435c35022 (diff) | |
download | FreeBSD-src-90300f853673b3879ab4d6a60683ff69b564c58b.zip FreeBSD-src-90300f853673b3879ab4d6a60683ff69b564c58b.tar.gz |
+ Sync with NetBSD, bringing in feature enhancements.
+ Convert to ANSI-C function definitions
+ style(9)
Submitted by: kris
Diffstat (limited to 'lib/libedit/emacs.c')
-rw-r--r-- | lib/libedit/emacs.c | 490 |
1 files changed, 236 insertions, 254 deletions
diff --git a/lib/libedit/emacs.c b/lib/libedit/emacs.c index b83c0bb..afc141b 100644 --- a/lib/libedit/emacs.c +++ b/lib/libedit/emacs.c @@ -32,6 +32,8 @@ * 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 * SUCH DAMAGE. + * + * $NetBSD: emacs.c,v 1.8 2000/09/04 22:06:29 lukem Exp $ */ #include <sys/cdefs.h> @@ -39,6 +41,8 @@ __FBSDID("$FreeBSD$"); #if !defined(lint) && !defined(SCCSID) static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint && not SCCSID */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); /* * emacs.c: Emacs functions @@ -52,28 +56,31 @@ static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93"; */ protected el_action_t /*ARGSUSED*/ -em_delete_or_list(el, c) - EditLine *el; - int c; +em_delete_or_list(EditLine *el, int c) { - if (el->el_line.cursor == el->el_line.lastchar) { /* if I'm at the end */ - if (el->el_line.cursor == el->el_line.buffer) { /* and the beginning */ - term_overwrite(el, STReof, 4);/* then do a EOF */ - term__flush(); - return CC_EOF; - } - else { - /* Here we could list completions, but it is an error right now */ - term_beep(el); - return CC_ERROR; + + if (el->el_line.cursor == el->el_line.lastchar) { + /* if I'm at the end */ + if (el->el_line.cursor == el->el_line.buffer) { + /* and the beginning */ + term_overwrite(el, STReof, 4); /* then do a EOF */ + term__flush(); + return (CC_EOF); + } else { + /* + * Here we could list completions, but it is an + * error right now + */ + term_beep(el); + return (CC_ERROR); + } + } else { + c_delafter(el, el->el_state.argument); /* delete after dot */ + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + /* bounds check */ + return (CC_REFRESH); } - } - else { - c_delafter(el, el->el_state.argument); /* delete after dot */ - if (el->el_line.cursor > el->el_line.lastchar) - el->el_line.cursor = el->el_line.lastchar; /* bounds check */ - return CC_REFRESH; - } } @@ -83,27 +90,26 @@ em_delete_or_list(el, c) */ protected el_action_t /*ARGSUSED*/ -em_delete_next_word(el, c) - EditLine *el; - int c; +em_delete_next_word(EditLine *el, int c) { - char *cp, *p, *kp; + char *cp, *p, *kp; - if (el->el_line.cursor == el->el_line.lastchar) - return CC_ERROR; + if (el->el_line.cursor == el->el_line.lastchar) + return (CC_ERROR); - cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, - el->el_state.argument, ce__isword); + cp = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); - for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) - /* save the text */ - *kp++ = *p; - el->el_chared.c_kill.last = kp; + for (p = el->el_line.cursor, kp = el->el_chared.c_kill.buf; p < cp; p++) + /* save the text */ + *kp++ = *p; + el->el_chared.c_kill.last = kp; - c_delafter(el, cp - el->el_line.cursor); /* delete after dot */ - if (el->el_line.cursor > el->el_line.lastchar) - el->el_line.cursor = el->el_line.lastchar; /* bounds check */ - return CC_REFRESH; + c_delafter(el, cp - el->el_line.cursor); /* delete after dot */ + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + /* bounds check */ + return (CC_REFRESH); } @@ -113,34 +119,34 @@ em_delete_next_word(el, c) */ protected el_action_t /*ARGSUSED*/ -em_yank(el, c) - EditLine *el; - int c; +em_yank(EditLine *el, int c) { - char *kp, *cp; + char *kp, *cp; - if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) - return CC_ERROR; + if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) { + if (!ch_enlargebufs(el, 1)) + return (CC_ERROR); + } - if (el->el_line.lastchar + - (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= - el->el_line.limit) - return CC_ERROR; + if (el->el_line.lastchar + + (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= + el->el_line.limit) + return (CC_ERROR); - el->el_chared.c_kill.mark = el->el_line.cursor; - cp = el->el_line.cursor; + el->el_chared.c_kill.mark = el->el_line.cursor; + cp = el->el_line.cursor; - /* open the space, */ - c_insert(el, el->el_chared.c_kill.last - el->el_chared.c_kill.buf); - /* copy the chars */ - for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) - *cp++ = *kp; + /* open the space, */ + c_insert(el, el->el_chared.c_kill.last - el->el_chared.c_kill.buf); + /* copy the chars */ + for (kp = el->el_chared.c_kill.buf; kp < el->el_chared.c_kill.last; kp++) + *cp++ = *kp; - /* if an arg, cursor at beginning else cursor at end */ - if (el->el_state.argument == 1) - el->el_line.cursor = cp; + /* if an arg, cursor at beginning else cursor at end */ + if (el->el_state.argument == 1) + el->el_line.cursor = cp; - return CC_REFRESH; + return (CC_REFRESH); } @@ -150,20 +156,19 @@ em_yank(el, c) */ protected el_action_t /*ARGSUSED*/ -em_kill_line(el, c) - EditLine *el; - int c; +em_kill_line(EditLine *el, int c) { - char *kp, *cp; - - cp = el->el_line.buffer; - kp = el->el_chared.c_kill.buf; - while (cp < el->el_line.lastchar) - *kp++ = *cp++; /* copy it */ - el->el_chared.c_kill.last = kp; - el->el_line.lastchar = el->el_line.buffer; /* zap! -- delete all of it */ - el->el_line.cursor = el->el_line.buffer; - return CC_REFRESH; + char *kp, *cp; + + cp = el->el_line.buffer; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.lastchar) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + /* zap! -- delete all of it */ + el->el_line.lastchar = el->el_line.buffer; + el->el_line.cursor = el->el_line.buffer; + return (CC_REFRESH); } @@ -173,33 +178,30 @@ em_kill_line(el, c) */ protected el_action_t /*ARGSUSED*/ -em_kill_region(el, c) - EditLine *el; - int c; +em_kill_region(EditLine *el, int c) { - char *kp, *cp; - - if (!el->el_chared.c_kill.mark) - return CC_ERROR; - - if (el->el_chared.c_kill.mark > el->el_line.cursor) { - cp = el->el_line.cursor; - kp = el->el_chared.c_kill.buf; - while (cp < el->el_chared.c_kill.mark) - *kp++ = *cp++; /* copy it */ - el->el_chared.c_kill.last = kp; - c_delafter(el, cp - el->el_line.cursor); - } - else { /* mark is before cursor */ - cp = el->el_chared.c_kill.mark; - kp = el->el_chared.c_kill.buf; - while (cp < el->el_line.cursor) - *kp++ = *cp++; /* copy it */ - el->el_chared.c_kill.last = kp; - c_delbefore(el, cp - el->el_chared.c_kill.mark); - el->el_line.cursor = el->el_chared.c_kill.mark; - } - return CC_REFRESH; + char *kp, *cp; + + if (!el->el_chared.c_kill.mark) + return (CC_ERROR); + + if (el->el_chared.c_kill.mark > el->el_line.cursor) { + cp = el->el_line.cursor; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_chared.c_kill.mark) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + c_delafter(el, cp - el->el_line.cursor); + } else { /* mark is before cursor */ + cp = el->el_chared.c_kill.mark; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.cursor) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + c_delbefore(el, cp - el->el_chared.c_kill.mark); + el->el_line.cursor = el->el_chared.c_kill.mark; + } + return (CC_REFRESH); } @@ -209,30 +211,27 @@ em_kill_region(el, c) */ protected el_action_t /*ARGSUSED*/ -em_copy_region(el, c) - EditLine *el; - int c; +em_copy_region(EditLine *el, int c) { - char *kp, *cp; - - if (el->el_chared.c_kill.mark) - return CC_ERROR; - - if (el->el_chared.c_kill.mark > el->el_line.cursor) { - cp = el->el_line.cursor; - kp = el->el_chared.c_kill.buf; - while (cp < el->el_chared.c_kill.mark) - *kp++ = *cp++; /* copy it */ - el->el_chared.c_kill.last = kp; - } - else { - cp = el->el_chared.c_kill.mark; - kp = el->el_chared.c_kill.buf; - while (cp < el->el_line.cursor) - *kp++ = *cp++; /* copy it */ - el->el_chared.c_kill.last = kp; - } - return CC_NORM; + char *kp, *cp; + + if (el->el_chared.c_kill.mark) + return (CC_ERROR); + + if (el->el_chared.c_kill.mark > el->el_line.cursor) { + cp = el->el_line.cursor; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_chared.c_kill.mark) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + } else { + cp = el->el_chared.c_kill.mark; + kp = el->el_chared.c_kill.buf; + while (cp < el->el_line.cursor) + *kp++ = *cp++; /* copy it */ + el->el_chared.c_kill.last = kp; + } + return (CC_NORM); } @@ -241,20 +240,17 @@ em_copy_region(el, c) * Gosling emacs transpose chars [^T] */ protected el_action_t -em_gosmacs_traspose(el, c) - EditLine *el; - int c; +em_gosmacs_traspose(EditLine *el, int c) { - if (el->el_line.cursor > &el->el_line.buffer[1]) { - /* must have at least two chars entered */ - c = el->el_line.cursor[-2]; - el->el_line.cursor[-2] = el->el_line.cursor[-1]; - el->el_line.cursor[-1] = c; - return CC_REFRESH; - } - else - return CC_ERROR; + if (el->el_line.cursor > &el->el_line.buffer[1]) { + /* must have at least two chars entered */ + c = el->el_line.cursor[-2]; + el->el_line.cursor[-2] = el->el_line.cursor[-1]; + el->el_line.cursor[-1] = c; + return (CC_REFRESH); + } else + return (CC_ERROR); } @@ -264,49 +260,46 @@ em_gosmacs_traspose(el, c) */ protected el_action_t /*ARGSUSED*/ -em_next_word(el, c) - EditLine *el; - int c; +em_next_word(EditLine *el, int c) { - if (el->el_line.cursor == el->el_line.lastchar) - return CC_ERROR; - - el->el_line.cursor = c__next_word(el->el_line.cursor, el->el_line.lastchar, - el->el_state.argument, - ce__isword); - - if (el->el_map.type == MAP_VI) - if (el->el_chared.c_vcmd.action & DELETE) { - cv_delfini(el); - return CC_REFRESH; - } - - return CC_CURSOR; + if (el->el_line.cursor == el->el_line.lastchar) + return (CC_ERROR); + + el->el_line.cursor = c__next_word(el->el_line.cursor, + el->el_line.lastchar, + el->el_state.argument, + ce__isword); + + if (el->el_map.type == MAP_VI) + if (el->el_chared.c_vcmd.action & DELETE) { + cv_delfini(el); + return (CC_REFRESH); + } + return (CC_CURSOR); } + /* em_upper_case(): * Uppercase the characters from cursor to end of current word * [M-u] */ protected el_action_t /*ARGSUSED*/ -em_upper_case(el, c) - EditLine *el; - int c; +em_upper_case(EditLine *el, int c) { - char *cp, *ep; + char *cp, *ep; - ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, - el->el_state.argument, ce__isword); + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); - for (cp = el->el_line.cursor; cp < ep; cp++) - if (islower((unsigned char)*cp)) - *cp = toupper((unsigned char)*cp); + for (cp = el->el_line.cursor; cp < ep; cp++) + if (islower((unsigned char) *cp)) + *cp = toupper((unsigned char) *cp); - el->el_line.cursor = ep; - if (el->el_line.cursor > el->el_line.lastchar) - el->el_line.cursor = el->el_line.lastchar; - return CC_REFRESH; + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return (CC_REFRESH); } @@ -316,56 +309,53 @@ em_upper_case(el, c) */ protected el_action_t /*ARGSUSED*/ -em_capitol_case(el, c) - EditLine *el; - int c; +em_capitol_case(EditLine *el, int c) { - char *cp, *ep; - - ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, - el->el_state.argument, ce__isword); - - for (cp = el->el_line.cursor; cp < ep; cp++) { - if (isalpha((unsigned char)*cp)) { - if (islower((unsigned char)*cp)) - *cp = toupper((unsigned char)*cp); - cp++; - break; + char *cp, *ep; + + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); + + for (cp = el->el_line.cursor; cp < ep; cp++) { + if (isalpha((unsigned char) *cp)) { + if (islower((unsigned char) *cp)) + *cp = toupper((unsigned char) *cp); + cp++; + break; + } } - } - for (; cp < ep; cp++) - if (isupper((unsigned char)*cp)) - *cp = tolower((unsigned char)*cp); - - el->el_line.cursor = ep; - if (el->el_line.cursor > el->el_line.lastchar) - el->el_line.cursor = el->el_line.lastchar; - return CC_REFRESH; + for (; cp < ep; cp++) + if (isupper((unsigned char) *cp)) + *cp = tolower((unsigned char) *cp); + + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return (CC_REFRESH); } + /* em_lower_case(): * Lowercase the characters from cursor to end of current word * [M-l] */ protected el_action_t /*ARGSUSED*/ -em_lower_case(el, c) - EditLine *el; - int c; +em_lower_case(EditLine *el, int c) { - char *cp, *ep; + char *cp, *ep; - ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, - el->el_state.argument, ce__isword); + ep = c__next_word(el->el_line.cursor, el->el_line.lastchar, + el->el_state.argument, ce__isword); - for (cp = el->el_line.cursor; cp < ep; cp++) - if (isupper((unsigned char)*cp)) - *cp = tolower((unsigned char)*cp); + for (cp = el->el_line.cursor; cp < ep; cp++) + if (isupper((unsigned char) *cp)) + *cp = tolower((unsigned char) *cp); - el->el_line.cursor = ep; - if (el->el_line.cursor > el->el_line.lastchar) - el->el_line.cursor = el->el_line.lastchar; - return CC_REFRESH; + el->el_line.cursor = ep; + if (el->el_line.cursor > el->el_line.lastchar) + el->el_line.cursor = el->el_line.lastchar; + return (CC_REFRESH); } @@ -375,12 +365,11 @@ em_lower_case(el, c) */ protected el_action_t /*ARGSUSED*/ -em_set_mark(el, c) - EditLine *el; - int c; +em_set_mark(EditLine *el, int c) { - el->el_chared.c_kill.mark = el->el_line.cursor; - return CC_NORM; + + el->el_chared.c_kill.mark = el->el_line.cursor; + return (CC_NORM); } @@ -390,47 +379,45 @@ em_set_mark(el, c) */ protected el_action_t /*ARGSUSED*/ -em_exchange_mark(el, c) - EditLine *el; - int c; +em_exchange_mark(EditLine *el, int c) { - register char *cp; + char *cp; - cp = el->el_line.cursor; - el->el_line.cursor = el->el_chared.c_kill.mark; - el->el_chared.c_kill.mark = cp; - return CC_CURSOR; + cp = el->el_line.cursor; + el->el_line.cursor = el->el_chared.c_kill.mark; + el->el_chared.c_kill.mark = cp; + return (CC_CURSOR); } + /* em_universal_argument(): * Universal argument (argument times 4) * [^U] */ protected el_action_t /*ARGSUSED*/ -em_universal_argument(el, c) - EditLine *el; - int c; +em_universal_argument(EditLine *el, int c) { /* multiply current argument by 4 */ - if (el->el_state.argument > 1000000) - return CC_ERROR; - el->el_state.doingarg = 1; - el->el_state.argument *= 4; - return CC_ARGHACK; + + if (el->el_state.argument > 1000000) + return (CC_ERROR); + el->el_state.doingarg = 1; + el->el_state.argument *= 4; + return (CC_ARGHACK); } + /* em_meta_next(): * Add 8th bit to next character typed * [<ESC>] */ protected el_action_t /*ARGSUSED*/ -em_meta_next(el, c) - EditLine *el; - int c; +em_meta_next(EditLine *el, int c) { - el->el_state.metanext = 1; - return CC_ARGHACK; + + el->el_state.metanext = 1; + return (CC_ARGHACK); } @@ -439,13 +426,12 @@ em_meta_next(el, c) */ protected el_action_t /*ARGSUSED*/ -em_toggle_overwrite(el, c) - EditLine *el; - int c; +em_toggle_overwrite(EditLine *el, int c) { - el->el_state.inputmode = - (el->el_state.inputmode == MODE_INSERT) ? MODE_REPLACE : MODE_INSERT; - return CC_NORM; + + el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? + MODE_REPLACE : MODE_INSERT; + return (CC_NORM); } @@ -454,27 +440,25 @@ em_toggle_overwrite(el, c) */ protected el_action_t /*ARGSUSED*/ -em_copy_prev_word(el, c) - EditLine *el; - int c; +em_copy_prev_word(EditLine *el, int c) { - char *cp, *oldc, *dp; + char *cp, *oldc, *dp; - if (el->el_line.cursor == el->el_line.buffer) - return CC_ERROR; + if (el->el_line.cursor == el->el_line.buffer) + return (CC_ERROR); - oldc = el->el_line.cursor; - /* does a bounds check */ - cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, - el->el_state.argument, ce__isword); + oldc = el->el_line.cursor; + /* does a bounds check */ + cp = c__prev_word(el->el_line.cursor, el->el_line.buffer, + el->el_state.argument, ce__isword); - c_insert(el, oldc - cp); - for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; cp++) - *dp++ = *cp; + c_insert(el, oldc - cp); + for (dp = oldc; cp < oldc && dp < el->el_line.lastchar; 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); } @@ -483,12 +467,11 @@ em_copy_prev_word(el, c) */ protected el_action_t /*ARGSUSED*/ -em_inc_search_next(el, c) - EditLine *el; - int c; +em_inc_search_next(EditLine *el, int c) { - el->el_search.patlen = 0; - return ce_inc_search(el, ED_SEARCH_NEXT_HISTORY); + + el->el_search.patlen = 0; + return (ce_inc_search(el, ED_SEARCH_NEXT_HISTORY)); } @@ -497,10 +480,9 @@ em_inc_search_next(el, c) */ protected el_action_t /*ARGSUSED*/ -em_inc_search_prev(el, c) - EditLine *el; - int c; +em_inc_search_prev(EditLine *el, int c) { - el->el_search.patlen = 0; - return ce_inc_search(el, ED_SEARCH_PREV_HISTORY); + + el->el_search.patlen = 0; + return (ce_inc_search(el, ED_SEARCH_PREV_HISTORY)); } |