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