Vojtech Vitek (V-Teq) 47da4db
From 21d56469fd4b4558d640ad82c78f2b9748341c11 Mon Sep 17 00:00:00 2001
Vojtech Vitek (V-Teq) 47da4db
From: "Vojtech Vitek (V-Teq)" <vvitek@redhat.com>
Vojtech Vitek (V-Teq) 47da4db
Date: Mon, 14 May 2012 17:31:20 +0200
Vojtech Vitek (V-Teq) 47da4db
Subject: [PATCH] Fix -F option behavior
Vojtech Vitek (V-Teq) 47da4db
Vojtech Vitek (V-Teq) 47da4db
Original patch written by Jindrich Novy <jnovy@redhat.com>.
Vojtech Vitek (V-Teq) 47da4db
Vojtech Vitek (V-Teq) 47da4db
Changes and improvements by Zdenek Prikryl <zprikryl@redhat.com>,
Vojtech Vitek (V-Teq) 47da4db
Vojtech Vitek <vvitek@redhat.com> and Colin Guthrie <colin@mageia.org>.
Vojtech Vitek (V-Teq) 47da4db
---
Vojtech Vitek (V-Teq) 47da4db
 forwback.c |   20 ++++++++++++++++++++
Vojtech Vitek (V-Teq) 47da4db
 funcs.h    |    1 +
Vojtech Vitek (V-Teq) 47da4db
 main.c     |   16 ++++++++++++++++
Vojtech Vitek (V-Teq) 47da4db
 screen.c   |    9 +++++++--
Vojtech Vitek (V-Teq) 47da4db
 4 files changed, 44 insertions(+), 2 deletions(-)
Vojtech Vitek (V-Teq) 47da4db
Vojtech Vitek (V-Teq) 47da4db
diff --git a/forwback.c b/forwback.c
Vojtech Vitek (V-Teq) 47da4db
index ebe422d..687355f 100644
Vojtech Vitek (V-Teq) 47da4db
--- a/forwback.c
Vojtech Vitek (V-Teq) 47da4db
+++ b/forwback.c
Vojtech Vitek (V-Teq) 47da4db
@@ -422,3 +422,23 @@ get_back_scroll()
Vojtech Vitek (V-Teq) 47da4db
 		return (sc_height - 2);
Vojtech Vitek (V-Teq) 47da4db
 	return (10000); /* infinity */
Vojtech Vitek (V-Teq) 47da4db
 }
Vojtech Vitek (V-Teq) 47da4db
+
Vojtech Vitek (V-Teq) 47da4db
+/*
Vojtech Vitek (V-Teq) 47da4db
+ * Get line count of file up to the screen height + 1 char
Vojtech Vitek (V-Teq) 47da4db
+ */
Vojtech Vitek (V-Teq) 47da4db
+	public int
Vojtech Vitek (V-Teq) 47da4db
+get_line_count()
Vojtech Vitek (V-Teq) 47da4db
+{
Vojtech Vitek (V-Teq) 47da4db
+	int nlines = 0;
Vojtech Vitek (V-Teq) 47da4db
+	POSITION pos;
Vojtech Vitek (V-Teq) 47da4db
+
Vojtech Vitek (V-Teq) 47da4db
+	pos = ch_zero();
Vojtech Vitek (V-Teq) 47da4db
+
Vojtech Vitek (V-Teq) 47da4db
+	while (pos != NULL_POSITION && nlines <= sc_height)
Vojtech Vitek (V-Teq) 47da4db
+	{
Vojtech Vitek (V-Teq) 47da4db
+		pos = forw_line(pos);
Vojtech Vitek (V-Teq) 47da4db
+		nlines++;
Vojtech Vitek (V-Teq) 47da4db
+	}
Vojtech Vitek (V-Teq) 47da4db
+
Vojtech Vitek (V-Teq) 47da4db
+	return nlines;
Vojtech Vitek (V-Teq) 47da4db
+}
Vojtech Vitek (V-Teq) 47da4db
diff --git a/funcs.h b/funcs.h
Vojtech Vitek (V-Teq) 47da4db
index 6595232..8ca4656 100644
Vojtech Vitek (V-Teq) 47da4db
--- a/funcs.h
Vojtech Vitek (V-Teq) 47da4db
+++ b/funcs.h
Vojtech Vitek (V-Teq) 47da4db
@@ -136,6 +136,7 @@
Vojtech Vitek (V-Teq) 47da4db
 	public void forward ();
Vojtech Vitek (V-Teq) 47da4db
 	public void backward ();
Vojtech Vitek (V-Teq) 47da4db
 	public int get_back_scroll ();
Vojtech Vitek (V-Teq) 47da4db
+	public int get_line_count ();
Vojtech Vitek (V-Teq) 47da4db
 	public void del_ifile ();
Vojtech Vitek (V-Teq) 47da4db
 	public IFILE next_ifile ();
Vojtech Vitek (V-Teq) 47da4db
 	public IFILE prev_ifile ();
Vojtech Vitek (V-Teq) 47da4db
diff --git a/main.c b/main.c
Vojtech Vitek (V-Teq) 47da4db
index 0af1762..ef69440 100644
Vojtech Vitek (V-Teq) 47da4db
--- a/main.c
Vojtech Vitek (V-Teq) 47da4db
+++ b/main.c
Vojtech Vitek (V-Teq) e65760c
@@ -55,6 +55,7 @@ static char consoleTitle[256];
Vojtech Vitek (V-Teq) e65760c
 #endif
Vojtech Vitek (V-Teq) e65760c
 
Vojtech Vitek (V-Teq) e65760c
 extern int	less_is_more;
Vojtech Vitek (V-Teq) e65760c
+public int	line_count;
Vojtech Vitek (V-Teq) e65760c
 extern int	missing_cap;
