OMFG..
Ingo you just made my morning. I'm laughing so hard.
And I needed the laugh
-Bob
On Fri, Jun 20, 2014 at 04:54:15PM +0200, Ingo Schwarze wrote:
> Hi Theo,
>
> Theo de Raadt wrote on Thu, Jun 19, 2014 at 09:58:01PM -0600:
>
> > It could be argued that the bcmp manual page does a poor job
> > documenting this. It should use the mandoc blink tag.
>
> OK?
>
> It's not perfect yet because when you nest blink tags, it already
> switches back to non-blinking mode after you close the inner block,
> not after closing the outer block as it should.
> But that can be fixed later, in the tree.
>
> Using this requires
>
> export LESS=-R
>
> or something equivalent, depending on your setup, of course.
>
> Maybe we should make that the default.
>
> I guess i need to submit a similar patch to groff, as well.
>
> Yours,
> Ingo
>
>
> Index: share/man/man7/mdoc.7
> ===================================================================
> RCS file: /cvs/src/share/man/man7/mdoc.7,v
> retrieving revision 1.110
> diff -u -p -r1.110 mdoc.7
> --- share/man/man7/mdoc.7 30 Mar 2014 23:57:43 -0000 1.110
> +++ share/man/man7/mdoc.7 20 Jun 2014 14:43:02 -0000
> @@ -534,6 +534,7 @@ in the alphabetical
> .It Sx \&Bq , \&Bo , \&Bc Ta enclose in square brackets: Bq text
> .It Sx \&Brq , \&Bro , \&Brc Ta enclose in curly braces: Brq text
> .It Sx \&Aq , \&Ao , \&Ac Ta enclose in angle brackets: Aq text
> +.It Sx \&Blq , \&Blo , \&Blc Ta blink: Blq text
> .It Sx \&Eo , \&Ec Ta generic enclosure
> .El
> .Ss Text production
> @@ -1077,6 +1078,16 @@ and
> .Pp
> See also
> .Sx \&Bo .
> +.Ss \&Blc
> +Close a
> +.Sx \&Blo
> +block.
> +Does not have any tail arguments.
> +.Ss \&Blo
> +Begin a blinking block.
> +Does not have any head arguments.
> +.Ss \&Blq
> +Makes its arguments blink.
> .Ss \&Brc
> Close a
> .Sx \&Bro
> @@ -2924,6 +2935,7 @@ end of the line.
> .Bl -column "MacroX" "CallableX" "ParsedX" -offset indent
> .It Em Macro Ta Em Callable Ta Em Parsed
> .It Sx \&Aq Ta Yes Ta Yes
> +.It Sx \&Blq Ta Yes Ta Yes
> .It Sx \&Bq Ta Yes Ta Yes
> .It Sx \&Brq Ta Yes Ta Yes
> .It Sx \&D1 Ta \&No Ta \&Yes
> Index: usr.bin/mandoc/mdoc.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc.c,v
> retrieving revision 1.104
> diff -u -p -r1.104 mdoc.c
> --- usr.bin/mandoc/mdoc.c 25 Apr 2014 14:10:59 -0000 1.104
> +++ usr.bin/mandoc/mdoc.c 20 Jun 2014 14:43:02 -0000
> @@ -62,7 +62,8 @@ const char *const __mdoc_macronames[MDOC
> "Lk", "Mt", "Brq", "Bro",
> "Brc", "%C", "Es", "En",
> "Dx", "%Q", "br", "sp",
> - "%U", "Ta", "ll",
> + "%U", "Ta", "ll", "Blo",
> + "Blc", "Blq",
> };
>
> const char *const __mdoc_argnames[MDOC_ARG_MAX] = {
> Index: usr.bin/mandoc/mdoc.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc.h,v
> retrieving revision 1.53
> diff -u -p -r1.53 mdoc.h
> --- usr.bin/mandoc/mdoc.h 20 Apr 2014 16:44:44 -0000 1.53
> +++ usr.bin/mandoc/mdoc.h 20 Jun 2014 14:43:02 -0000
> @@ -141,6 +141,9 @@ enum mdoct {
> MDOC__U,
> MDOC_Ta,
> MDOC_ll,
> + MDOC_Blo,
> + MDOC_Blc,
> + MDOC_Blq,
> MDOC_MAX
> };
>
> Index: usr.bin/mandoc/mdoc_argv.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_argv.c,v
> retrieving revision 1.50
> diff -u -p -r1.50 mdoc_argv.c
> --- usr.bin/mandoc/mdoc_argv.c 23 Apr 2014 21:06:33 -0000 1.50
> +++ usr.bin/mandoc/mdoc_argv.c 20 Jun 2014 14:43:03 -0000
> @@ -264,6 +264,9 @@ static const struct mdocarg mdocargs[MDO
> { ARGSFL_NONE, NULL }, /* %U */
> { ARGSFL_NONE, NULL }, /* Ta */
> { ARGSFL_NONE, NULL }, /* ll */
> + { ARGSFL_NONE, NULL }, /* Blo */
> + { ARGSFL_DELIM, NULL }, /* Blc */
> + { ARGSFL_DELIM, NULL }, /* Blq */
> };
>
>
> Index: usr.bin/mandoc/mdoc_html.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_html.c,v
> retrieving revision 1.73
> diff -u -p -r1.73 mdoc_html.c
> --- usr.bin/mandoc/mdoc_html.c 23 Apr 2014 16:07:06 -0000 1.73
> +++ usr.bin/mandoc/mdoc_html.c 20 Jun 2014 14:43:03 -0000
> @@ -242,6 +242,9 @@ static const struct htmlmdoc mdocs[MDOC_
> {mdoc__x_pre, mdoc__x_post}, /* %U */
> {NULL, NULL}, /* Ta */
> {mdoc_ll_pre, NULL}, /* ll */
> + {mdoc_quote_pre, mdoc_quote_post}, /* Blo */
> + {NULL, NULL}, /* Blc */
> + {mdoc_quote_pre, mdoc_quote_post}, /* Blq */
> };
>
> static const char * const lists[LIST_MAX] = {
> @@ -2063,6 +2066,12 @@ mdoc_quote_pre(MDOC_ARGS)
> case MDOC_Aq:
> print_text(h, "\\(la");
> break;
> + case MDOC_Blo:
> + /* FALLTHROUGH */
> + case MDOC_Blq:
> + PAIR_CLASS_INIT(&tag, "blink");
> + print_otag(h, TAG_SPAN, 1, &tag);
> + break;
> case MDOC_Bro:
> /* FALLTHROUGH */
> case MDOC_Brq:
> @@ -2131,6 +2140,10 @@ mdoc_quote_post(MDOC_ARGS)
> /* FALLTHROUGH */
> case MDOC_Aq:
> print_text(h, "\\(ra");
> + /* FALLTHROUGH */
> + case MDOC_Blo:
> + /* FALLTHROUGH */
> + case MDOC_Blq:
> break;
> case MDOC_Bro:
> /* FALLTHROUGH */
> Index: usr.bin/mandoc/mdoc_macro.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
> retrieving revision 1.88
> diff -u -p -r1.88 mdoc_macro.c
> --- usr.bin/mandoc/mdoc_macro.c 20 Apr 2014 16:44:44 -0000 1.88
> +++ usr.bin/mandoc/mdoc_macro.c 20 Jun 2014 14:43:03 -0000
> @@ -208,6 +208,11 @@ const struct mdoc_macro __mdoc_macros[MD
> { in_line_eoln, 0 }, /* %U */
> { phrase_ta, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ta */
> { in_line_eoln, 0 }, /* ll */
> + { blk_part_exp, MDOC_CALLABLE | MDOC_PARSED |
> + MDOC_EXPLICIT | MDOC_JOIN }, /* Blo */
> + { blk_exp_close, MDOC_CALLABLE | MDOC_PARSED |
> + MDOC_EXPLICIT | MDOC_JOIN }, /* Blc */
> + { blk_part_imp, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Blq */
> };
>
> const struct mdoc_macro * const mdoc_macros = __mdoc_macros;
> Index: usr.bin/mandoc/mdoc_man.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_man.c,v
> retrieving revision 1.62
> diff -u -p -r1.62 mdoc_man.c
> --- usr.bin/mandoc/mdoc_man.c 20 Apr 2014 19:39:35 -0000 1.62
> +++ usr.bin/mandoc/mdoc_man.c 20 Jun 2014 14:43:04 -0000
> @@ -239,6 +239,9 @@ static const struct manact manacts[MDOC_
> { NULL, NULL, post_percent, NULL, NULL }, /* %U */
> { NULL, NULL, NULL, NULL, NULL }, /* Ta */
> { NULL, pre_ll, post_sp, NULL, NULL }, /* ll */
> + { NULL, NULL, NULL, NULL, NULL }, /* Blo */
> + { NULL, NULL, NULL, NULL, NULL }, /* Blc */
> + { NULL, NULL, NULL, NULL, NULL }, /* Blq */
> { NULL, NULL, NULL, NULL, NULL }, /* ROOT */
> };
>
> Index: usr.bin/mandoc/mdoc_term.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
> retrieving revision 1.169
> diff -u -p -r1.169 mdoc_term.c
> --- usr.bin/mandoc/mdoc_term.c 23 Apr 2014 16:07:06 -0000 1.169
> +++ usr.bin/mandoc/mdoc_term.c 20 Jun 2014 14:43:04 -0000
> @@ -243,6 +243,9 @@ static const struct termact termacts[MDO
> { NULL, termp____post }, /* %U */
> { NULL, NULL }, /* Ta */
> { termp_ll_pre, NULL }, /* ll */
> + { termp_quote_pre, termp_quote_post }, /* Blo */
> + { NULL, NULL }, /* Blc */
> + { termp_quote_pre, termp_quote_post }, /* Blq */
> };
>
>
> @@ -1837,6 +1840,11 @@ termp_quote_pre(DECL_ARGS)
> case MDOC_Aq:
> term_word(p, "<");
> break;
> + case MDOC_Blo:
> + /* FALLTHROUGH */
> + case MDOC_Blq:
> + term_word(p, "\x1B[5m");
> + break;
> case MDOC_Bro:
> /* FALLTHROUGH */
> case MDOC_Brq:
> @@ -1900,6 +1908,11 @@ termp_quote_post(DECL_ARGS)
> /* FALLTHROUGH */
> case MDOC_Aq:
> term_word(p, ">");
> + break;
> + case MDOC_Blo:
> + /* FALLTHROUGH */
> + case MDOC_Blq:
> + term_word(p, "\x1B[0m");
> break;
> case MDOC_Bro:
> /* FALLTHROUGH */
> Index: usr.bin/mandoc/mdoc_validate.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_validate.c,v
> retrieving revision 1.132
> diff -u -p -r1.132 mdoc_validate.c
> --- usr.bin/mandoc/mdoc_validate.c 23 Apr 2014 21:06:33 -0000 1.132
> +++ usr.bin/mandoc/mdoc_validate.c 20 Jun 2014 14:43:04 -0000
> @@ -299,6 +299,9 @@ static const struct valids mdoc_valids[M
> { NULL, posts_text1 }, /* %U */
> { NULL, NULL }, /* Ta */
> { NULL, NULL }, /* ll */
> + { NULL, NULL }, /* Blo */
> + { NULL, NULL }, /* Blc */
> + { NULL, NULL }, /* Blq */
> };
>
> #define RSORD_MAX 14 /* Number of `Rs' blocks. */
>