summary refs log tree commit diff
diff options
context:
space:
mode:
authorMartin Vaeth <vaeth@mathematik.uni-wuerzburg.de>2013-12-13 22:55:05 -0800
committerBarton E. Schaefer <schaefer@zsh.org>2013-12-13 22:55:05 -0800
commitbeb40845d9977b662c191b354cf6ecb4dabe3df5 (patch)
tree026f7aaae24b637c46efa8056227c99dec9a6318
parent8ffba43be97e90be5753a90e3b5869450f108c79 (diff)
downloadzsh-beb40845d9977b662c191b354cf6ecb4dabe3df5.tar.gz
zsh-beb40845d9977b662c191b354cf6ecb4dabe3df5.tar.xz
zsh-beb40845d9977b662c191b354cf6ecb4dabe3df5.zip
32105: support combinations of man or nroff with colcrt or col.
-rw-r--r--ChangeLog3
-rwxr-xr-xUtil/helpfiles38
2 files changed, 36 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index ae9c163d3..24cd4b86b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2013-12-13  Barton E. Schaefer  <schaefer@zsh.org>
 
+	* Martin Vaeth: 32105: Util/helpfiles: support all combinations of
+	man or nroff with colcrt or col.
+
 	* Aaron Peschel: 32103: Completion/Unix/Type/_hosts: parse
 	host:port format in ssh known_hosts files.
 
diff --git a/Util/helpfiles b/Util/helpfiles
index ebd8bd125..900564842 100755
--- a/Util/helpfiles
+++ b/Util/helpfiles
@@ -65,13 +65,40 @@ $ENV{'LANG'} = 'C';
 $ENV{'MANWIDTH'} = '80';
 $ENV{'GROFF_NO_SGR'} = ''; # We need "classical" formatting of man pages.
 
-unless(open(MANPAGE, '-|', "man $manfile | colcrt -")) {
-    close(MANPAGE);
-    open(MANPAGE, '-|', "man $manfile | col -bx")
+$mantmp = $destdir . '/man.tmp';
+$coltmpbase = 'col.tmp';
+$coltmp = $destdir . '/' . $coltmpbase;
+$args = "$manfile >$mantmp";
+unlink($mantmp);
+&Info('attempting man ', $args);
+if(system('man ' . $args) || !(-s $mantmp)) {
+    unlink($mantmp);
+    &Info('attempting nroff -man ', $args);
+    if(system('nroff -man ' . $args) || !(-s $mantmp)) {
+        unlink($mantmp);
+        &Die('man and nroff -man both failed for ', $manfile);
+    }
+}
+$args = "$mantmp >$coltmp";
+unlink($coltmp);
+&Info('attempting colcrt ', $args);
+if(system('colcrt ' . $args) || !(-s $coltmp)) {
+    unlink($coltmp);
+    &Info('attempting col -bx <', $args);
 # The x is necessary so that spaces don't turn into tabs, which messes
 # up the calculations of indentation on machines which randomly wrap lines
 # round to the previous line (so you see what we're up against).
-     || &Die('can run neither "man | colcrt -" nor "man | col -bx"');
+    if(system('col -bx <' . $args) || !(-s $coltmp)) {
+        unlink($mantmp);
+        unlink($coltmp);
+        &Die('colcrt and col -bx both failed');
+    }
+}
+unlink($mantmp) || &Die('cannot remove tempfile ', $mantmp);
+
+unless(open(MANPAGE, '<', $coltmp)) {
+    unlink($coltmp);
+    &Die('generated tmpfile cannot be read');
 }
 
 unless($linkfile eq '') {
@@ -198,7 +225,8 @@ BUILTINS: while (<MANPAGE>) {
 
 select STDOUT;
 close OUT;
-close(MANPAGE) || &Die('piping from man ', $manfile, ' failed');
+close(MANPAGE);
+unlink($coltmpbase) || &Die('cannot remove tempfile ', $coltmpbase);
 
 foreach $file (<*>) {
     open (IN, $file);