Print man pages with fixed widthDifferences between man pagesMan page with preserved text decorations, proportional text and fixed-width codeSearching in man pagesMan-pages don't include all relevant informationMan pages are shuffledSplit lines inside files with fixed width columnsReinstall man pages & fix manawk - , fixed width columnsPaginate man pagesHow to search a pattern containing hyphens inside man pages?

Theorems that impeded progress

SSH "lag" in LAN on some machines, mixed distros

How to say in German "enjoying home comforts"

Today is the Center

Doing something right before you need it - expression for this?

Emailing HOD to enhance faculty application

What reasons are there for a Capitalist to oppose a 100% inheritance tax?

Can a rocket refuel on Mars from water?

Is Lorentz symmetry broken if SUSY is broken?

Twin primes whose sum is a cube

Is the Joker left-handed?

Arrow those variables!

Why does Arabsat 6A need a Falcon Heavy to launch

I Accidentally Deleted a Stock Terminal Theme

How can saying a song's name be a copyright violation?

Blender 2.8 I can't see vertices, edges or faces in edit mode

Western buddy movie with a supernatural twist where a woman turns into an eagle at the end

What does it mean to describe someone as a butt steak?

Brothers & sisters

What killed these X2 caps?

How to prevent "they're falling in love" trope

If a Gelatinous Cube takes up the entire space of a Pit Trap, what happens when a creature falls into the trap but succeeds on the saving throw?

1960's book about a plague that kills all white people

Should I tell management that I intend to leave due to bad software development practices?



Print man pages with fixed width


Differences between man pagesMan page with preserved text decorations, proportional text and fixed-width codeSearching in man pagesMan-pages don't include all relevant informationMan pages are shuffledSplit lines inside files with fixed width columnsReinstall man pages & fix manawk - , fixed width columnsPaginate man pagesHow to search a pattern containing hyphens inside man pages?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








8















With the example command



man apropos > outputfile


a text file is generated which contains the formatted man page of apropos (with some little differences with respect to man apropos directly printed on screen, such as bold characters).



But I would like to manually set the maximum line width of the generated output file, so that all the paragraphs will be justified to that width.



man pages are created through groff: for example, I tried to put .ll 50 before a paragraph of the original .gz man source text file, but it is trivial if I need to work on several man pages. Moreover not all the characters are recognized:



apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169


So, I wonder if a more straightforward method exists. How to modify the maximum line width, during the creation of an outputfile? Is there some specific command?




Edit:



(All the following considerations are about Ubuntu 18.04: I can no more test them in previous versions, included the 14.04 of the above question.)



As regards a one-line temporary solution, if MANWIDTH has not been already exported with a custom value, there is no difference between



$ MANWIDTH=60 man apropos > outputfile


and



$ COLUMNS=60 man apropos > outputfile


The first one, using MANWIDTH, is however better in principle.




Edit 2 (not strictly related to the question):



To make instead a permanent width setting to be applied to any manpage printing, it is necessary to export the desired value of the variable. With:



$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile


man apropos will be printed with the same width regardless of any terminal window resizing. Instead,



$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile


will provide the same result as before only if the terminal window is not resized between export and man <page> > outputfile.










share|improve this question
























  • I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

    – Stéphane Chazelas
    Aug 11 '15 at 14:04











  • the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

    – BowPark
    Aug 11 '15 at 16:40











  • What's the output of locale? and locale charmap?

    – Stéphane Chazelas
    Aug 11 '15 at 16:57











  • locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

    – BowPark
    Aug 11 '15 at 17:05







  • 1





    Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

    – Stéphane Chazelas
    Aug 12 '15 at 8:33

















8















With the example command



man apropos > outputfile


a text file is generated which contains the formatted man page of apropos (with some little differences with respect to man apropos directly printed on screen, such as bold characters).



But I would like to manually set the maximum line width of the generated output file, so that all the paragraphs will be justified to that width.



