summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-12-23 16:21:24 -0500
committerJune McEnroe <june@causal.agency>2022-01-21 22:04:33 -0500
commit1a3bc6209c60bea2a26b0ed69628308f1e59ab32 (patch)
treeb87e8a05abf4476500b75c6e4ee5a04c18d984e2
parentdash: Add RPS1 and RPS2 right prompt variables (diff)
downloaddash-1a3bc6209c60bea2a26b0ed69628308f1e59ab32.tar.gz
dash-1a3bc6209c60bea2a26b0ed69628308f1e59ab32.zip
dash: Fix multi-line prompts when right prompts are used
editline does not render a multi-line PS1 correctly when RPS1 is also
set. To work around this, return only the last line of the cached prompt
to editline, and print the leading lines separately inside setprompt.
-rw-r--r--src/parser.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c
index 444fa08..985b51d 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1601,7 +1601,7 @@ STATIC void
 setprompt(int which)
 {
 	struct stackmark smark;
-	const char *prompt, *rprompt;
+	const char *prompt, *rprompt, *nl;
 	int show;
 
 	needprompt = 0;
@@ -1641,6 +1641,10 @@ setprompt(int which)
 		free(rpromptcache);
 		promptcache = savestr(expandstr(prompt));
 		rpromptcache = savestr(expandstr(rprompt));
+
+		nl = strrchr(promptcache, '\n');
+		if (nl)
+			outmem(promptcache, &nl[1] - promptcache, out2);
 	}
 	popstackmark(&smark);
 }
@@ -1651,7 +1655,14 @@ setprompt(int which)
 const char *
 getprompt(void *unused)
 {
-	return promptcache;
+	const char *nl;
+
+	nl = strrchr(promptcache, '\n');
+
+	if (nl)
+		return &nl[1];
+	else
+		return promptcache;
 }
 
 const char *
overwrite the ^I binding for sh-complete. 2019-12-20Disable signing commitsJune McEnroe Why did I ever turn this on? This gets me nothing but inconvenience. RIP to all the wasted bytes in my git repos. 2019-12-19Ignore about-filterJune McEnroe 2019-12-19Fix matching make tags with no sourcesJune McEnroe 2019-12-19Avoid matching := assignments as tagsJune McEnroe 2019-12-18Hide line numbers when rendering mdocJune McEnroe Hack: output an extra <td> after rendering mdoc so that line numbers can be hidden based on there being three. This required splitting source-filter and about-filter since on about pages there is no table. 2019-12-18Customize cgit CSSJune McEnroe 2019-12-18Use :target rather than :focus pseudo-classJune McEnroe :target persists after you click on something else. 2019-12-18Copy cgit auxiliary binaries properlyJune McEnroe 2019-12-18Add git.causal.agency cgit configJune McEnroe 2019-12-18Bail from hi if input is binaryJune McEnroe NULs in the input cause an infinite loop in htmlEscape, not to mention regexes obviously not working, etc. 2019-12-16Post "cgit setup"June McEnroe