Vojtech Vitek (V-Teq) e65760c
 extern int	know_dumb;
Vojtech Vitek (V-Teq) e65760c
 extern int	quit_if_one_screen;
Vojtech Vitek (V-Teq) 47da4db
@@ -277,10 +278,25 @@ main(argc, argv)
Vojtech Vitek (V-Teq) 47da4db
 	{
Vojtech Vitek (V-Teq) 47da4db
 		if (edit_stdin())  /* Edit standard input */
Vojtech Vitek (V-Teq) 47da4db
 			quit(QUIT_ERROR);
Vojtech Vitek (V-Teq) 47da4db
+		if (quit_if_one_screen)
Vojtech Vitek (V-Teq) 47da4db
+			line_count = get_line_count();
Vojtech Vitek (V-Teq) 47da4db
 	} else 
Zdenek Prikryl 22e2d31
 	{
Zdenek Prikryl 22e2d31
 		if (edit_first())  /* Edit first valid file in cmd line */
Zdenek Prikryl 22e2d31
 			quit(QUIT_ERROR);
Zdenek Prikryl 22e2d31
+		/*
Zdenek Prikryl 22e2d31
+		 * In case that we have only one file and -F, have to get a line
Zdenek Prikryl 22e2d31
+		 * count fot init(). If the line count is less then a height of a term,
Zdenek Prikryl 22e2d31
+		 * the content of the file is printed out and then less quits. Otherwise
Zdenek Prikryl 22e2d31
+		 * -F can not be used
Zdenek Prikryl 22e2d31
+		 */
Vojtech Vitek (V-Teq) 47da4db
+		if (quit_if_one_screen)
Vojtech Vitek (V-Teq) 47da4db
+		{
Vojtech Vitek (V-Teq) 47da4db
+			if (nifile() == 1)
Vojtech Vitek (V-Teq) 47da4db
+				line_count = get_line_count();
Vojtech Vitek (V-Teq) 47da4db
+			else /* In case more than one file, -F can not be used */
Vojtech Vitek (V-Teq) 47da4db
+				quit_if_one_screen = FALSE;
Vojtech Vitek (V-Teq) 47da4db
+		}
Zdenek Prikryl 22e2d31
 	}
Zdenek Prikryl 22e2d31
 
Zdenek Prikryl 22e2d31
 	init();
Vojtech Vitek (V-Teq) 47da4db
diff --git a/screen.c b/screen.c
Vojtech Vitek (V-Teq) 47da4db
index b8bc666..1883e3e 100644
Vojtech Vitek (V-Teq) 47da4db
--- a/screen.c
Vojtech Vitek (V-Teq) 47da4db
+++ b/screen.c
Vojtech Vitek (V-Teq) 47da4db
@@ -204,6 +204,7 @@ public int missing_cap = 0;	/* Some capability is missing */
Zdenek Prikryl 22e2d31
 
Zdenek Prikryl 22e2d31
 static int attrmode = AT_NORMAL;
Zdenek Prikryl 22e2d31
 extern int binattr;
Zdenek Prikryl 22e2d31
+extern int line_count;
Zdenek Prikryl 22e2d31
 
Zdenek Prikryl 22e2d31
 #if !MSDOS_COMPILER
Zdenek Prikryl 22e2d31
 static char *cheaper();
Zdenek Prikryl 22e2d31
@@ -233,6 +234,7 @@ extern int wscroll;
2d88a3d
 extern int screen_trashed;
2d88a3d
 extern int tty;
2d88a3d
 extern int top_scroll;
2d88a3d
+extern int quit_if_one_screen;
Ivana Varekova a7cfed4
 extern int oldbot;
2d88a3d
 #if HILITE_SEARCH
2d88a3d
 extern int hilite_search;
Zdenek Prikryl 22e2d31
@@ -1534,7 +1536,9 @@ win32_deinit_term()
Zdenek Prikryl 22e2d31
 init()
Zdenek Prikryl 22e2d31
 {
Zdenek Prikryl 22e2d31
 #if !MSDOS_COMPILER
Zdenek Prikryl 22e2d31
-	if (!no_init)
Zdenek Prikryl 22e2d31
+	if (quit_if_one_screen && line_count >= sc_height)
Zdenek Prikryl 22e2d31
+		quit_if_one_screen = FALSE;
Vojtech Vitek (V-Teq) 47da4db
+	if (!no_init && !quit_if_one_screen)
Zdenek Prikryl 22e2d31
 		tputs(sc_init, sc_height, putchr);
Zdenek Prikryl 22e2d31
 	if (!no_keypad)
Zdenek Prikryl 22e2d31
 		tputs(sc_s_keypad, sc_height, putchr);
Vojtech Vitek (V-Teq) 47da4db
@@ -1574,8 +1578,9 @@ deinit()
d039b45
 #if !MSDOS_COMPILER
d039b45
 	if (!no_keypad)
d039b45
 		tputs(sc_e_keypad, sc_height, putchr);
d039b45
-	if (!no_init)
Vojtech Vitek (V-Teq) 47da4db
+	if (!no_init && !quit_if_one_screen)
Vojtech Vitek (V-Teq) 47da4db
 		tputs(sc_deinit, sc_height, putchr);
Vojtech Vitek (V-Teq) 47da4db
+
d039b45
 #else
d039b45
 	/* Restore system colors. */
Zdenek Prikryl 22e2d31
 	SETCOLORS(sy_fg_color, sy_bg_color);
Vojtech Vitek (V-Teq) 47da4db
-- 
Vojtech Vitek (V-Teq) 47da4db
1.7.7.6
Vojtech Vitek (V-Teq) e65760c