aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-05-06 07:05:27 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-05-06 07:05:27 -0700
commit668c0d87b56e3f1b8fa7992bbd1709dbaaa89470 (patch)
treea2e6a663be111a5004787304a87513d0f7325edf
parentf8cd829a181260f4293f226cf77332cdae05b665 (diff)
downloadpw-668c0d87b56e3f1b8fa7992bbd1709dbaaa89470.tar.gz
pw-668c0d87b56e3f1b8fa7992bbd1709dbaaa89470.tar.bz2
pw-668c0d87b56e3f1b8fa7992bbd1709dbaaa89470.zip
Fix pane display bugs.
-rw-r--r--pw.c45
1 files changed, 39 insertions, 6 deletions
diff --git a/pw.c b/pw.c
index 615821c..a8a8bef 100644
--- a/pw.c
+++ b/pw.c
@@ -376,8 +376,17 @@ static void drawline(pwstate *pw, const char *line, int lineno)
if (vsplit1 > 0) {
if (len <= vsplit1) {
- fputs(line, stdout);
- columns -= len;
+ if (!vsplit2) {
+ fputs(line, stdout);
+ columns -= len;
+ } else {
+ unsigned spaces = vsplit1 - len + 1;
+ fputs(line, stdout);
+ for (unsigned i = 0; i < spaces; i++)
+ putchar(' ');
+ columns -= vsplit1;
+ }
+ line += len;
len = 0;
} else {
for (unsigned i = 0; i < vsplit1; i++)
@@ -393,16 +402,40 @@ static void drawline(pwstate *pw, const char *line, int lineno)
unsigned pos = line - oline;
unsigned delta = vs2pos - pos;
if (pos + len <= vs2pos) {
- len = 0;
+ unsigned i = vsplit2;
+ if (vsplit1) {
+ hlchar(pw, '|');
+ i--;
+ }
+ for (; i > 0; i--)
+ putchar(' ');
+ columns -= vsplit2;
+ if (len < vsplit2) {
+ line += len;
+ len = 0;
+ } else {
+ len -= vsplit2;
+ line += vsplit2;
+ }
+ endmark = 1;
} else if (len - delta <= vsplit2) {
+ unsigned spaces = vsplit2 - (len - delta) + 1;
if (vsplit1) {
hlchar(pw, '|');
delta++;
}
fputs(line + delta, stdout);
- columns -= len;
- len = 0;
- endmark = 0;
+ for (unsigned i = spaces; i > 0; i--)
+ putchar(' ');
+ columns -= vsplit2;
+ if (len < vsplit2) {
+ line += len;
+ len = 0;
+ } else {
+ len -= vsplit2;
+ line += vsplit2;
+ }
+ endmark = 1;
} else {
unsigned start = 0;
if (vsplit1) {