From 72cd7ec1d52b1d49e2f910d2677e331ea3088046 Mon Sep 17 00:00:00 2001
From: Sergey Muraviov <sergey.k.muraviov@gmail.com>
Date: Sun, 1 Dec 2013 14:18:11 +0400
Subject: [PATCH] print_aligned_vertical function has been fixed

---
 src/bin/psql/print.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index 736225c..f788928 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -1234,6 +1234,17 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout)
 			fprintf(fout, "%s\n", cont->title);
 	}
 
+#ifdef TIOCGWINSZ
+	int max_dwidth = 0;
+	struct winsize screen_size;
+	ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
+	max_dwidth = screen_size.ws_col - hwidth;
+	if (opt_border > 0) 
+		max_dwidth -= ((opt_border == 2) ? 7: 3); /* +--+--+ : -+- */
+
+	if (dwidth > max_dwidth)
+		dwidth = max_dwidth;
+#endif
 	/* print records */
 	for (i = 0, ptr = cont->cells; *ptr; i++, ptr++)
 	{
@@ -1294,6 +1305,15 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout)
 
 			if (!dcomplete)
 			{
+#ifdef TIOCGWINSZ
+				if (dlineptr[line_count].width > dwidth)
+				{
+					if (opt_border == 2) 
+						dlineptr[line_count].width = dwidth - 2 + screen_size.ws_col - (dlineptr[line_count].width - dwidth - 2) %  screen_size.ws_col;
+					else
+						dlineptr[line_count].width = dwidth;
+				}
+#endif
 				if (opt_border < 2)
 					fprintf(fout, "%s\n", dlineptr[line_count].ptr);
 				else
-- 
1.8.3.1

