diff options
Diffstat (limited to 'tools/lib/subcmd/pager.c')
-rw-r--r-- | tools/lib/subcmd/pager.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tools/lib/subcmd/pager.c b/tools/lib/subcmd/pager.c index d50f3b58606b..6518bea926d6 100644 --- a/tools/lib/subcmd/pager.c +++ b/tools/lib/subcmd/pager.c | |||
@@ -3,6 +3,7 @@ | |||
3 | #include <stdio.h> | 3 | #include <stdio.h> |
4 | #include <string.h> | 4 | #include <string.h> |
5 | #include <signal.h> | 5 | #include <signal.h> |
6 | #include <sys/ioctl.h> | ||
6 | #include "pager.h" | 7 | #include "pager.h" |
7 | #include "run-command.h" | 8 | #include "run-command.h" |
8 | #include "sigchain.h" | 9 | #include "sigchain.h" |
@@ -14,6 +15,7 @@ | |||
14 | */ | 15 | */ |
15 | 16 | ||
16 | static int spawned_pager; | 17 | static int spawned_pager; |
18 | static int pager_columns; | ||
17 | 19 | ||
18 | void pager_init(const char *pager_env) | 20 | void pager_init(const char *pager_env) |
19 | { | 21 | { |
@@ -58,9 +60,12 @@ static void wait_for_pager_signal(int signo) | |||
58 | void setup_pager(void) | 60 | void setup_pager(void) |
59 | { | 61 | { |
60 | const char *pager = getenv(subcmd_config.pager_env); | 62 | const char *pager = getenv(subcmd_config.pager_env); |
63 | struct winsize sz; | ||
61 | 64 | ||
62 | if (!isatty(1)) | 65 | if (!isatty(1)) |
63 | return; | 66 | return; |
67 | if (ioctl(1, TIOCGWINSZ, &sz) == 0) | ||
68 | pager_columns = sz.ws_col; | ||
64 | if (!pager) | 69 | if (!pager) |
65 | pager = getenv("PAGER"); | 70 | pager = getenv("PAGER"); |
66 | if (!(pager || access("/usr/bin/pager", X_OK))) | 71 | if (!(pager || access("/usr/bin/pager", X_OK))) |
@@ -98,3 +103,14 @@ int pager_in_use(void) | |||
98 | { | 103 | { |
99 | return spawned_pager; | 104 | return spawned_pager; |
100 | } | 105 | } |
106 | |||
107 | int pager_get_columns(void) | ||
108 | { | ||
109 | char *s; | ||
110 | |||
111 | s = getenv("COLUMNS"); | ||
112 | if (s) | ||
113 | return atoi(s); | ||
114 | |||
115 | return (pager_columns ? pager_columns : 80) - 2; | ||
116 | } | ||