man pages are created through groff: for example, I tried to put .ll 50 before a paragraph of the original .gz man source text file, but it is trivial if I need to work on several man pages. Moreover not all the characters are recognized:



apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169


So, I wonder if a more straightforward method exists. How to modify the maximum line width, during the creation of an outputfile? Is there some specific command?




Edit:



(All the following considerations are about Ubuntu 18.04: I can no more test them in previous versions, included the 14.04 of the above question.)



As regards a one-line temporary solution, if MANWIDTH has not been already exported with a custom value, there is no difference between



$ MANWIDTH=60 man apropos > outputfile


and



$ COLUMNS=60 man apropos > outputfile


The first one, using MANWIDTH, is however better in principle.




Edit 2 (not strictly related to the question):



To make instead a permanent width setting to be applied to any manpage printing, it is necessary to export the desired value of the variable. With:



$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile


man apropos will be printed with the same width regardless of any terminal window resizing. Instead,



$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile


will provide the same result as before only if the terminal window is not resized between export and man <page> > outputfile.










share|improve this question
























  • I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

    – Stéphane Chazelas
    Aug 11 '15 at 14:04











  • the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

    – BowPark
    Aug 11 '15 at 16:40











  • What's the output of locale? and locale charmap?

    – Stéphane Chazelas
    Aug 11 '15 at 16:57











  • locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

    – BowPark
    Aug 11 '15 at 17:05







  • 1





    Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

    – Stéphane Chazelas
    Aug 12 '15 at 8:33













8












8








8


2






With the example command



man apropos > outputfile


a text file is generated which contains the formatted man page of apropos (with some little differences with respect to man apropos directly printed on screen, such as bold characters).



But I would like to manually set the maximum line width of the generated output file, so that all the paragraphs will be justified to that width.



man pages are created through groff: for example, I tried to put .ll 50 before a paragraph of the original .gz man source text file, but it is trivial if I need to work on several man pages. Moreover not all the characters are recognized:



apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169


So, I wonder if a more straightforward method exists. How to modify the maximum line width, during the creation of an outputfile? Is there some specific command?




Edit:



(All the following considerations are about Ubuntu 18.04: I can no more test them in previous versions, included the 14.04 of the above question.)



As regards a one-line temporary solution, if MANWIDTH has not been already exported with a custom value, there is no difference between



$ MANWIDTH=60 man apropos > outputfile


and



$ COLUMNS=60 man apropos > outputfile


The first one, using MANWIDTH, is however better in principle.




Edit 2 (not strictly related to the question):



To make instead a permanent width setting to be applied to any manpage printing, it is necessary to export the desired value of the variable. With:



$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile


man apropos will be printed with the same width regardless of any terminal window resizing. Instead,



$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile


will provide the same result as before only if the terminal window is not resized between export and man <page> > outputfile.










share|improve this question
















With the example command



man apropos > outputfile


a text file is generated which contains the formatted man page of apropos (with some little differences with respect to man apropos directly printed on screen, such as bold characters).



But I would like to manually set the maximum line width of the generated output file, so that all the paragraphs will be justified to that width.



man pages are created through groff: for example, I tried to put .ll 50 before a paragraph of the original .gz man source text file, but it is trivial if I need to work on several man pages. Moreover not all the characters are recognized:



apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169


So, I wonder if a more straightforward method exists. How to modify the maximum line width, during the creation of an outputfile? Is there some specific command?




Edit:



(All the following considerations are about Ubuntu 18.04: I can no more test them in previous versions, included the 14.04 of the above question.)



As regards a one-line temporary solution, if MANWIDTH has not been already exported with a custom value, there is no difference between



$ MANWIDTH=60 man apropos > outputfile


and



$ COLUMNS=60 man apropos > outputfile


The first one, using MANWIDTH, is however better in principle.




Edit 2 (not strictly related to the question):



To make instead a permanent width setting to be applied to any manpage printing, it is necessary to export the desired value of the variable. With:



