--- pspg-0.7.4.orig/README.md
+++ pspg-0.7.4/README.md
@@ -24,6 +24,7 @@ This pager can be used from `mysql` clie
 * -s N     use theme (default theme is mc theme)
 * -c N     freeze first N columns
 * -f file  open file (default stdin)
+* --less-status-bar  status bar like less pager
 * --no-mouse  without own mouse handling (cannot be changed in app)
 * --no-sound  without sound effect
 * -F, --quit-if-one-screen  quit if content is one screen
--- pspg-0.7.4.orig/src/pspg.c
+++ pspg-0.7.4/src/pspg.c
@@ -104,6 +104,7 @@ typedef struct
 	int		main_maxx;				/* max x size of main place (should be same like maxx) */
 	int		main_start_y;			/* y position of first row of main place */
 	int		main_start_x;			/* x position of first row of main place */
+	int		top_bar_rows;			/* 1 or 0 when top bar is not used */
 	WINDOW *luc;					/* window for left upper corner */
 	WINDOW *fix_rows;				/* window for fixed rows */
 	WINDOW *fix_cols;				/* window for fixed columns */
@@ -684,7 +685,7 @@ isHeadLeftChar(char *str)
 	const char *u6 = "\342\225\237";
 
 	/* ascii */
-	if (str[0] == '+' || str[0] == '-')
+	if ((str[0] == '+' || str[0] == '-') && str[1] == '-')
 		return true;
 
 	/* pgcli fmt */
