Trang 'man' quá hẹp (không tận dụng kích thước thiết bị đầu cuối)


7

Tôi đang tạo trang 'người đàn ông' đầu tiên của mình và tôi đang sử dụng groffđể làm điều đó. Tuy nhiên, khi tôi "biên dịch" nó và xem nó, nó chỉ chiếm một số lượng cột nhất định trong thiết bị đầu cuối của tôi. Tôi đã thử xem các trang người đàn ông khác chỉ trong trường hợp và chúng kéo dài theo chiều rộng của thiết bị đầu cuối của tôi. Đối với một sơ đồ trực quan:

---------------------------------------
| stuff(1)             stuff(1)         |
|                                       |
| NAME                                  |
|       a tool to do stuff but          |
|       it isn't really working         |
|                                       |
| DESCRIPTION                           |
|       yadadyadyadyadyadyadydy         |
|       segfwefwefwefwe                 |
|                                       |
|       srgswrgwrg                      |
 ---------------------------------------

... Và cứ thế, hy vọng bạn có được ý tưởng. Hầu hết các trang người đàn ông có chiều rộng đầy đủ.

Ngay bây giờ, sau khi viết trang người đàn ông của tôi vào một tệp văn bản (sử dụng "cú pháp" groff / nroff), tôi làm cho nó như thế này:

groff -Tascii -man ./path/to/man | more

Bạn nên bao gồm các bước chính xác bạn đang sử dụng để "biên dịch" trang người đàn ông của bạn.
wfaulk

@wfaulk, xấu của tôi, tôi nghĩ rằng tôi đã thêm nó
n0pe

hm, btw, những gì về việc thay đổi tiêu đề của câu hỏi này thành một câu hỏi thực sự? Ví dụ: 'Làm cách nào để thay đổi độ rộng của trang man bằng cách sử dụng groff?' Hoặc một cái gì đó như thế này ...
maxschlepzig

Nó không thực sự giải quyết câu hỏi thực tế của bạn, nhưng tôi nghĩ rằng đáng để chỉ ra rằng bạn có thể có được mancác trang * nix thực sự mà không phải chịu sự đau đớn của chuỗi công cụ cũ bằng cách sử dụng cái gì đó như thế nào ronn. Ngoài ra, tôi dường như nhớ lại việc nghe rằng chuỗi công cụ OpenBSD cho mancác trang là khác nhau (mặc dù tôi không có cơ sở thực sự để so sánh). Đâyman mdoc
Hank Gay

Câu trả lời:


9

Tôi đã kiểm tra xem groffcuộc gọi nào được thực hiện khi tôi gọi man man(sử dụng toàn bộ chiều rộng):

$ strace -o log -f -v -s 1024 -e trace=process man man

Tìm kiếm groffkết quả cuộc gọi như sau:

$ grep groff log | sed 's/\], \[.*//' 
28721 execve("/usr/bin/groff", ["groff", "-mtty-char", "-Tutf8", "-mandoc",
                                         "-rLL=171n", "-rLT=171n"

Bây giờ tôi thay đổi kích thước xterm của mình:

$ strace -o log2 -f -v -s 1024 -e trace=process  man man
$ grep groff log2 | sed 's/\], \[.*//'
28852 execve("/usr/bin/groff", ["groff", "-mtty-char", "-Tutf8", "-mandoc",
                                         "-rLL=119n", "-rLT=119n"

Vì vậy, tôi giả định rằng các đối số -rLL-rLTảnh hưởng đến độ rộng của thiết bị đầu cuối được sử dụng grofftrong quá trình biên dịch.


Thật thú vị, tôi đã xem qua grofftrang của tôi và nó không đề cập gì về -rLLhoặc -rLT. Tôi đã kiểm tra troffchỉ trong trường hợp bởi vì tôi biết groffgọi nó. Sau đó, tôi chỉ thử thêm các cờ 119nvà nó đã hoạt động, tuy nhiên vẫn còn một khoảng trống và nó dường như không "kéo dài" và phù hợp với kích thước thiết bị đầu cuối, giống như một cài đặt tĩnh.
n0pe

Cảm ơn vì đã phác thảo những gì bạn đã làm bằng cách này, rất thú vị
n0pe

@MaxMackie, vâng, nó là tĩnh - manchỉ cần 'động' xác định độ rộng của thiết bị đầu cuối hiện tại và cung cấp cho nó - tức là trong cuộc gọi đầu tiên, thiết bị đầu cuối của tôi rộng 171 cột và trong cuộc gọi thứ 2, nó rộng tới 119 cột.
maxschlepzig

Được rồi, tôi nghĩ rằng sự hiểu biết của tôi về những gì groff thực sự làm là thiếu sót sau đó. Tệp "nguồn" của tôi (bản rõ với macro) là tệp man? Hay là groff tạo ra một tập tin mới cho tôi? Nếu tôi tạo một trang người đàn ông và cài đặt nó trên hệ thống của mình, liệu có thể giúp tôi làm điều này không, hay nó chỉ xử lý định dạng? Ví dụ, tôi có thể groff -Tascii -man ./path > /man/file?
n0pe

1
@MaxMackie, các trang người đàn ông được cài đặt trên hệ thống của tôi là troff đánh dấu các file, ví dụ như gunzip -c /usr/share/man/man1/man.1.gz > man.1, file man.1 man.1: troff or preprocessor input text. Có nghĩa là grofflệnh được gọi một cách nhanh chóng bởi manlệnh mỗi khi nó được gọi. Có lẽ có những hệ thống thực hiện một số bộ nhớ đệm của đầu ra troff (và có lẽ chỉ hỗ trợ đầu ra 80 cột ...).
maxschlepzig

1

Tôi tin rằng hầu hết các phiên bản hiện tại của maný chí DoTheRightThing ™ nếu bạn chỉ định trang người đàn ông của mình là một đối số có chứa dấu gạch chéo:

man ./stuff.1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.