$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile


man apropos will be printed with the same width regardless of any terminal window resizing. Instead,



$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile


will provide the same result as before only if the terminal window is not resized between export and man <page> > outputfile.







shell command-line text-processing man text-formatting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Oct 18 '18 at 13:58







BowPark

















asked Aug 11 '15 at 13:42









BowParkBowPark

1,62082749




1,62082749












  • I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

    – Stéphane Chazelas
    Aug 11 '15 at 14:04











  • the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

    – BowPark
    Aug 11 '15 at 16:40











  • What's the output of locale? and locale charmap?

    – Stéphane Chazelas
    Aug 11 '15 at 16:57











  • locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

    – BowPark
    Aug 11 '15 at 17:05







  • 1





    Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

    – Stéphane Chazelas
    Aug 12 '15 at 8:33

















  • I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

    – Stéphane Chazelas
    Aug 11 '15 at 14:04











  • the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

    – BowPark
    Aug 11 '15 at 16:40











  • What's the output of locale? and locale charmap?

    – Stéphane Chazelas
    Aug 11 '15 at 16:57











  • locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

    – BowPark
    Aug 11 '15 at 17:05







  • 1





    Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

    – Stéphane Chazelas
    Aug 12 '15 at 8:33
















I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

– Stéphane Chazelas
Aug 11 '15 at 14:04





I can't reproduce your input code errors 195 168 could be è in UTF-8. Is the man page in English? What's your man implementation? What's your locale?

– Stéphane Chazelas
Aug 11 '15 at 14:04













the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

– BowPark
Aug 11 '15 at 16:40





the system is Ubuntu 14.04 (version from man man is 2.6.7.1). The man page is in Italian and it is UTF-8. What do you mean by locale?

– BowPark
Aug 11 '15 at 16:40













What's the output of locale? and locale charmap?

– Stéphane Chazelas
Aug 11 '15 at 16:57





What's the output of locale? and locale charmap?

– Stéphane Chazelas
Aug 11 '15 at 16:57













locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

– BowPark
Aug 11 '15 at 17:05






locale output: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmap output: UTF-8

– BowPark
Aug 11 '15 at 17:05





1




1





Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

– Stéphane Chazelas
Aug 12 '15 at 8:33





Yes the terminal not functional is from less because TERM is not set. I meant env -i LANG=it_IT.UTF-8 man apropos > output (or | head).

– Stéphane Chazelas
Aug 12 '15 at 8:33










4 Answers
4






active

oldest

votes


















14














Use the MANWIDTH environment variable:



MANWIDTH=60 man apropos > apropos.txt


The manpage for man 2.7.4 says:




If $MANWIDTH is set, its value is used as the line length for which manual pages should be formatted. If it is not set, manual pages will be formatted with a line length appropriate to the current terminal (using the value of $COLUMNS, an ioctl(2) if available, or falling back to 80 characters if neither is available).




That is, it overrides both COLUMNS and the ioctl value. I prefer to not rely on modifying COLUMNS (although it does work here) since its value is updated dynamically every time the window size changes.



Using MANWIDTH instead of COLUMNS also allows you to make the change permanent by adding a line such as export MANWIDTH=60 to your shell startup file.






share|improve this answer

























  • Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

    – Felipe Alvarez
    Apr 20 '16 at 0:35






  • 1





    A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

    – sampablokuper
    Dec 17 '17 at 17:46












  • @Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

    – BowPark
    Oct 18 '18 at 8:07











  • @BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

    – Marcel M
    Oct 18 '18 at 12:42











  • @MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

    – BowPark
    Oct 18 '18 at 14:03


















10














Try setting the COLUMNS environment variable. Works for me with man from mandb 2.7.0.2 on Debian with groff 1.22.3.



$ COLUMNS=60 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descrip‐
tions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m sys‐




$ COLUMNS=70 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descriptions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
path] [-L locale] [-C file] keyword ...


With the version on Ubuntu 14.04, I need to write it:



