summary refs log tree commit diff
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/parser.c b/src/parser.c
index 3cebb25..444fa08 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -108,6 +108,7 @@ int quoteflag;			/* set if (part of) last token was quoted */
 
 
 static char *promptcache;
+static char *rpromptcache;
 
 
 STATIC union node *list(int);
@@ -1600,7 +1601,7 @@ STATIC void
 setprompt(int which)
 {
 	struct stackmark smark;
-	const char *prompt;
+	const char *prompt, *rprompt;
 	int show;
 
 	needprompt = 0;
@@ -1610,16 +1611,20 @@ setprompt(int which)
 	default:
 #ifdef DEBUG
 		prompt = "<internal prompt error>";
+		rprompt = prompt;
 		break;
 #endif
 	case 0:
 		prompt = nullstr;
+		rprompt = nullstr;
 		break;
 	case 1:
 		prompt = ps1val();
+		rprompt = rps1val();
 		break;
 	case 2:
 		prompt = ps2val();
+		rprompt = rps2val();
 		break;
 	}
 
@@ -1633,7 +1638,9 @@ setprompt(int which)
 		out2str(expandstr(prompt));
 	} else {
 		free(promptcache);
+		free(rpromptcache);
 		promptcache = savestr(expandstr(prompt));
+		rpromptcache = savestr(expandstr(rprompt));
 	}
 	popstackmark(&smark);
 }
@@ -1647,6 +1654,12 @@ getprompt(void *unused)
 	return promptcache;
 }
 
+const char *
+getrprompt(void *unused)
+{
+	return rpromptcache;
+}
+
 const char *const *
 findkwd(const char *s)
 {