On Saturday, February 15, 2014 5:25:10 PM UTC+1, Christian Wellenbrock wrote:
> On Saturday, July 6, 2013 1:35:26 PM UTC+2, Bram Moolenaar wrote:
>
> > Christian Wellenbrock wrote:
>
> >
>
> >
>
> >
>
> > > In order to test the changes I made, I started out with a patch that
>
> >
>
> > > helped me to find and verify 'statusline' options that show the nine
>
> >
>
> > > different uses of the 'fillchar'. In `1_replace_fillchars.patch` I
>
> >
>
> > > replaced them all with the different hardcoded placeholder characters
>
> >
>
> > > 'a' to 'i'. Here are nine vim invocations for each of them:
>
> >
>
> > > (I'm using ○ (digraph 0m) as multibyte fillchar in all invocations and
>
> >
>
> > > 〇 (digraph 0_) als a double-width character)
>
> >
>
> > >
>
> >
>
> > > [a] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%2.2(X〇%)E"
>
> >
>
> > > [b] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%-1(%)E"
>
> >
>
> > > [c] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%1(%)E"
>
> >
>
> > > [d] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%4PE"
>
> >
>
> > > [e] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%{'A\ B'}E"
>
> >
>
> > > [f] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%-4PE"
>
> >
>
> > > [g] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S234567890〇%<1"
>
> >
>
> > > [h] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S〇123456789E"
>
> >
>
> > > [i] vim -u NONE -c "set ls=2 fcs=stl:○ stl=S%=E"
>
> >
>
> > >
>
> >
>
> > > The binary resulting from patch 1 shows these statuslines respectively:
>
> >
>
> > > (in a terminal that is exactly 12 characters wide)
>
> >
>
> > >
>
> >
>
> > > [a] S<aE○○○○○○○○
>
> >
>
> > > [b] SbE○○○○○○○○○
>
> >
>
> > > [c] ScE○○○○○○○○○
>
> >
>
> > > [d] SdAllE○○○○○○
>
> >
>
> > > [e] SAeBE○○○○○○○
>
> >
>
> > > [f] SAllfE○○○○○○
>
> >
>
> > > [g] S234567890>
>
> >
>
> > > [h] <123456789Eh
>
> >
>
> > > [i] SiiiiiiiiiiE
>
> >
>
> > >
>
> >
>
> > > Note that (almost) every statusline contains the corresponding
>
> >
>
> > > hardcoded 'fillchar' placeholder. Except the 'g' is missing for
>
> >
>
> > > invocation [g]. I believe the reason for that is a bug that I fixed in
>
> >
>
> > > `2_fix_fillchar_g.patch`. The new binary shows the expected result:
>
> >
>
> > >
>
> >
>
> > > [a] S<aE○○○○○○○○
>
> >
>
> > > [b] SbE○○○○○○○○○
>
> >
>
> > > [c] ScE○○○○○○○○○
>
> >
>
> > > [d] SdAllE○○○○○○
>
> >
>
> > > [e] SAeBE○○○○○○○
>
> >
>
> > > [f] SAllfE○○○○○○
>
> >
>
> > > [g] S234567890g>
>
> >
>
> > > [h] <123456789Eh
>
> >
>
> > > [i] SiiiiiiiiiiE
>
> >
>
> > >
>
> >
>
> > > Now in `3_use_multibyte.patch` I finally added support for multibyte
>
> >
>
> > > support for all these fillchars:
>
> >
>
> > >
>
> >
>
> > > [a] S<○E○○○○○○○○
>
> >
>
> > > [b] S○E○○○○○○○○○
>
> >
>
> > > [c] S○E○○○○○○○○○
>
> >
>
> > > [d] S○AllE○○○○○○
>
> >
>
> > > [e] SA○BE○○○○○○○
>
> >
>
> > > [f] SAll○E○○○○○○
>
> >
>
> > > [g] S234567890○>
>
> >
>
> > > [h] <123456789E○
>
> >
>
> > > [i] S○○○○○○○○○○E
>
> >
>
> > >
>
> >
>
> > > Every former fillchar placeholder is now replaced by the real
>
> >
>
> > > multibyte fillchar.
>
> >
>
> > >
>
> >
>
> > > Bonus: As I recognized a pattern that repeated itself several times, I
>
> >
>
> > > extracted a macro `MB_CHAR2BYTES` to simplify matters in
>
> >
>
> > > `4_add_macro.patch`. I'm not sure about this name regarding the
>
> >
>
> > > advancing side effect, though. This could obviously be renamed.
>
> >
>
> > > Another possibility would be to remove the side effect and add `b +=
>
> >
>
> > > MB_CHAR2LEN(fillchar);` on the caller sites.
>
> >
>
> > >
>
> >
>
> > > I'm also not quite sure if the case [h] is fully tested by my
>
> >
>
> > > invocation. There is some code moving the subsequent items in memory,
>
> >
>
> > > but I wasn't able to find a 'statusline', where the fillchar was
>
> >
>
> > > somewhere in the middle of the statusline. So I didn't really
>
> >
>
> > > understand the intention of that logic and I might broke that part. If
>
> >
>
> > > someone knows a 'statusline' option where my implementation breaks
>
> >
>
> > > expected behaviour, I would be happy to fix it.
>
> >
>
> > >
>
> >
>
> > > If there are any other issues, please let me know. Thank you!
>
> >
>
> >
>
> >
>
> > Thanks. I added the patch to the todo list.
>
> >
>
> >
>
> >
>
> > Note that instead of testing this manually, it should be possible to use
>
> >
>
> > screenchar() and write an automated test with that. Would be very
>
> >
>
> > useful, as most of the statusline stuff is untested.
>
> >
>
> >
>
> >
>
> >
>
> >
>
> > --
>
> >
>
> > ARTHUR: No, hang on! Just answer the five questions ...
>
> >
>
> > GALAHAD: Three questions ...
>
> >
>
> > ARTHUR: Three questions ... And we shall watch ... and pray.
>
> >
>
> > "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES
> > LTD
>
> >
>
> >
>
> >
>
> > /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
>
> >
>
> > /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
>
> >
>
> > \\\ an exciting new programming language -- http://www.Zimbu.org ///
>
> >
>
> > \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
>
>
>
> I'v been using this patch for some months now and I'm starting to get merge
> conflicts while migrating it on top of recent upstream patches.
>
>
>
> I've written some tests, but I wasn't able to integrate it into the test
> suite, because every time I wanted to split windows the `dotest` function
> seemed to be triggered again. (I need splits to get the correct status line
> width of 12 characters.)
>
>
>
> The attached test `statusline.in` creates a windows layout and sets each of
> my previously described test values for the 'statusline' option. Each time
> the complete statusline is written to the `statusline.out` file. I invoked
> the test like this:
>
>
>
> vim -u NONE -S statusline.in
>
>
>
> For the current Vim version this file looks like this (file `statusline.out`):
>
>
>
> S<-E○○○○○○○○
>
> S-E○○○○○○○○○
>
> S-E○○○○○○○○○
>
> S-BotE○○○○○○
>
> SABE○○○○○○○○
>
> SBot-E○○○○○○
>
> S234567890>○
>
> <123456789E-
>
> S----------E
>
>
>
> For my local version with the statusline patches it looks like this (file
> `statusline.ok`):
>
>
>
> S<○E○○○○○○○○
>
> S○E○○○○○○○○○
>
> S○E○○○○○○○○○
>
> S○BotE○○○○○○
>
> SABE○○○○○○○○
>
> SBot○E○○○○○○
>
> S234567890○>
>
> <123456789E○
>
> S○○○○○○○○○○E
>
>
>
> Could this be added to the test suite so we can get the multibyte fillchars
> statusline upstream?
>
>
>
> Thank you!
Small update: Fixed space escaping in test line 5. New fifth lines in
`statuslineout` and `statusline.ok` respectively:
SA-BE○○○○○○○
SA○BE○○○○○○○
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.
statusline.in
Description: Binary data
statusline.ok
Description: Binary data
statusline.out
Description: Binary data