COLUMNS=60 < /dev/null man apropos | head


There, man seems to disregard the COLUMNS environment variable if stdin is a terminal (it then queries the terminal device for the terminal width).



You can also try:



s=$(stty -g); stty cols 60; man apropos | head; stty "$s"


Which with zsh you can shorten to:



STTY='cols 60' man apropos | head


You could do it by invoking groff by hand as:



gzip -dcf "$(man -w apropos)" |
groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
col -bpx


Your can't find character with input code errors were because you used -Tascii instead of -Tutf8 and didn't use -k to pre-process the files with preconv.






share|improve this answer

























  • I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

    – BowPark
    Aug 11 '15 at 16:46






  • 2





    Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

    – Stéphane Chazelas
    Aug 11 '15 at 16:53











  • Maybe it is like you supposed. And now it works, thank you!

    – BowPark
    Aug 11 '15 at 17:03



















4














You can use the fmt command, which as far as I know is present in any Linux distribution.



man apropos | fmt -w 70 


will wrap up lines at 70 characters.






share|improve this answer


















  • 1





    yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

    – BowPark
    Aug 11 '15 at 16:42











  • Sorry, I must have missed up that part.

    – dr01
    Aug 12 '15 at 8:10


















2














You can use fold



man cp | fold -w 20


will fold after each 20 characters(!). Note that this will cut words in two as the only option is "fold every 20 characters"



taking care of this, you might use sed as follows (with dynamic line length)



man cp | sed 's/.20 /&n/g'


will add a newline after 20 random characters followed by a space (i.e. new word). So lines might be longer than 20 characters (match is 20 characters then a space so a 26-character word would result in a 26-character line)



For omitting the last space in the sed command:



sed 's/(.20) /1n/g'





share|improve this answer




















  • 1





    Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

    – BowPark
    Aug 11 '15 at 16:48











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f222528%2fprint-man-pages-with-fixed-width%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























4 Answers
4






active

oldest

votes








4 Answers
4






active

oldest

votes









active

oldest

votes






active

oldest

votes









14














Use the MANWIDTH environment variable:



MANWIDTH=60 man apropos > apropos.txt


The manpage for man 2.7.4 says:




If $MANWIDTH is set, its value is used as the line length for which manual pages should be formatted. If it is not set, manual pages will be formatted with a line length appropriate to the current terminal (using the value of $COLUMNS, an ioctl(2) if available, or falling back to 80 characters if neither is available).




That is, it overrides both COLUMNS and the ioctl value. I prefer to not rely on modifying COLUMNS (although it does work here) since its value is updated dynamically every time the window size changes.



Using MANWIDTH instead of COLUMNS also allows you to make the change permanent by adding a line such as export MANWIDTH=60 to your shell startup file.






share|improve this answer

























  • Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

    – Felipe Alvarez
    Apr 20 '16 at 0:35






  • 1





    A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

    – sampablokuper
    Dec 17 '17 at 17:46












  • @Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

    – BowPark
    Oct 18 '18 at 8:07











  • @BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

    – Marcel M
    Oct 18 '18 at 12:42











  • @MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

    – BowPark
    Oct 18 '18 at 14:03















14














Use the MANWIDTH environment variable:



MANWIDTH=60 man apropos > apropos.txt


The manpage for man 2.7.4 says:




If $MANWIDTH is set, its value is used as the line length for which manual pages should be formatted. If it is not set, manual pages will be formatted with a line length appropriate to the current terminal (using the value of $COLUMNS, an ioctl(2) if available, or falling back to 80 characters if neither is available).




That is, it overrides both COLUMNS and the ioctl value. I prefer to not rely on modifying COLUMNS (although it does work here) since its value is updated dynamically every time the window size changes.



Using MANWIDTH instead of COLUMNS also allows you to make the change permanent by adding a line such as export MANWIDTH=60 to your shell startup file.






