From 81473b8e78ce77bbbe1edb130a725b5aa3bb0360 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Mon, 9 Mar 2020 19:09:41 -0400 Subject: Add RPS1 and RPS2 right prompts --- bin/1sh/1sh.1 | 10 +++++++ bin/1sh/histedit.c | 1 + bin/1sh/parser.c | 84 +++++++++++++++++++++++++++++++++++++----------------- bin/1sh/parser.h | 1 + bin/1sh/var.c | 6 ++++ bin/1sh/var.h | 4 +++ 6 files changed, 80 insertions(+), 26 deletions(-) (limited to 'bin') diff --git a/bin/1sh/1sh.1 b/bin/1sh/1sh.1 index 6c60c4ce..5ce17a5f 100644 --- a/bin/1sh/1sh.1 +++ b/bin/1sh/1sh.1 @@ -1442,6 +1442,16 @@ The prefix for the trace output (if is active). The default is .Dq Li "+ " . +.It Va RPS1 +The primary right prompt string. +.Va RPS1 +may include any of the formatting sequences from +.Va PS1 . +.It Va RPS2 +The secondary right prompt string. +.Va RPS2 +may include any of the formatting sequences from +.Va PS1 . .El .Ss Word Expansions This clause describes the various expansions that are diff --git a/bin/1sh/histedit.c b/bin/1sh/histedit.c index 74edf24f..bb2b14d1 100644 --- a/bin/1sh/histedit.c +++ b/bin/1sh/histedit.c @@ -122,6 +122,7 @@ histedit(void) if (hist) el_set(el, EL_HIST, history, hist); el_set(el, EL_PROMPT, getprompt); + el_set(el, EL_RPROMPT, getrprompt); el_set(el, EL_ADDFN, "sh-complete", "Filename completion", _el_fn_sh_complete); diff --git a/bin/1sh/parser.c b/bin/1sh/parser.c index 97d6f52a..b92b9462 100644 --- a/bin/1sh/parser.c +++ b/bin/1sh/parser.c @@ -1969,35 +1969,11 @@ pgetc_linecont(void) return (c); } -/* - * called by editline -- any expansions to the prompt - * should be added here. - */ -char * -getprompt(void *unused __unused) -{ +static char * +expandprompt(const char *fmt) { static char ps[PROMPTLEN]; - const char *fmt; const char *pwd; int i, trim; - static char internal_error[] = "??"; - - /* - * Select prompt format. - */ - switch (whichprompt) { - case 0: - fmt = ""; - break; - case 1: - fmt = ps1val(); - break; - case 2: - fmt = ps2val(); - break; - default: - return internal_error; - } /* * Format prompt string. @@ -2077,6 +2053,62 @@ getprompt(void *unused __unused) return (ps); } +/* + * called by editline -- any expansions to the prompt + * should be added here. + */ +char * +getprompt(void *unused __unused) +{ + const char *fmt; + static char internal_error[] = "??"; + + /* + * Select prompt format. + */ + switch (whichprompt) { + case 0: + fmt = ""; + break; + case 1: + fmt = ps1val(); + break; + case 2: + fmt = ps2val(); + break; + default: + return internal_error; + } + + return expandprompt(fmt); +} + +char * +getrprompt(void *unused __unused) +{ + const char *fmt; + static char internal_error[] = "??"; + + /* + * Select prompt format. + */ + switch (whichprompt) { + case 0: + fmt = ""; + break; + case 1: + fmt = rps1val(); + break; + case 2: + fmt = rps2val(); + break; + default: + return internal_error; + } + + return expandprompt(fmt); +} + const char * expandstr(const char *ps) diff --git a/bin/1sh/parser.h b/bin/1sh/parser.h index de9d393a..171bc994 100644 --- a/bin/1sh/parser.h +++ b/bin/1sh/parser.h @@ -84,4 +84,5 @@ void fixredir(union node *, const char *, int); int goodname(const char *); int isassignment(const char *); char *getprompt(void *); +char *getrprompt(void *); const char *expandstr(const char *); diff --git a/bin/1sh/var.c b/bin/1sh/var.c index 2c217399..f82da2e6 100644 --- a/bin/1sh/var.c +++ b/bin/1sh/var.c @@ -95,6 +95,8 @@ struct var vpath; struct var vps1; struct var vps2; struct var vps4; +struct var vrps1; +struct var vrps2; static struct var voptind; struct var vdisvfork; @@ -121,6 +123,10 @@ static const struct varinit varinit[] = { NULL }, { &vps4, 0, "PS4=+ ", NULL }, + { &vrps1, VUNSET, "RPS1=", + NULL }, + { &vrps2, VUNSET, "RPS2=", + NULL }, #ifndef NO_HISTORY { &vterm, VUNSET, "TERM=", setterm }, diff --git a/bin/1sh/var.h b/bin/1sh/var.h index f36bdc68..cdec2ee0 100644 --- a/bin/1sh/var.h +++ b/bin/1sh/var.h @@ -80,6 +80,8 @@ extern struct var vpath; extern struct var vps1; extern struct var vps2; extern struct var vps4; +extern struct var vrps1; +extern struct var vrps2; extern struct var vdisvfork; #ifndef NO_HISTORY extern struct var vhistsize; @@ -104,6 +106,8 @@ extern int initial_localeisutf8; #define ps1val() (vps1.text + 4) #define ps2val() (vps2.text + 4) #define ps4val() (vps4.text + 4) +#define rps1val() (vrps1.text + 5) +#define rps2val() (vrps2.text + 5) #define optindval() (voptind.text + 7) #ifndef NO_HISTORY #define histsizeval() (vhistsize.text + 9) -- cgit 1.4.1 6-29Clean up 1sh prompt settingJune McEnroe 2019-06-29Add Parable of the TalentsJune McEnroe 2019-06-28Rename catsh to 1shJune McEnroe Yes it's another rename because I felt like catsh was too long. 1sh is short and unique. 2019-06-28Set HISTSIZE in catshJune McEnroe 2019-06-28Unset iflag when exiting catshJune McEnroe It saves history! It's usable! 2019-06-24Consolidate catsh history documentationJune McEnroe 2019-06-19Set LESS=FRXJune McEnroe This is how git invokes less by default. I think I want this everywhere. This allows color, exits if the input fits on one screen, and doesn't clear the screen. 2019-06-16Alias date=ddateJune McEnroe Will I regret this? 2019-06-15Set sensitivity by slot in TF2June McEnroe 2019-06-15Add AcceptanceJune McEnroe 2019-06-07Add variables to bitJune McEnroe 2019-06-05Add A Closed and Common OrbitJune McEnroe 2019-06-02Add RebornJune McEnroe 2019-05-30Add bit to bin.7June McEnroe 2019-05-30Simplify and build bitJune McEnroe lex is a waste of time. 2019-05-29Add xx -p optionJune McEnroe 2019-05-27Add FrontierJune McEnroe 2019-05-27Break nicks with ZWNJJune McEnroe This should prevent bad wrapping. 2019-05-26Add DawnJune McEnroe 2019-05-20Declare vasprintf(3) for GNUJune McEnroe who the fuck is scraeming "#define _GNU_SOURCE" at my house. show yourself, coward. i will never #define _GNU_SOURCE 2019-05-20Fix comparison warning in ttpreJune McEnroe 2019-05-20Add AuthorityJune McEnroe 2019-05-19Specify precedence of unary versions of operatorsJune McEnroe 2019-05-18Add compound assignment operators to orderJune McEnroe 2019-05-15Support simple assignment in orderJune McEnroe 2019-05-15Implement sizeof in orderJune McEnroe 2019-05-15Add orderJune McEnroe 2019-05-12Add T suffix in bitJune McEnroe 2019-05-10Highlight yacc and lex files as CJune McEnroe Their %-prefixed directives should probably be highlighted Macro. 2019-05-10Use val instead of suboptargJune McEnroe suboptarg doesn't exist in GNU. Hopefully BSD getsubopt also sets val on failure? 2019-05-09Add Parable of the SowerJune McEnroe 2019-05-07Add bit without buildJune McEnroe Need to do some stuff in the Makefile for lex and yacc and generating HTML pages for it. 2019-05-04Fix MANDIR typoJune McEnroe 2019-05-04Move relay to binJune McEnroe