[CC += Michael Kerrisk]

Hi Ingo,

On Thu, Jan 09, 2025 at 08:07:34PM +0100, Ingo Schwarze wrote:
> Hi,
> 
> Alejandro Colomar wrote on Wed, Jan 08, 2025 at 09:32:25PM +0100:
> 
> > So, let's break the line before the first parameter if it would overrun
> > the right margin (-rLL=NNn), and automagically calculate an appropriate
> > indentation for the first parameter.
> 
> Sounds better, but still not like a fully thought-through analysis of the
> problem.

Ahh, yep, this is why I didn't propose that in the first place, and
ended up requesting a manual indentation parameter.  I keep forgetting
things while I write.  :p

On the other hand, I'm not sure how many cases there are where that
happens.  I need to check (once I finish transforming function
prototypes to use SY --in a development branch; don't worry about it
yet--).

>  For example, it's not necessarily the first argument that is
> long.  Consider this real-world example from an actual manual page:
> 
>   void
>   SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
>       void (*remove_session_cb)(SSL_CTX *ctx, SSL_SESSION *));

I have a few similar cases in the Linux man-pages project.  I'm
currently using this style:

     void
     SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
                                typeof(void (SSL_CTX *ctx, SSL_SESSION *))
                                    *remove_session_cb);

I found that using typeof() with function pointer arguments makes it
easier to have a nice alignment.

> 
> By the way, in mdoc(7), writing that is totally straightforward
> for documentation author:
> 
>   .Ft void
>   .Fo SSL_CTX_sess_set_remove_cb
>   .Fa "SSL_CTX *ctx"
>   .Fa "void (*remove_session_cb)(SSL_CTX *ctx, SSL_SESSION *)"
>   .Fc
> 
> The mdoc(7) language automatically breaks the line before the long
> argument, even though it's the second one, and proceed with an
> indentation of 4n.
> 
> > As for the right indentation, I'd make it the exact indentation that
> > would make the first parameter touch the right margin,
> 
> Probably, simply always using 4n would look better and more uniform.
> With flush-right, you might get very large indentations that look
> weird.  Besides, KISS! - especially considering that name+argument
> overflow is an unusual edge case in the first place.

Hmmm, I personally use this style when programming.  I use tabs in code,
but in function prototypes, I use 4 spaces for line continuation.  I
find it more readable in source code.
<https://github.com/shadow-maint/shadow/blob/master/lib/string/sprintf/stpeprintf.h>

However, I'm not sure if I'd like in in manual pages, though.  There's a
lot of bold, and it would make stuff too packed, I think.  In mdoc(7),
you use significantly less BI in the SYNOPSIS section, which makes it
less of a problem.  In source code, since usually there's syntax
highlighting with a lot of colors, each color is less crowded, and my
brain copes good with it.  Bold + 4n is a problematic combination, IMO.

> Also, while indentation conventions vary among projects (for example,
> BSD uses 8n tabs for statements and 4n for continuations of the same
> statement on the next line, whereas groff source code tends to use 2n
> troughout IIUC), using flush-right in source code formatting feels
> very unusual to me.
> 
> > with a minimum indentation of 2n (being such a rare case, I'd hardcode
> > this value; it shouldn't be hit under normal conditions).
> 
> If you really want to make the indentation variable in this special
> case of name+argument overrun (rather than just using 4n), then
> constraining it in the range from 2n to 8n inclusive would make
> sense to me because i would consider tab settings outside that
> range highly unusual in any source code formatting convention.

Hmmm, sounds good.  8n is decent for avoiding a packed left-hand side.

> 
> Yours,
>   Ingo


Have a lovely night!
Alex

-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to