share|improve this answer

























  • Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

    – Felipe Alvarez
    Apr 20 '16 at 0:35






  • 1





    A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

    – sampablokuper
    Dec 17 '17 at 17:46












  • @Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

    – BowPark
    Oct 18 '18 at 8:07











  • @BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

    – Marcel M
    Oct 18 '18 at 12:42











  • @MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

    – BowPark
    Oct 18 '18 at 14:03













14












14








14







Use the MANWIDTH environment variable:



MANWIDTH=60 man apropos > apropos.txt


The manpage for man 2.7.4 says:




If $MANWIDTH is set, its value is used as the line length for which manual pages should be formatted. If it is not set, manual pages will be formatted with a line length appropriate to the current terminal (using the value of $COLUMNS, an ioctl(2) if available, or falling back to 80 characters if neither is available).




That is, it overrides both COLUMNS and the ioctl value. I prefer to not rely on modifying COLUMNS (although it does work here) since its value is updated dynamically every time the window size changes.



Using MANWIDTH instead of COLUMNS also allows you to make the change permanent by adding a line such as export MANWIDTH=60 to your shell startup file.






share|improve this answer















Use the MANWIDTH environment variable:



MANWIDTH=60 man apropos > apropos.txt


The manpage for man 2.7.4 says:




If $MANWIDTH is set, its value is used as the line length for which manual pages should be formatted. If it is not set, manual pages will be formatted with a line length appropriate to the current terminal (using the value of $COLUMNS, an ioctl(2) if available, or falling back to 80 characters if neither is available).




That is, it overrides both COLUMNS and the ioctl value. I prefer to not rely on modifying COLUMNS (although it does work here) since its value is updated dynamically every time the window size changes.



Using MANWIDTH instead of COLUMNS also allows you to make the change permanent by adding a line such as export MANWIDTH=60 to your shell startup file.







share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago









Antonin Décimo

32




32










answered Feb 16 '16 at 10:52









Marcel MMarcel M

25624




25624












  • Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

    – Felipe Alvarez
    Apr 20 '16 at 0:35






  • 1





    A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

    – sampablokuper
    Dec 17 '17 at 17:46












  • @Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

    – BowPark
    Oct 18 '18 at 8:07











  • @BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

    – Marcel M
    Oct 18 '18 at 12:42











  • @MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

    – BowPark
    Oct 18 '18 at 14:03

















  • Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

    – Felipe Alvarez
    Apr 20 '16 at 0:35






  • 1





    A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

    – sampablokuper
    Dec 17 '17 at 17:46












  • @Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

    – BowPark
    Oct 18 '18 at 8:07











  • @BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

    – Marcel M
    Oct 18 '18 at 12:42











  • @MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

    – BowPark
    Oct 18 '18 at 14:03
















Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

– Felipe Alvarez
Apr 20 '16 at 0:35





Excellent job. I didn't want to change COLUMNS either, and MANWIDTH works a treat in RHEL5. Cheers.

– Felipe Alvarez
Apr 20 '16 at 0:35




1




1





A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

– sampablokuper
Dec 17 '17 at 17:46






A note to readers: you may need to use export MANWIDTH=60 if setting this in your ~/.bashrc. See stackoverflow.com/a/30173376/82216 . Also, consider wrapping man in a function to set MANWIDTH depending upon your terminal width, as suggested here on the Arch wiki.

– sampablokuper
Dec 17 '17 at 17:46














@Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

– BowPark
Oct 18 '18 at 8:07





@Marcel M Thank you for your very precise answer. Can you please read the update in the question and edit your answer to include the fundamental suggestion about export MANWIDTH=60?

– BowPark
Oct 18 '18 at 8:07













@BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

– Marcel M
Oct 18 '18 at 12:42





@BowPark I wrote the answer without export because you asked about a temporary solution: "How to modify the maximum line width, during the creation of an outputfile?" (emphasis mine). You may even want to revert your edit as it doesn’t add to the question. (A comment is more appropriate.)

– Marcel M
Oct 18 '18 at 12:42













@MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

