summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2018-04-13 19:55:14 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2018-04-13 19:55:14 +0000
commit6ce07289b48fef8f432894baf7ddd5ba37c13268 (patch)
treea66f9cba7e9de17495bac5e5d2737ac5671e4199
parent23da1f4278758a8acd93a9a32d94993d6a487ad2 (diff)
Use TIOCGWINSZ to reduce the default -Owidth during interactive use
on terminals narrower than 79 columns and the default -Oindent on terminals narrower than 66 columns. Requested by and feedback from pirofti@; mpi@ and juanfra@ also like the general direction.
-rw-r--r--usr.bin/mandoc/main.c16
-rw-r--r--usr.bin/mandoc/mandoc.116
2 files changed, 24 insertions, 8 deletions
diff --git a/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c
index e7b875aec04..6885e2e3269 100644
--- a/usr.bin/mandoc/main.c
+++ b/usr.bin/mandoc/main.c
@@ -1,7 +1,7 @@
-/* $OpenBSD: main.c,v 1.206 2018/02/08 01:36:38 tb Exp $ */
+/* $OpenBSD: main.c,v 1.207 2018/04/13 19:55:13 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2012, 2014-2018 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -18,7 +18,9 @@
*/
#include <sys/types.h>
+#include <sys/ioctl.h>
#include <sys/param.h> /* MACHINE */
+#include <sys/termios.h>
#include <sys/wait.h>
#include <assert.h>
@@ -114,6 +116,7 @@ main(int argc, char *argv[])
struct manconf conf;
struct mansearch search;
struct curparse curp;
+ struct winsize ws;
struct tag_files *tag_files;
struct manpage *res, *resp;
const char *progname, *sec, *thisarg;
@@ -292,6 +295,15 @@ main(int argc, char *argv[])
!isatty(STDOUT_FILENO))
use_pager = 0;
+ if (use_pager &&
+ (conf.output.width == 0 || conf.output.indent == 0) &&
+ ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) != -1) {
+ if (conf.output.width == 0 && ws.ws_col < 79)
+ conf.output.width = ws.ws_col - 1;
+ if (conf.output.indent == 0 && ws.ws_col < 66)
+ conf.output.indent = 3;
+ }
+
if (!use_pager)
if (pledge("stdio rpath", NULL) == -1)
err((int)MANDOCLEVEL_SYSERR, "pledge");
diff --git a/usr.bin/mandoc/mandoc.1 b/usr.bin/mandoc/mandoc.1
index 39fc814ad10..b3258f514c7 100644
--- a/usr.bin/mandoc/mandoc.1
+++ b/usr.bin/mandoc/mandoc.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: mandoc.1,v 1.146 2018/03/16 15:05:33 schwarze Exp $
+.\" $OpenBSD: mandoc.1,v 1.147 2018/04/13 19:55:13 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: March 16 2018 $
+.Dd $Mdocdate: April 13 2018 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -299,9 +299,6 @@ The special characters documented in
.Xr mandoc_char 7
are rendered best-effort in an ASCII equivalent.
.Pp
-Output width is limited to 78 visible columns unless literal input lines
-exceed this limit.
-.Pp
The following
.Fl O
arguments are accepted:
@@ -315,6 +312,8 @@ and seven for
.Xr man 7 .
Increasing this is not recommended; it may result in degraded formatting,
for example overfull lines or ugly line breaks.
+When output is to a pager on a terminal that is less than 66 columns
+wide, the default is reduced to three columns.
.It Cm mdoc
Format
.Xr man 7
@@ -331,7 +330,12 @@ output formats in the same way as the
source it was generated from.
.It Cm width Ns = Ns Ar width
The output width is set to
-.Ar width .
+.Ar width
+instead of the default of 78.
+When output is to a pager on a terminal that is less than 79 columns
+wide, the default is reduced to one less than the terminal width.
+In any case, lines that are output in literal mode are never wrapped
+and may exceed the output width.
.El
.Ss HTML Output
Output produced by