aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
Diffstat (limited to 'pw.c')
-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) {