– BowPark
Oct 18 '18 at 14:03





@MarcelM Actually you are right. I edited the question accordingly. I wrote a second edit with the export statements because in a comment it would be almost unreadable (not being possible to create newlines).

– BowPark
Oct 18 '18 at 14:03













10














Try setting the COLUMNS environment variable. Works for me with man from mandb 2.7.0.2 on Debian with groff 1.22.3.



$ COLUMNS=60 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descrip‐
tions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m sys‐




$ COLUMNS=70 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descriptions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
path] [-L locale] [-C file] keyword ...


With the version on Ubuntu 14.04, I need to write it:



COLUMNS=60 < /dev/null man apropos | head


There, man seems to disregard the COLUMNS environment variable if stdin is a terminal (it then queries the terminal device for the terminal width).



You can also try:



s=$(stty -g); stty cols 60; man apropos | head; stty "$s"


Which with zsh you can shorten to:



STTY='cols 60' man apropos | head


You could do it by invoking groff by hand as:



gzip -dcf "$(man -w apropos)" |
groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
col -bpx


Your can't find character with input code errors were because you used -Tascii instead of -Tutf8 and didn't use -k to pre-process the files with preconv.






share|improve this answer

























  • I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

    – BowPark
    Aug 11 '15 at 16:46






  • 2





    Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

    – Stéphane Chazelas
    Aug 11 '15 at 16:53











  • Maybe it is like you supposed. And now it works, thank you!

    – BowPark
    Aug 11 '15 at 17:03
















10














Try setting the COLUMNS environment variable. Works for me with man from mandb 2.7.0.2 on Debian with groff 1.22.3.



$ COLUMNS=60 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descrip‐
tions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m sys‐




$ COLUMNS=70 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descriptions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
path] [-L locale] [-C file] keyword ...


With the version on Ubuntu 14.04, I need to write it:



COLUMNS=60 < /dev/null man apropos | head


There, man seems to disregard the COLUMNS environment variable if stdin is a terminal (it then queries the terminal device for the terminal width).



You can also try:



s=$(stty -g); stty cols 60; man apropos | head; stty "$s"


Which with zsh you can shorten to:



STTY='cols 60' man apropos | head


You could do it by invoking groff by hand as:



gzip -dcf "$(man -w apropos)" |
groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
col -bpx


Your can't find character with input code errors were because you used -Tascii instead of -Tutf8 and didn't use -k to pre-process the files with preconv.






share|improve this answer

























  • I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

    – BowPark
    Aug 11 '15 at 16:46






  • 2





    Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

    – Stéphane Chazelas
    Aug 11 '15 at 16:53











  • Maybe it is like you supposed. And now it works, thank you!

    – BowPark
    Aug 11 '15 at 17:03














10












10








10







Try setting the COLUMNS environment variable. Works for me with man from mandb 2.7.0.2 on Debian with groff 1.22.3.



$ COLUMNS=60 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descrip‐
tions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m sys‐




$ COLUMNS=70 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descriptions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
path] [-L locale] [-C file] keyword ...


With the version on Ubuntu 14.04, I need to write it:



COLUMNS=60 < /dev/null man apropos | head


There, man seems to disregard the COLUMNS environment variable if stdin is a terminal (it then queries the terminal device for the terminal width).



You can also try:



s=$(stty -g); stty cols 60; man apropos | head; stty "$s"


Which with zsh you can shorten to:



STTY='cols 60' man apropos | head


You could do it by invoking groff by hand as:



gzip -dcf "$(man -w apropos)" |
groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
col -bpx


Your can't find character with input code errors were because you used -Tascii instead of -Tutf8 and didn't use -k to pre-process the files with preconv.






share|improve this answer















Try setting the COLUMNS environment variable. Works for me with man from mandb 2.7.0.2 on Debian with groff 1.22.3.



$ COLUMNS=60 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descrip‐
tions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m sys‐




$ COLUMNS=70 man apropos | head
APROPOS(1) Manual pager utils APROPOS(1)



NAME
apropos - search the manual page names and descriptions

SYNOPSIS
apropos [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
path] [-L locale] [-C file] keyword ...


With the version on Ubuntu 14.04, I need to write it:



COLUMNS=60 < /dev/null man apropos | head


There, man seems to disregard the COLUMNS environment variable if stdin is a terminal (it then queries the terminal device for the terminal width).



You can also try:



s=$(stty -g); stty cols 60; man apropos | head; stty "$s"


Which with zsh you can shorten to:



STTY='cols 60' man apropos | head


You could do it by invoking groff by hand as:



gzip -dcf "$(man -w apropos)" |
groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
col -bpx


Your can't find character with input code errors were because you used -Tascii instead of -Tutf8 and didn't use -k to pre-process the files with preconv.







share|improve this answer














share|improve this answer



share|improve this answer








edited Aug 12 '15 at 9:17

























answered Aug 11 '15 at 13:50









Stéphane ChazelasStéphane Chazelas

313k57592948




313k57592948












  • I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

    – BowPark
    Aug 11 '15 at 16:46






  • 2





    Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

    – Stéphane Chazelas
    Aug 11 '15 at 16:53











  • Maybe it is like you supposed. And now it works, thank you!

    – BowPark
    Aug 11 '15 at 17:03


















  • I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

    – BowPark
    Aug 11 '15 at 16:46






  • 2





    Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

    – Stéphane Chazelas
    Aug 11 '15 at 16:53











  • Maybe it is like you supposed. And now it works, thank you!

    – BowPark
    Aug 11 '15 at 17:03

















I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

– BowPark
Aug 11 '15 at 16:46





I tried the same command: COLUMNS=60 man apropos | head, but unfortunately the output width is all the screen width. Can I set the variable COLUMNS elsewhere or in other way?

– BowPark
Aug 11 '15 at 16:46




2




2





Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

– Stéphane Chazelas
Aug 11 '15 at 16:53





Try COLUMNS=60 < /dev/null man apropos | head. Looks like on Ubuntu 14.04, it doesn't trust COLUMNS if stdin is a terminal (and gets the width from the terminal device).

– Stéphane Chazelas
Aug 11 '15 at 16:53













Maybe it is like you supposed. And now it works, thank you!

– BowPark
Aug 11 '15 at 17:03






Maybe it is like you supposed. And now it works, thank you!

– BowPark
Aug 11 '15 at 17:03












4














You can use the fmt command, which as far as I know is present in any Linux distribution.



man apropos | fmt -w 70 


will wrap up lines at 70 characters.






share|improve this answer


















  • 1





    yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

    – BowPark
    Aug 11 '15 at 16:42











  • Sorry, I must have missed up that part.

    – dr01
    Aug 12 '15 at 8:10















4














You can use the fmt command, which as far as I know is present in any Linux distribution.



man apropos | fmt -w 70 


will wrap up lines at 70 characters.






share|improve this answer


















  • 1





    yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

    – BowPark
    Aug 11 '15 at 16:42











  • Sorry, I must have missed up that part.

    – dr01
    Aug 12 '15 at 8:10













4












4








4







You can use the fmt command, which as far as I know is present in any Linux distribution.



man apropos | fmt -w 70 


will wrap up lines at 70 characters.






share|improve this answer













You can use the fmt command, which as far as I know is present in any Linux distribution.



man apropos | fmt -w 70 


will wrap up lines at 70 characters.







share|improve this answer












share|improve this answer



share|improve this answer










answered Aug 11 '15 at 14:10









dr01dr01

16.3k115275




16.3k115275







  • 1





    yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

    – BowPark
    Aug 11 '15 at 16:42











  • Sorry, I must have missed up that part.

    – dr01
    Aug 12 '15 at 8:10












  • 1





    yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

    – BowPark
    Aug 11 '15 at 16:42











  • Sorry, I must have missed up that part.

    – dr01
    Aug 12 '15 at 8:10







