diff options
Diffstat (limited to 'lib/libedit/prompt.c')
-rw-r--r-- | lib/libedit/prompt.c | 117 |
1 files changed, 83 insertions, 34 deletions
diff --git a/lib/libedit/prompt.c b/lib/libedit/prompt.c index 6baef8a53408..56401d662c9b 100644 --- a/lib/libedit/prompt.c +++ b/lib/libedit/prompt.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: prompt.c,v 1.7 2000/09/04 22:06:31 lukem Exp $ */ #include <sys/cdefs.h> @@ -39,6 +41,8 @@ __FBSDID("$FreeBSD$"); #if !defined(lint) && !defined(SCCSID) static char sccsid[] = "@(#)prompt.c 8.1 (Berkeley) 6/4/93"; #endif /* not lint && not SCCSID */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); /* * prompt.c: Prompt printing functions @@ -47,18 +51,32 @@ static char sccsid[] = "@(#)prompt.c 8.1 (Berkeley) 6/4/93"; #include <stdio.h> #include "el.h" -private char *prompt_default __P((EditLine *)); +private char *prompt_default(EditLine *); +private char *prompt_default_r(EditLine *); /* prompt_default(): * Just a default prompt, in case the user did not provide one */ private char * /*ARGSUSED*/ -prompt_default(el) - EditLine *el; +prompt_default(EditLine *el) +{ + static char a[3] = {'?', ' ', '\0'}; + + return (a); +} + + +/* prompt_default_r(): + * Just a default rprompt, in case the user did not provide one + */ +private char * +/*ARGSUSED*/ +prompt_default_r(EditLine *el) { - static char a[3] = { '?', ' ', '\0' }; - return a; + static char a[1] = {'\0'}; + + return (a); } @@ -69,31 +87,39 @@ prompt_default(el) * bit to flag them */ protected void -prompt_print(el) - EditLine *el; +prompt_print(EditLine *el, int op) { - char *p = (*el->el_prompt.p_func)(el); - while (*p) - re_putc(el, *p++); + el_prompt_t *elp; + char *p; - el->el_prompt.p_pos.v = el->el_refresh.r_cursor.v; - el->el_prompt.p_pos.h = el->el_refresh.r_cursor.h; + if (op == EL_PROMPT) + elp = &el->el_prompt; + else + elp = &el->el_rprompt; + p = (elp->p_func) (el); + while (*p) + re_putc(el, *p++, 1); -} /* end prompt_print */ + elp->p_pos.v = el->el_refresh.r_cursor.v; + elp->p_pos.h = el->el_refresh.r_cursor.h; +} /* prompt_init(): * Initialize the prompt stuff */ protected int -prompt_init(el) - EditLine *el; +prompt_init(EditLine *el) { - el->el_prompt.p_func = prompt_default; - el->el_prompt.p_pos.v = 0; - el->el_prompt.p_pos.h = 0; - return 0; -} /* end prompt_init */ + + el->el_prompt.p_func = prompt_default; + el->el_prompt.p_pos.v = 0; + el->el_prompt.p_pos.h = 0; + el->el_rprompt.p_func = prompt_default_r; + el->el_rprompt.p_pos.v = 0; + el->el_rprompt.p_pos.h = 0; + return (0); +} /* prompt_end(): @@ -101,25 +127,48 @@ prompt_init(el) */ protected void /*ARGSUSED*/ -prompt_end(el) - EditLine *el; +prompt_end(EditLine *el) { -} /* end prompt_end */ +} /* prompt_set(): * Install a prompt printing function */ protected int -prompt_set(el, prf) - EditLine *el; - el_pfunc_t prf; +prompt_set(EditLine *el, el_pfunc_t prf, int op) { - if (prf == NULL) - el->el_prompt.p_func = prompt_default; - else - el->el_prompt.p_func = prf; - el->el_prompt.p_pos.v = 0; - el->el_prompt.p_pos.h = 0; - return 0; -} /* end prompt_set */ + el_prompt_t *p; + + if (op == EL_PROMPT) + p = &el->el_prompt; + else + p = &el->el_rprompt; + if (prf == NULL) { + if (op == EL_PROMPT) + p->p_func = prompt_default; + else + p->p_func = prompt_default_r; + } else + p->p_func = prf; + p->p_pos.v = 0; + p->p_pos.h = 0; + return (0); +} + + +/* prompt_get(): + * Retrieve the prompt printing function + */ +protected int +prompt_get(EditLine *el, el_pfunc_t *prf, int op) +{ + + if (prf == NULL) + return (-1); + if (op == EL_PROMPT) + *prf = el->el_prompt.p_func; + else + *prf = el->el_rprompt.p_func; + return (0); +} |