@@ -1163,7 +1164,15 @@ readfile(FILE *fp, DataDesc *desc)
 
 	while (( read = getline(&line, &len, fp)) != -1)
 	{
-		int		clen = utf8len(line);
+		int		clen;
+
+		if (line[read - 1] == '\n')
+		{
+			line[read - 1] = '\0';
+			read -= 1;
+		}
+
+		clen = utf8len(line);
 
 		if (rows->nrows == 1000)
 		{
@@ -1179,7 +1188,7 @@ readfile(FILE *fp, DataDesc *desc)
 		/* save possible table name */
 		if (nrows == 0 && !isTopLeftChar(line))
 		{
-			strncpytrim(desc->title, line, 63, len);
+			strncpytrim(desc->title, line, 63, read);
 			desc->title_rows = 1;
 		}
 
@@ -1552,7 +1561,7 @@ window_fill(WINDOW *win,
 
 			/* draw cursor line to screen end of line */
 			if (is_cursor_row && i < maxx)
-				mvwchgat(win, row - 1, i + 1, -1, 0, PAIR_NUMBER(cursor_data_attr), 0);
+				mvwchgat(win, row - 1, i, -1, 0, PAIR_NUMBER(cursor_data_attr), 0);
 
 			if (free_row != NULL)
 			{
@@ -1824,11 +1833,11 @@ draw_data(ScrDesc *scrdesc, DataDesc *de
 	if (ioctl(0, TIOCGWINSZ, (char *) &size) >= 0)
 	{
 
-		for (i = 0; i < min_int(size.ws_row - 2, desc->last_row + 1); i++)
+		for (i = 0; i < min_int(size.ws_row - 1 - scrdesc->top_bar_rows, desc->last_row + 1); i++)
 			printf("\eD");
 
 		/* Go wit cursor to up */
-		printf("\e[%dA", min_int(size.ws_row - 2, desc->last_row + 1));
+		printf("\e[%dA", min_int(size.ws_row - 1 - scrdesc->top_bar_rows, desc->last_row + 1));
 
 		/* Save cursor */
 		printf("\e[s");
@@ -1836,8 +1845,8 @@ draw_data(ScrDesc *scrdesc, DataDesc *de
 		if (scrdesc->fix_cols_cols > 0)
 		{
 			draw_rectange(scrdesc->fix_rows_rows, 0,
-						  scrdesc->rows_rows, scrdesc->fix_cols_cols,
-						  first_data_row + first_row - fix_rows_offset , 0,
+						  scrdesc->rows_rows , scrdesc->fix_cols_cols,
+						  first_data_row + first_row - fix_rows_offset, 0,
 						  desc,
 						  COLOR_PAIR(4) | A_BOLD, 0, COLOR_PAIR(8) | A_BOLD,
 						  false);
@@ -1875,7 +1884,7 @@ draw_data(ScrDesc *scrdesc, DataDesc *de
 
 			draw_rectange(scrdesc->fix_rows_rows, scrdesc->fix_cols_cols,
 						  scrdesc->rows_rows, size.ws_col - scrdesc->fix_cols_cols,
-						  first_data_row + first_row - fix_rows_offset , scrdesc->fix_cols_cols + cursor_col,
+						  first_data_row + first_row - fix_rows_offset, scrdesc->fix_cols_cols + cursor_col,
 						  desc,
 						  scrdesc->theme == 2 ? 0 | A_BOLD : 0,
 						  scrdesc->theme == 2 && (desc->headline_transl == NULL) ? A_BOLD : 0,
@@ -1941,7 +1950,8 @@ create_layout_dimensions(ScrDesc *scrdes
 	{
 		scrdesc->fix_rows_rows = fixRows;
 	}
-	else if (!desc->is_expanded_mode && desc->border_head_row != -1)
+	else if (!desc->is_expanded_mode && desc->border_head_row != -1 &&
+			  desc->headline_transl != NULL)
 	{
 		scrdesc->fix_rows_rows = desc->border_head_row + 1 - desc->title_rows;
 	}
@@ -1955,7 +1965,6 @@ create_layout_dimensions(ScrDesc *scrdes
 
 	if (scrdesc->fix_rows_rows == 0 && !desc->is_expanded_mode)
 	{
-		scrdesc->fix_rows_rows = 0;
 		desc->title_rows = 0;
 		desc->title[0] = '\0';
 	}
@@ -2039,12 +2048,13 @@ create_layout(ScrDesc *scrdesc, DataDesc
 	{
 		scrdesc->fix_rows = newwin(scrdesc->fix_rows_rows,
 								   min_int(scrdesc->maxx - scrdesc->fix_cols_cols, scrdesc->maxx - scrdesc->fix_cols_cols + 1),
-								   1, scrdesc->fix_cols_cols);
+								   scrdesc->main_start_y, scrdesc->fix_cols_cols);
 	}
 
 	if (scrdesc->fix_cols_cols > 0 && scrdesc->rows_rows > 0)
 	{
-		scrdesc->fix_cols = newwin(scrdesc->rows_rows, scrdesc->fix_cols_cols, scrdesc->fix_rows_rows + 1, 0);
+		scrdesc->fix_cols = newwin(scrdesc->rows_rows, scrdesc->fix_cols_cols,
+									 scrdesc->fix_rows_rows + scrdesc->main_start_y, 0);
 	}
 
 	if (scrdesc->fix_rows_rows > 0 && scrdesc->fix_cols_cols > 0)
@@ -2106,7 +2116,7 @@ if_notin_int(int v, const int *s, int v1
  * Refresh aux windows like top bar or bottom bar.
  */
 static void
-refresh_aux_windows(ScrDesc *scrdesc, DataDesc *desc)
+refresh_aux_windows(ScrDesc *scrdesc, DataDesc *desc, bool hide_top_bar)
 {
 	int		maxy, maxx;
 
@@ -2114,34 +2124,49 @@ refresh_aux_windows(ScrDesc *scrdesc, Da
 	getmaxyx(stdscr, maxy, maxx);
 
 	if (scrdesc->top_bar != NULL)
+	{
 		delwin(scrdesc->top_bar);
+		scrdesc->top_bar = NULL;
+	}
 
-	scrdesc->top_bar = newwin(1, 0, 0, 0);
-	wbkgd(scrdesc->top_bar, COLOR_PAIR(2));
-	wrefresh(scrdesc->top_bar);
+	if (!hide_top_bar)
+	{
+		scrdesc->top_bar_rows = 1;
+		scrdesc->top_bar = newwin(1, 0, 0, 0);
+		wbkgd(scrdesc->top_bar, COLOR_PAIR(2));
+		wrefresh(scrdesc->top_bar);
+	}
+	else
+		scrdesc->top_bar_rows = 0;
 
 	if (scrdesc->bottom_bar != NULL)
+	{
 		delwin(scrdesc->bottom_bar);
+		scrdesc->bottom_bar = NULL;
+	}
 
 	scrdesc->bottom_bar = newwin(1, 0, maxy - 1, 0);
 
-	wattron(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
-	mvwaddstr(scrdesc->bottom_bar, 0, 1, "Q");
-	wattroff(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
-	wattron(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
-	mvwprintw(scrdesc->bottom_bar, 0, 2, "%-4s", "uit");
-	wattroff(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
-	wrefresh(scrdesc->bottom_bar);
-
-	if (desc->headline_transl != NULL)
+	if (scrdesc->top_bar_rows > 0)
 	{
 		wattron(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
-		mvwaddstr(scrdesc->bottom_bar, 0, 7, "0..4");
+		mvwaddstr(scrdesc->bottom_bar, 0, 1, "Q");
 		wattroff(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
 		wattron(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
-		mvwprintw(scrdesc->bottom_bar, 0, 11, "%s", " Col.Freeze ");
+		mvwprintw(scrdesc->bottom_bar, 0, 2, "%-4s", "uit");
 		wattroff(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
 		wrefresh(scrdesc->bottom_bar);
+
+		if (desc->headline_transl != NULL)
+		{
+			wattron(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
+			mvwaddstr(scrdesc->bottom_bar, 0, 7, "0..4");
+			wattroff(scrdesc->bottom_bar, A_BOLD | COLOR_PAIR(13));
+			wattron(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
+			mvwprintw(scrdesc->bottom_bar, 0, 11, "%s", " Col.Freeze ");
+			wattroff(scrdesc->bottom_bar, COLOR_PAIR(12) | if_notin_int(scrdesc->theme, (int[]) {13, 14, -1}, A_BOLD, 0));
+			wrefresh(scrdesc->bottom_bar);
+		}
 	}
 
 	scrdesc->main_maxy = maxy;
@@ -2197,57 +2222,111 @@ is_footer_cursor(int cursor_row, ScrDesc
 }
 
 static void
-print_top_window_context(ScrDesc *scrdesc, DataDesc *desc,
+print_status(ScrDesc *scrdesc, DataDesc *desc,
 						 int cursor_row, int cursor_col, int first_row, int fix_rows_offset)
 {
 	int		maxy, maxx;
 	int		smaxy, smaxx;
 	char	buffer[200];
 
-	getmaxyx(scrdesc->top_bar, maxy, maxx);
-	getmaxyx(stdscr, smaxy, smaxx);
+	/* do nothing when there are not top status bar */
+	if (scrdesc->top_bar_rows > 0)
+	{
+		getmaxyx(scrdesc->top_bar, maxy, maxx);
+		getmaxyx(stdscr, smaxy, smaxx);
 
-	(void) maxy;
+		(void) maxy;
 
-	if (scrdesc->theme == 2)
-		wattron(scrdesc->top_bar, A_BOLD | COLOR_PAIR(7));
+		if (scrdesc->theme == 2)
+			wattron(scrdesc->top_bar, A_BOLD | COLOR_PAIR(7));
+		if (desc->title[0] != '\0' && desc->title_rows > 0)
+			mvwprintw(scrdesc->top_bar, 0, 0, "%s", desc->title);
+		else if (desc->filename[0] != '\0')
+			mvwprintw(scrdesc->top_bar, 0, 0, "%s", desc->filename);
+
+		if (scrdesc->theme == 2)
+			wattroff(scrdesc->top_bar, A_BOLD | COLOR_PAIR(7));
+
+		if (desc->headline_transl)
+		{
+			snprintf(buffer, 199, "FC:%*d C:%*d..%*d/%*d  L:[%*d + %*d  %*d/%*d] %3.0f%%",
+								number_width(desc->headline_char_size), scrdesc->fix_cols_cols,
+								number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1,
+								number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size),
+								number_width(desc->headline_char_size), desc->headline_char_size,
+								number_width(desc->maxy - desc->fixed_rows), first_row + 1 - fix_rows_offset,
+								number_width(smaxy), cursor_row - first_row + fix_rows_offset,
+								number_width(desc->maxy - desc->fixed_rows - desc->title_rows), cursor_row + 1,
+								number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows,
+								(cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0);
+		}
+		else
+		{
+			snprintf(buffer, 199, "C:%*d..%*d/%*d  L:[%*d + %*d  %*d/%*d] %3.0f%%",
+								number_width(desc->maxx), cursor_col + scrdesc->fix_cols_cols + 1,
+								number_width(desc->maxx), min_int(smaxx + cursor_col, desc->maxx),
+								number_width(desc->maxx), desc->maxx,
+								number_width(desc->maxy - scrdesc->fix_rows_rows), first_row + 1,
+								number_width(smaxy), cursor_row - first_row,
+								number_width(desc->last_row), cursor_row + 1,
+								number_width(desc->last_row), desc->last_row + 1,
+								((cursor_row + 1) / ((double) (desc->last_row + 1))) * 100.0);
+		}
 
-	if (desc->title[0] != '\0')
-		mvwprintw(scrdesc->top_bar, 0, 0, "%s", desc->title);
-	else if (desc->filename[0] != '\0')
-		mvwprintw(scrdesc->top_bar, 0, 0, "%s", desc->filename);
-
-	if (scrdesc->theme == 2)
-		wattroff(scrdesc->top_bar, A_BOLD | COLOR_PAIR(7));
-
-	if (desc->headline_transl)
-	{
-		snprintf(buffer, 199, "FC:%*d C:%*d..%*d/%*d  L:[%*d + %*d  %*d/%*d] %3.0f%%",
-							number_width(desc->headline_char_size), scrdesc->fix_cols_cols,
-							number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1,
-							number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size),
-							number_width(desc->headline_char_size), desc->headline_char_size,
-							number_width(desc->maxy - desc->fixed_rows), first_row + 1 - fix_rows_offset,
-							number_width(smaxy), cursor_row - first_row + fix_rows_offset,
-							number_width(desc->maxy - desc->fixed_rows - desc->title_rows), cursor_row + 1,
-							number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows,
-							(cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0);
+		mvwprintw(scrdesc->top_bar, 0, maxx - strlen(buffer), "%s", buffer);
+		wrefresh(scrdesc->top_bar);
 	}
 	else
 	{
-		snprintf(buffer, 199, "C:%*d..%*d/%*d  L:[%*d + %*d  %*d/%*d] %3.0f%%",
-							number_width(desc->maxx), cursor_col + scrdesc->fix_cols_cols + 1,
-							number_width(desc->maxx), min_int(smaxx + cursor_col, desc->maxx),
-							number_width(desc->maxx), desc->maxx,
-							number_width(desc->maxy - scrdesc->fix_rows_rows), first_row + 1,
-							number_width(smaxy), cursor_row - first_row,
-							number_width(desc->last_row), cursor_row + 1,
-							number_width(desc->last_row), desc->last_row + 1,
-							((cursor_row + 1) / ((double) (desc->last_row + 1))) * 100.0);
-	}
+		/* less-status-bar */
+		char	title[65];
+		attr_t	prompt_attr;
+
+		switch (scrdesc->theme)
+		{
+			case 0:
+			case 1:
+				prompt_attr = COLOR_PAIR(2);
+				break;
+			default:
+				prompt_attr = COLOR_PAIR(13) | A_BOLD;
+		}
+
+		if (desc->title_rows > 0 && desc->title[0] != '\0')
+			snprintf(title, 64, "%s ", desc->title);
+		else if (desc->filename[0] != '\0')
+			snprintf(title, 64, "%s ", desc->filename);
+		else
+			title[0] = '\0';
+
+		wattron(scrdesc->bottom_bar, prompt_attr);
+
 
-	mvwprintw(scrdesc->top_bar, 0, maxx - strlen(buffer), "%s", buffer);
-	wrefresh(scrdesc->top_bar);
+		if (desc->headline_transl)
+		{
+			snprintf(buffer, 199, "%slines %d-%d/%d %.0f%% ",
+								title,
+								first_row + 1 - fix_rows_offset,
+								first_row + 1 - fix_rows_offset + scrdesc->rows_rows,
+								desc->maxy + 1 - desc->fixed_rows - desc->title_rows,
+								(cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0);
+		}
+		else
+		{
+			snprintf(buffer, 199, "%slines %d-%d/%d %.0f%% ",
+								title,
+								first_row + 1,
+								first_row + 1 + scrdesc->footer_rows,
+								desc->last_row + 1,
+								((cursor_row + 1) / ((double) (desc->last_row + 1))) * 100.0);
+		}
+
+		mvwprintw(scrdesc->bottom_bar, 0, 0, "%s", buffer);
+		wclrtoeol(scrdesc->bottom_bar);
+		wrefresh(scrdesc->bottom_bar);
+
+		wattroff(scrdesc->bottom_bar, prompt_attr);
+	}
 }
 
 
@@ -2321,6 +2400,7 @@ main(int argc, char *argv[])
 	int		search_direction = SEARCH_FORWARD;
 	bool	redirect_mode;
 	bool	noatty;					/* true, when cannot to get keys from stdin */
+	bool	less_status_bar = false;
 
 	static struct option long_options[] =
 	{
@@ -2328,6 +2408,7 @@ main(int argc, char *argv[])
 		{"help", no_argument, 0, 1},
 		{"no-mouse", no_argument, 0, 2},
 		{"no-sound", no_argument, 0, 3},
+		{"less-status-bar", no_argument, 0, 4},
 		{"quit-if-one-screen", no_argument, 0, 'F'},
 		{"version", no_argument, 0, 'V'},
 		{0, 0, 0, 0}
@@ -2351,6 +2432,7 @@ main(int argc, char *argv[])
 				fprintf(stderr, "  -f file        open file\n");
 				fprintf(stderr, "  -X             don't use alternate screen\n");
 				fprintf(stderr, "  --help         show this help\n\n");
+				fprintf(stderr, "  --less-status-bar   status bar like less pager\n");
 				fprintf(stderr, "  --no-mouse     don't use own mouse handling\n");
 				fprintf(stderr, "  --no-sound     don't use beep when scroll is not possible\n");
 				fprintf(stderr, "  -F, --quit-if-one-screen   quit if content is one screen\n");
@@ -2364,6 +2446,9 @@ main(int argc, char *argv[])
 			case 3:
 				no_sound = true;
 				break;
+			case 4:
+				less_status_bar = true;
+				break;
 			case 'V':
 				fprintf(stdout, "pspg-%s\n", PSPG_VERSION);
 				exit(0);
@@ -2493,7 +2578,9 @@ main(int argc, char *argv[])
 	else
 	{
 		desc.first_data_row = 0;
+		desc.last_data_row = desc.last_row;
 		desc.title_rows = 0;
+		desc.title[0] = '\0';
 	}
 
 	first_data_row = desc.first_data_row;
@@ -2502,7 +2589,7 @@ main(int argc, char *argv[])
 
 	memset(&scrdesc, 0, sizeof(ScrDesc));
 	scrdesc.theme = style;
-	refresh_aux_windows(&scrdesc, &desc);
+	refresh_aux_windows(&scrdesc, &desc, less_status_bar);
 	getmaxyx(stdscr, maxy, maxx);
 
 	if (quit_if_one_screen)
@@ -2575,7 +2662,7 @@ main(int argc, char *argv[])
 	create_layout_dimensions(&scrdesc, &desc, _columns, fixedRows, maxy, maxx);
 	create_layout(&scrdesc, &desc, first_data_row, first_row);
 
-	print_top_window_context(&scrdesc, &desc, cursor_row, cursor_col, first_row, 0);
+	print_status(&scrdesc, &desc, cursor_row, cursor_col, first_row, 0);
 
 	while (true)
 	{
@@ -3395,7 +3482,7 @@ exit:
 				break;
 		}
 
-		print_top_window_context(&scrdesc, &desc, cursor_row, cursor_col, first_row, fix_rows_offset);
+		print_status(&scrdesc, &desc, cursor_row, cursor_col, first_row, fix_rows_offset);
 
 		if (first_row != prev_first_row)
 		{
@@ -3436,10 +3523,10 @@ exit:
 
 			getmaxyx(stdscr, maxy, maxx);
 
-			refresh_aux_windows(&scrdesc, &desc);
+			refresh_aux_windows(&scrdesc, &desc, less_status_bar);
 			create_layout_dimensions(&scrdesc, &desc, _columns, fixedRows, maxy, maxx);
 			create_layout(&scrdesc, &desc, first_data_row, first_row);
-			print_top_window_context(&scrdesc, &desc, cursor_row, cursor_col, first_row, fix_rows_offset);
+			print_status(&scrdesc, &desc, cursor_row, cursor_col, first_row, fix_rows_offset);
 
 			refresh_scr = false;
 		}
