Last active
September 2, 2016 04:19
-
-
Save penguin359/a77d343cdd8796ced2a8587bc3bbd71e to your computer and use it in GitHub Desktop.
Quit-if-one-screen patch taken from less package in Fedora 24
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 21d56469fd4b4558d640ad82c78f2b9748341c11 Mon Sep 17 00:00:00 2001 | |
From: "Vojtech Vitek (V-Teq)" <vvitek@redhat.com> | |
Date: Mon, 14 May 2012 17:31:20 +0200 | |
Subject: [PATCH] Fix -F option behavior | |
Original patch written by Jindrich Novy <jnovy@redhat.com>. | |
Changes and improvements by Zdenek Prikryl <zprikryl@redhat.com>, | |
Vojtech Vitek <vvitek@redhat.com> and Colin Guthrie <colin@mageia.org>. | |
Jozef Mlich <jmlich@redhat.com> | |
--- | |
diff -up ./less-466/forwback.c.Foption ./less-466/forwback.c | |
--- ./less-466/forwback.c.Foption 2014-08-24 02:46:52.000000000 +0200 | |
+++ ./less-466/forwback.c 2014-09-18 13:54:28.804626580 +0200 | |
@@ -440,3 +440,24 @@ get_back_scroll() | |
return (sc_height - 2); | |
return (10000); /* infinity */ | |
} | |
+ | |
+ | |
+/* | |
+ * Get line count of file up to the screen height + 1 char | |
+ */ | |
+ public int | |
+get_line_count() | |
+{ | |
+ int nlines = 0; | |
+ POSITION pos; | |
+ | |
+ pos = ch_zero(); | |
+ | |
+ while (pos != NULL_POSITION && nlines <= sc_height) | |
+ { | |
+ pos = forw_line(pos); | |
+ nlines++; | |
+ } | |
+ | |
+ return nlines; | |
+} | |
diff -up ./less-466/funcs.h.Foption ./less-466/funcs.h | |
--- ./less-466/funcs.h.Foption 2014-08-24 02:46:54.000000000 +0200 | |
+++ ./less-466/funcs.h 2014-09-18 13:55:12.140010010 +0200 | |
@@ -139,6 +139,7 @@ | |
public void forward (); | |
public void backward (); | |
public int get_back_scroll (); | |
+ public int get_line_count (); | |
public void del_ifile (); | |
public IFILE next_ifile (); | |
public IFILE prev_ifile (); | |
diff -up ./less-466/main.c.Foption ./less-466/main.c | |
--- ./less-466/main.c.Foption 2014-08-24 02:46:51.000000000 +0200 | |
+++ ./less-466/main.c 2014-09-18 14:03:12.868331522 +0200 | |
@@ -54,8 +54,10 @@ static char consoleTitle[256]; | |
#endif | |
extern int less_is_more; | |
+public int line_count; | |
extern int missing_cap; | |
extern int know_dumb; | |
+extern int quit_if_one_screen; | |
extern int pr_type; | |
@@ -273,10 +275,27 @@ main(argc, argv) | |
{ | |
if (edit_stdin()) /* Edit standard input */ | |
quit(QUIT_ERROR); | |
+ if (quit_if_one_screen) | |
+ line_count = get_line_count(); | |
+ | |
} else | |
{ | |
if (edit_first()) /* Edit first valid file in cmd line */ | |
quit(QUIT_ERROR); | |
+ /* | |
+ * In case that we have only one file and -F, have to get a line | |
+ * count fot init(). If the line count is less then a height of a term, | |
+ * the content of the file is printed out and then less quits. Otherwise | |
+ * -F can not be used | |
+ */ | |
+ if (quit_if_one_screen) | |
+ { | |
+ if (nifile() == 1) | |
+ line_count = get_line_count(); | |
+ else /* In case more than one file, -F can not be used */ | |
+ quit_if_one_screen = FALSE; | |
+ } | |
+ | |
} | |
init(); | |
diff -up ./less-466/screen.c.Foption ./less-466/screen.c | |
--- ./less-466/screen.c.Foption 2014-08-24 02:46:51.000000000 +0200 | |
+++ ./less-466/screen.c 2014-09-18 13:58:52.772962165 +0200 | |
@@ -203,6 +203,7 @@ public int missing_cap = 0; /* Some capa | |
static int attrmode = AT_NORMAL; | |
extern int binattr; | |
+extern int line_count; | |
#if !MSDOS_COMPILER | |
static char *cheaper(); | |
@@ -232,6 +233,7 @@ extern int wscroll; | |
extern int screen_trashed; | |
extern int tty; | |
extern int top_scroll; | |
+extern int quit_if_one_screen; | |
extern int oldbot; | |
#if HILITE_SEARCH | |
extern int hilite_search; | |
@@ -1533,7 +1535,9 @@ win32_deinit_term() | |
init() | |
{ | |
#if !MSDOS_COMPILER | |
- if (!no_init) | |
+ if (quit_if_one_screen && line_count >= sc_height) | |
+ quit_if_one_screen = FALSE; | |
+ if (!no_init && !quit_if_one_screen) | |
tputs(sc_init, sc_height, putchr); | |
if (!no_keypad) | |
tputs(sc_s_keypad, sc_height, putchr); | |
@@ -1573,7 +1577,7 @@ deinit() | |
#if !MSDOS_COMPILER | |
if (!no_keypad) | |
tputs(sc_e_keypad, sc_height, putchr); | |
- if (!no_init) | |
+ if (!no_init && !quit_if_one_screen) | |
tputs(sc_deinit, sc_height, putchr); | |
#else | |
/* Restore system colors. */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment