Loading ...
Sorry, an error occurred while loading the content.
 

BUG: Many VIM warnings do not set v:warningmsg

Expand Messages
  • Ingo Karkat
    Hello VIM Developers, According to the help, v:warningmsg contains the last given warning message. I ve encountered multiple VIM warnings which do not update
    Message 1 of 6 , Feb 25, 2009
      Hello VIM Developers,

      According to the help, v:warningmsg contains the last given warning message.
      I've encountered multiple VIM warnings which do not update this variable:

      vim -N -u NONE
      :setl ro
      :normal! oFoobar
      W10: Warning: Changing a readonly file-- INSERT --
      :echo v:warningmsg

      " I would have expected that v:warningmsg now contains W10: ...
      /Foo
      search hit BOTTOM, continuing at TOP
      :echo v:warningmsg
      search hit BOTTOM, continuing at TOP
      " OK here, the wrapscan message sets v:warningmsg as expected.
      :w foo
      W10: Warning: Changing a readonly file
      :echo v:warningmsg
      search hit BOTTOM, continuing at TOP
      " v:warningmsg not set, still contains the old warning.
      :normal! oMore text
      :!echo "Changed" >> foo
      [No write since last change]
      W12: Warning: File "foo" has changed and the buffer was changed in Vim as well
      See ":help W12" for more info.
      [O]K, (L)oad File:
      :echo v:warningmsg
      search hit BOTTOM, continuing at TOP
      " It's not just W10, W12 also doesn't set v:warningmsg.

      I can reproduce this with VIM 7.2.127 on Linux and the default VIM 7.0 - 7.2 on
      Windows.

      -- regards, ingo

      --
      -- Ingo Karkat -- /^-- /^-- /^-- /^-- /^-- /^-- http://ingo-karkat.de/ --


      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    • Ingo Karkat
      ... Addendum: Here s why this bug is important (to me): I was writing a custom command that modifies the current buffer, and wanted to avoid the horrible
      Message 2 of 6 , Feb 25, 2009
        On 25-Feb-09 12:31, Ingo Karkat wrote:
        > Hello VIM Developers,
        >
        > According to the help, v:warningmsg contains the last given warning message.
        > I've encountered multiple VIM warnings which do not update this variable:
        >
        > vim -N -u NONE
        > :setl ro
        > :normal! oFoobar
        > W10: Warning: Changing a readonly file-- INSERT --
        > :echo v:warningmsg
        >
        > " I would have expected that v:warningmsg now contains W10: ...
        > /Foo
        > search hit BOTTOM, continuing at TOP
        > :echo v:warningmsg
        > search hit BOTTOM, continuing at TOP
        > " OK here, the wrapscan message sets v:warningmsg as expected.
        > :w foo
        > W10: Warning: Changing a readonly file
        > :echo v:warningmsg
        > search hit BOTTOM, continuing at TOP
        > " v:warningmsg not set, still contains the old warning.
        > :normal! oMore text
        > :!echo "Changed" >> foo
        > [No write since last change]
        > W12: Warning: File "foo" has changed and the buffer was changed in Vim as well
        > See ":help W12" for more info.
        > [O]K, (L)oad File:
        > :echo v:warningmsg
        > search hit BOTTOM, continuing at TOP
        > " It's not just W10, W12 also doesn't set v:warningmsg.
        >
        > I can reproduce this with VIM 7.2.127 on Linux and the default VIM 7.0 - 7.2 on
        > Windows.

        Addendum: Here's why this bug is important (to me):

        I was writing a custom command that modifies the current buffer, and wanted to
        avoid the horrible multi-line prompt:
        Error detected while processing function ...
        W10: Warning: Changing a readonly file
        and just print the warning / error, like the built-in commands do. So I tried this:
        function! s:MyCmd()
        let v:warningmsg = ''
        " ... Omitting commands which modify the current buffer,
        " and using :silent! {cmd}.
        if ! empty(v:warningmsg)
        echohl WarningMsg|echomsg v:warningmsg|echohl None
        endif
        endfunction
        command MyCmd call <SID>MyCmd

        Because of this bug, I ended up making a "neutral" modification before calling
        the function, so that the warning is triggered outside of a function (and thus
        does not print "Error detected while processing function ...":

        command MyCmd call setline(1,getline(1))|call <SID>MyCmd

        Does anyone know a better way to implement this (without explicitly checking &ro
        and &modifiable, which would just duplicate core VIM functionality)?

        -- regards, ingo

        --
        -- Ingo Karkat -- /^-- /^-- /^-- /^-- /^-- /^-- http://ingo-karkat.de/ --


        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_dev" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      • Bram Moolenaar
        ... I ll add it to the todo list. Note that you need to mention every message you are missing, there probably is no generic solution. -- Why is it called
        Message 3 of 6 , Feb 25, 2009
          Ingo Karkat wrote:

          > According to the help, v:warningmsg contains the last given warning message.
          > I've encountered multiple VIM warnings which do not update this variable:
          >
          > vim -N -u NONE
          > :setl ro
          > :normal! oFoobar
          > W10: Warning: Changing a readonly file-- INSERT --
          > :echo v:warningmsg
          >
          > " I would have expected that v:warningmsg now contains W10: ...
          > /Foo
          > search hit BOTTOM, continuing at TOP
          > :echo v:warningmsg
          > search hit BOTTOM, continuing at TOP
          > " OK here, the wrapscan message sets v:warningmsg as expected.
          > :w foo
          > W10: Warning: Changing a readonly file
          > :echo v:warningmsg
          > search hit BOTTOM, continuing at TOP
          > " v:warningmsg not set, still contains the old warning.
          > :normal! oMore text
          > :!echo "Changed" >> foo
          > [No write since last change]
          > W12: Warning: File "foo" has changed and the buffer was changed in Vim as well
          > See ":help W12" for more info.
          > [O]K, (L)oad File:
          > :echo v:warningmsg
          > search hit BOTTOM, continuing at TOP
          > " It's not just W10, W12 also doesn't set v:warningmsg.
          >
          > I can reproduce this with VIM 7.2.127 on Linux and the default VIM 7.0
          > - 7.2 on Windows.

          I'll add it to the todo list. Note that you need to mention every
          message you are missing, there probably is no generic solution.

          --
          Why is it called "Windows"? "Gates" would be more appropriate...

          /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
          /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
          \\\ download, build and distribute -- http://www.A-A-P.org ///
          \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

          --~--~---------~--~----~------------~-------~--~----~
          You received this message from the "vim_dev" maillist.
          For more information, visit http://www.vim.org/maillist.php
          -~----------~----~----~----~------~----~------~--~---
        • Ingo Karkat
          ... Actually, the only (!) message that sets v:warningmsg is the search hit BOTTOM, continuing at TOP (and its reverse) warning. While grepping through the
          Message 4 of 6 , Mar 3, 2009
            On 26-Feb-09 4:21, Bram Moolenaar wrote:
            > Ingo Karkat wrote:
            >> According to the help, v:warningmsg contains the last given warning message.
            >> I've encountered multiple VIM warnings which do not update this variable:
            >>
            >> vim -N -u NONE
            >> :setl ro
            >> :normal! oFoobar
            >> W10: Warning: Changing a readonly file-- INSERT --
            >> :echo v:warningmsg
            >>
            >> " I would have expected that v:warningmsg now contains W10: ...
            >> /Foo
            >> search hit BOTTOM, continuing at TOP
            >> :echo v:warningmsg
            >> search hit BOTTOM, continuing at TOP
            >> " OK here, the wrapscan message sets v:warningmsg as expected.
            >> :w foo
            >> W10: Warning: Changing a readonly file
            >> :echo v:warningmsg
            >> search hit BOTTOM, continuing at TOP
            >> " v:warningmsg not set, still contains the old warning.
            >> :normal! oMore text
            >> :!echo "Changed" >> foo
            >> [No write since last change]
            >> W12: Warning: File "foo" has changed and the buffer was changed in Vim as well
            >> See ":help W12" for more info.
            >> [O]K, (L)oad File:
            >> :echo v:warningmsg
            >> search hit BOTTOM, continuing at TOP
            >> " It's not just W10, W12 also doesn't set v:warningmsg.
            >>
            >> I can reproduce this with VIM 7.2.127 on Linux and the default VIM 7.0
            >> - 7.2 on Windows.
            >
            > I'll add it to the todo list. Note that you need to mention every
            > message you are missing, there probably is no generic solution.

            Actually, the only (!) message that sets v:warningmsg is the "search hit BOTTOM,
            continuing at TOP" (and its reverse) warning.

            While grepping through the source code, I found out that there are different
            kinds of warning: With or without highlighting, with /W\d\+:/ prefix and/or
            prefixed with "Warning:", echoed to the command line or (in some (correct)
            cases) to stderr. Many purported warnings are actually echoed as errors, BTW.
            Thus, I actually found surprisingly few warnings that should be stored in
            v:warningmsg.

            Attached patch adds the setting of v:warningmsg for:
            - W10: Warning: Changing a readonly file
            - The W11, W12, W13, W16 "file has changed" warnings
            - W17: Arabic requires UTF-8, do ':set encoding=utf-8' (just for completeness'
            sake, not sure why someone would be interested in this)

            Please review the patch, my C is a bit rusty, and I'm not well versed in the
            string types and message translation macros used in the sources.

            -- regards, ingo

            --
            -- Ingo Karkat -- /^-- /^-- /^-- /^-- /^-- /^-- http://ingo-karkat.de/ --

            --~--~---------~--~----~------------~-------~--~----~
            You received this message from the "vim_dev" maillist.
            For more information, visit http://www.vim.org/maillist.php
            -~----------~----~----~----~------~----~------~--~---
          • Bram Moolenaar
            ... Thanks for the patch. I ll look into it later. -- hundred-and-one symptoms of being an internet addict: 159. You get excited whenever discussing your hard
            Message 5 of 6 , Mar 3, 2009
              Ingo Karkat wrote:

              > On 26-Feb-09 4:21, Bram Moolenaar wrote:
              > > Ingo Karkat wrote:
              > >> According to the help, v:warningmsg contains the last given warning message.
              > >> I've encountered multiple VIM warnings which do not update this variable:
              > >>
              > >> vim -N -u NONE
              > >> :setl ro
              > >> :normal! oFoobar
              > >> W10: Warning: Changing a readonly file-- INSERT --
              > >> :echo v:warningmsg
              > >>
              > >> " I would have expected that v:warningmsg now contains W10: ...
              > >> /Foo
              > >> search hit BOTTOM, continuing at TOP
              > >> :echo v:warningmsg
              > >> search hit BOTTOM, continuing at TOP
              > >> " OK here, the wrapscan message sets v:warningmsg as expected.
              > >> :w foo
              > >> W10: Warning: Changing a readonly file
              > >> :echo v:warningmsg
              > >> search hit BOTTOM, continuing at TOP
              > >> " v:warningmsg not set, still contains the old warning.
              > >> :normal! oMore text
              > >> :!echo "Changed" >> foo
              > >> [No write since last change]
              > >> W12: Warning: File "foo" has changed and the buffer was changed in Vim as well
              > >> See ":help W12" for more info.
              > >> [O]K, (L)oad File:
              > >> :echo v:warningmsg
              > >> search hit BOTTOM, continuing at TOP
              > >> " It's not just W10, W12 also doesn't set v:warningmsg.
              > >>
              > >> I can reproduce this with VIM 7.2.127 on Linux and the default VIM 7.0
              > >> - 7.2 on Windows.
              > >
              > > I'll add it to the todo list. Note that you need to mention every
              > > message you are missing, there probably is no generic solution.
              >
              > Actually, the only (!) message that sets v:warningmsg is the "search hit BOTTOM,
              > continuing at TOP" (and its reverse) warning.
              >
              > While grepping through the source code, I found out that there are different
              > kinds of warning: With or without highlighting, with /W\d\+:/ prefix and/or
              > prefixed with "Warning:", echoed to the command line or (in some (correct)
              > cases) to stderr. Many purported warnings are actually echoed as errors, BTW.
              > Thus, I actually found surprisingly few warnings that should be stored in
              > v:warningmsg.
              >
              > Attached patch adds the setting of v:warningmsg for:
              > - W10: Warning: Changing a readonly file
              > - The W11, W12, W13, W16 "file has changed" warnings
              > - W17: Arabic requires UTF-8, do ':set encoding=utf-8' (just for completeness'
              > sake, not sure why someone would be interested in this)
              >
              > Please review the patch, my C is a bit rusty, and I'm not well versed in the
              > string types and message translation macros used in the sources.

              Thanks for the patch. I'll look into it later.

              --
              hundred-and-one symptoms of being an internet addict:
              159. You get excited whenever discussing your hard drive.

              /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
              /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
              \\\ download, build and distribute -- http://www.A-A-P.org ///
              \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

              --~--~---------~--~----~------------~-------~--~----~
              You received this message from the "vim_dev" maillist.
              For more information, visit http://www.vim.org/maillist.php
              -~----------~----~----~----~------~----~------~--~---
            • Tony Mechelynck
              On 03/03/09 16:33, Ingo Karkat wrote: [...] ... [...] maybe to prevent bug reports in case someone tried to edit Arabic with encoding set to ISO-8859-6 and
              Message 6 of 6 , Mar 4, 2009
                On 03/03/09 16:33, Ingo Karkat wrote:
                [...]
                > - W17: Arabic requires UTF-8, do ':set encoding=utf-8' (just for completeness'
                > sake, not sure why someone would be interested in this)
                [...]

                maybe to prevent bug reports in case someone tried to edit Arabic with
                'encoding' set to ISO-8859-6 and wondered why only isolated forms were
                shown?

                Best regards,
                Tony.
                --
                People will do tomorrow what they did today because that is what they
                did yesterday.

                --~--~---------~--~----~------------~-------~--~----~
                You received this message from the "vim_dev" maillist.
                For more information, visit http://www.vim.org/maillist.php
                -~----------~----~----~----~------~----~------~--~---
              Your message has been successfully submitted and would be delivered to recipients shortly.