1




1





yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

– BowPark
Aug 11 '15 at 16:42





yes I have it, thank you, it works and it is pretty useful, but I need a justified text and it simply wrap up lines instead.

– BowPark
Aug 11 '15 at 16:42













Sorry, I must have missed up that part.

– dr01
Aug 12 '15 at 8:10





Sorry, I must have missed up that part.

– dr01
Aug 12 '15 at 8:10











2














You can use fold



man cp | fold -w 20


will fold after each 20 characters(!). Note that this will cut words in two as the only option is "fold every 20 characters"



taking care of this, you might use sed as follows (with dynamic line length)



man cp | sed 's/.20 /&n/g'


will add a newline after 20 random characters followed by a space (i.e. new word). So lines might be longer than 20 characters (match is 20 characters then a space so a 26-character word would result in a 26-character line)



For omitting the last space in the sed command:



sed 's/(.20) /1n/g'





share|improve this answer




















  • 1





    Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

    – BowPark
    Aug 11 '15 at 16:48















2














You can use fold



man cp | fold -w 20


will fold after each 20 characters(!). Note that this will cut words in two as the only option is "fold every 20 characters"



taking care of this, you might use sed as follows (with dynamic line length)



man cp | sed 's/.20 /&n/g'


will add a newline after 20 random characters followed by a space (i.e. new word). So lines might be longer than 20 characters (match is 20 characters then a space so a 26-character word would result in a 26-character line)



For omitting the last space in the sed command:



sed 's/(.20) /1n/g'





share|improve this answer




















  • 1





    Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

    – BowPark
    Aug 11 '15 at 16:48













2












2








2







You can use fold



man cp | fold -w 20


will fold after each 20 characters(!). Note that this will cut words in two as the only option is "fold every 20 characters"



taking care of this, you might use sed as follows (with dynamic line length)



man cp | sed 's/.20 /&n/g'


will add a newline after 20 random characters followed by a space (i.e. new word). So lines might be longer than 20 characters (match is 20 characters then a space so a 26-character word would result in a 26-character line)



For omitting the last space in the sed command:



sed 's/(.20) /1n/g'





share|improve this answer















You can use fold



man cp | fold -w 20


will fold after each 20 characters(!). Note that this will cut words in two as the only option is "fold every 20 characters"



taking care of this, you might use sed as follows (with dynamic line length)



man cp | sed 's/.20 /&n/g'


will add a newline after 20 random characters followed by a space (i.e. new word). So lines might be longer than 20 characters (match is 20 characters then a space so a 26-character word would result in a 26-character line)



For omitting the last space in the sed command:



sed 's/(.20) /1n/g'






share|improve this answer














share|improve this answer



share|improve this answer








edited Aug 11 '15 at 14:05

























answered Aug 11 '15 at 13:52









FiximanFiximan

3,298625




3,298625







  • 1





    Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

    – BowPark
    Aug 11 '15 at 16:48












  • 1





    Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

    – BowPark
    Aug 11 '15 at 16:48







1




1





Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

– BowPark
Aug 11 '15 at 16:48





Thank you, I tried your examples and they work, but - as written in a comment to dr01 - I need a justified text.

– BowPark
Aug 11 '15 at 16:48

















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f222528%2fprint-man-pages-with-fixed-width%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition

NetworkManager fails with “Could not find source connection”Trouble connecting to VPN using network-manager, while command line worksHow can I be notified about state changes to a VPN adapterBacktrack 5 R3 - Refuses to connect to VPNFeed all traffic through OpenVPN for a specific network namespace onlyRun daemon on startup in Debian once openvpn connection establishedpfsense tcp connection between openvpn and lan is brokenInternet connection problem with web browsers onlyWhy does NetworkManager explicitly support tun/tap devices?Browser issues with VPNTwo IP addresses assigned to the same network card - OpenVPN issues?Cannot connect to WiFi with nmcli, although secrets are provided