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

Re: Mindtuning: Cursor vs. lCursor vs. CursorIM?

Expand Messages
  • Bram Moolenaar
    ... OK, so this is just about the cursor color. I thought the intention was to fix something else. ... The alternative would be to have the cursor color also
    Message 1 of 13 , Mar 1, 2009
      Dominique Pelle wrote:

      > >> > John Little wrote:
      > >> >
      > >> >> On Feb 28, 6:53am, Kenneth Reid Beesley wrote:
      > >> >>
      > >> >>> But :help lCursor =A0returned no information.
      > >> >>
      > >> >> BTW, You could have tried
      > >> >>
      > >> >> :helpgrep lCursor
      > >> >>
      > >> >> Regards, John
      > >> >
      > >> > Yes, ":helpgrep lCursor" gives a few hints. But still,
      > >> > lCursor deserves a tag I think to make ":help lCursor"
      > >> > work. I did not know about lCursor until today, it's useful.
      > >> >
      > >> > I wonder whether this is a bug though:
      > >> >
      > >> > $ gvim -u NONE -U NONE
      > >> >
      > >> > :hi Cursor guibg=3D#ff0000 =A0 =A0 =A0" red cursor
      > >> > :hi lCursor guibg=3D#00ff00 =A0 =A0 " green cursor when keymap activat=
      > ed
      > >> >
      > >> > :set imcursor?
      > >> > iminsert=3D2 =A0 =A0 =A0" OK, expected
      > >> >
      > >> > :set keymap=3Desperanto =A0" or any other keymap
      > >> > :set iminsert?
      > >> > iminsert=3D1 =A0 =A0 =A0" OK, expected
      > >> >
      > >> > :set keymap=3D
      > >> > :set iminsert?
      > >> > iminsert=3D1 =A0 =A0 =A0" Hmmm, shouldn't this be back to 2???
      > >> >
      > >> > lCursor is nice so that cursor color changes aspect when a
      > >> > keymap is being activated. But if I cancel the keymap with
      > >> > ":set keymap=3D" then cursor remains in the same color
      > >> > (green, lCursor) as if there was still a keymap activated.
      > >> > It seems to me that the cursor should then become red
      > >> > (Cursor). I can work around with ":set imcursor=3D2" which
      > >> > puts back the cursor in red (Cursor).
      > >> >
      > >> > In ":help iminsert" I see:
      > >> >
      > >> > =A0 =A0Specifies whether :lmap or an Input Method (IM) is to be used i=
      > n
      > >> > =A0 =A0Insert mode. Valid values:
      > >> > =A0 =A0 =A0 =A00 =A0 =A0:lmap is off and IM is off
      > >> > =A0 =A0 =A0 =A01 =A0 =A0:lmap is ON and IM is off
      > >> > =A0 =A0 =A0 =A02 =A0 =A0:lmap is off and IM is ON
      > >> >
      > >> > I'm using vim-7.2.127 (huge), GUI GTK2 on Linux x86.
      > >> >
      > >> > -- Dominique
      > >>
      > >>
      > >> Attached patch fixes the problem I described in my previous
      > >> email: it makes the cursor go back to normal color (Cursor
      > >> instead of lCursor) when cancelling keymaps with ":set keymap=3D".
      > >>
      > >> Please review it since I must admit I don't fully understand
      > >> how 'iminsert' and 'imsearch' are supposed to work...
      > >
      > > Does this have any real effect? =A0If 'iminsert' is set to use lmap's
      > > (value is 1), but there are none, it works the same way as setting
      > > 'iminsert' off (value 0), right?
      >
      >
      > I'm not 100% sure I understand the question. If 'iminsert' is value 1,
      > then cursor has color "lCursor" regardless of whether there are keymaps
      > or not.
      >
      > Problem happens in gVim only since lCursor only matters in GUI.

      OK, so this is just about the cursor color. I thought the intention was
      to fix something else.

      > The following test case illustrates the problem:
      >
      > $ gvim -u NONE -U NONE
      >
      > :hi Cursor guibg=#ff0000 " red cursor
      > :hi lCursor guibg=#00ff00 " green cursor when keymap activated
      >
      > :set keymap=esperanto " or any other keymap
      >
      > :" type something in INSERT mode (Cursor should be green)
      > icxgx<Esc>
      >
      > :" disable keymaps
      > :set keymap=
      >
      > :" type something in INSERT mode again.
      > :" Observe that cursor is still green (I would expect it to be red)
      > icxgx<Esc>
      >
      > With proposed patch, the cursor is read (as I'd expect)
      > in INSERT mode after disabling keymaps with ":set keymap="
      >
      > Without patch, the workaround to have proper cursor color
      > when disabling keymaps is to do...
      >
      > :set iminsert=0 imsearch=0 keymap=

      The alternative would be to have the cursor color also take into account
      if any keymappings are defined. But that's getting complicated.

      I think the code should check that 'iminsert' and 'imsearch' are
      actually at the B_IMODE_LMAP value. Otherwise this doesn't work:

      :set iminsert=2 keymap=

      New patch:


      *** ../vim-7.2.128/src/option.c Sat Feb 21 20:27:00 2009
      --- src/option.c Sun Mar 1 23:15:21 2009
      ***************
      *** 5797,5810 ****
      /* load or unload key mapping tables */
      errmsg = keymap_init();

      ! /* When successfully installed a new keymap switch on using it. */
      ! if (*curbuf->b_p_keymap != NUL && errmsg == NULL)
      {
      ! curbuf->b_p_iminsert = B_IMODE_LMAP;
      ! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
      ! curbuf->b_p_imsearch = B_IMODE_LMAP;
      ! set_iminsert_global();
      ! set_imsearch_global();
      # ifdef FEAT_WINDOWS
      status_redraw_curbuf();
      # endif
      --- 5797,5824 ----
      /* load or unload key mapping tables */
      errmsg = keymap_init();

      ! if (errmsg == NULL)
      {
      ! if (*curbuf->b_p_keymap != NUL)
      ! {
      ! /* Installed a new keymap, switch on using it. */
      ! curbuf->b_p_iminsert = B_IMODE_LMAP;
      ! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
      ! curbuf->b_p_imsearch = B_IMODE_LMAP;
      ! }
      ! else
      ! {
      ! /* Cleared the keyamp, may reset 'iminsert' and 'imsearch'. */
      ! if (curbuf->b_p_iminsert == B_IMODE_LMAP)
      ! curbuf->b_p_iminsert = B_IMODE_NONE;
      ! if (curbuf->b_p_imsearch == B_IMODE_LMAP)
      ! curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
      ! }
      ! if ((opt_flags & OPT_LOCAL) == 0)
      ! {
      ! set_iminsert_global();
      ! set_imsearch_global();
      ! }
      # ifdef FEAT_WINDOWS
      status_redraw_curbuf();
      # endif


      --
      hundred-and-one symptoms of being an internet addict:
      143. You dream in pallettes of 216 websafe colors.

      /// 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_use" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    • Tony Mechelynck
      On 01/03/09 23:59, Bram Moolenaar wrote: [...] ... [...] I notice it includes the patch I ve been testing, about not setting iminsert globally when using
      Message 2 of 13 , Mar 2, 2009
        On 01/03/09 23:59, Bram Moolenaar wrote:
        [...]
        > I think the code should check that 'iminsert' and 'imsearch' are
        > actually at the B_IMODE_LMAP value. Otherwise this doesn't work:
        >
        > :set iminsert=2 keymap=
        >
        > New patch:
        [...]

        I notice it includes the patch I've been testing, about not setting
        'iminsert' globally when using ":setlocal keymap=...". I'm not going to
        test this one, but if I were, I would first reverse that other one (and
        when it becomes official, I will) before applying this new one. If
        anyone has (like me) been testing Bram's option.c patch published a few
        days ago about keymap/imi: people, heed my warning.


        Best regards,
        Tony.
        --
        Real software engineers don't debug programs, they verify correctness.
        This process doesn't necessarily involve execution of anything on a
        computer, except perhaps a Correctness Verification Aid package.

        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_use" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      • Dominique Pelle
        ... I tried the proposed patch. It looks OK. Just a minor typo to report in the comment: keyamp - keymap Thanks! -- Dominique
        Message 3 of 13 , Mar 3, 2009
          2009/3/1 Bram Moolenaar <Bram@...>:
          >
          > Dominique Pelle wrote:
          >
          >> >> > John Little wrote:
          >> >> >
          >> >> >> On Feb 28, 6:53am, Kenneth Reid Beesley wrote:
          >> >> >>
          >> >> >>> But :help lCursor =A0returned no information.
          >> >> >>
          >> >> >> BTW, You could have tried
          >> >> >>
          >> >> >> :helpgrep lCursor
          >> >> >>
          >> >> >> Regards, John
          >> >> >
          >> >> > Yes, ":helpgrep lCursor" gives a few hints. But still,
          >> >> > lCursor deserves a tag I think to make ":help lCursor"
          >> >> > work. I did not know about lCursor until today, it's useful.
          >> >> >
          >> >> > I wonder whether this is a bug though:
          >> >> >
          >> >> > $ gvim -u NONE -U NONE
          >> >> >
          >> >> > :hi Cursor guibg=3D#ff0000 =A0 =A0 =A0" red cursor
          >> >> > :hi lCursor guibg=3D#00ff00 =A0 =A0 " green cursor when keymap activat=
          >> ed
          >> >> >
          >> >> > :set imcursor?
          >> >> > iminsert=3D2 =A0 =A0 =A0" OK, expected
          >> >> >
          >> >> > :set keymap=3Desperanto =A0" or any other keymap
          >> >> > :set iminsert?
          >> >> > iminsert=3D1 =A0 =A0 =A0" OK, expected
          >> >> >
          >> >> > :set keymap=3D
          >> >> > :set iminsert?
          >> >> > iminsert=3D1 =A0 =A0 =A0" Hmmm, shouldn't this be back to 2???
          >> >> >
          >> >> > lCursor is nice so that cursor color changes aspect when a
          >> >> > keymap is being activated. But if I cancel the keymap with
          >> >> > ":set keymap=3D" then cursor remains in the same color
          >> >> > (green, lCursor) as if there was still a keymap activated.
          >> >> > It seems to me that the cursor should then become red
          >> >> > (Cursor). I can work around with ":set imcursor=3D2" which
          >> >> > puts back the cursor in red (Cursor).
          >> >> >
          >> >> > In ":help iminsert" I see:
          >> >> >
          >> >> > =A0 =A0Specifies whether :lmap or an Input Method (IM) is to be used i=
          >> n
          >> >> > =A0 =A0Insert mode. Valid values:
          >> >> > =A0 =A0 =A0 =A00 =A0 =A0:lmap is off and IM is off
          >> >> > =A0 =A0 =A0 =A01 =A0 =A0:lmap is ON and IM is off
          >> >> > =A0 =A0 =A0 =A02 =A0 =A0:lmap is off and IM is ON
          >> >> >
          >> >> > I'm using vim-7.2.127 (huge), GUI GTK2 on Linux x86.
          >> >> >
          >> >> > -- Dominique
          >> >>
          >> >>
          >> >> Attached patch fixes the problem I described in my previous
          >> >> email: it makes the cursor go back to normal color (Cursor
          >> >> instead of lCursor) when cancelling keymaps with ":set keymap=3D".
          >> >>
          >> >> Please review it since I must admit I don't fully understand
          >> >> how 'iminsert' and 'imsearch' are supposed to work...
          >> >
          >> > Does this have any real effect? =A0If 'iminsert' is set to use lmap's
          >> > (value is 1), but there are none, it works the same way as setting
          >> > 'iminsert' off (value 0), right?
          >>
          >>
          >> I'm not 100% sure I understand the question.  If 'iminsert' is value 1,
          >> then cursor has color "lCursor" regardless of whether there are keymaps
          >> or not.
          >>
          >> Problem happens in gVim only since lCursor only matters in GUI.
          >
          > OK, so this is just about the cursor color.  I thought the intention was
          > to fix something else.
          >
          >> The following test case illustrates the problem:
          >>
          >> $ gvim -u NONE -U NONE
          >>
          >> :hi Cursor guibg=#ff0000           " red cursor
          >> :hi lCursor guibg=#00ff00          " green cursor when keymap activated
          >>
          >> :set keymap=esperanto   " or any other keymap
          >>
          >> :" type something in INSERT mode (Cursor should be green)
          >> icxgx<Esc>
          >>
          >> :" disable keymaps
          >> :set keymap=
          >>
          >> :" type something in INSERT mode again.
          >> :" Observe that cursor is still green (I would expect it to be red)
          >> icxgx<Esc>
          >>
          >> With proposed patch, the cursor is read (as I'd expect)
          >> in INSERT mode after disabling keymaps with ":set keymap="
          >>
          >> Without patch, the workaround to have proper cursor color
          >> when disabling keymaps is to do...
          >>
          >>   :set iminsert=0 imsearch=0 keymap=
          >
          > The alternative would be to have the cursor color also take into account
          > if any keymappings are defined.  But that's getting complicated.
          >
          > I think the code should check that 'iminsert' and 'imsearch' are
          > actually at the B_IMODE_LMAP value.  Otherwise this doesn't work:
          >
          >        :set iminsert=2 keymap=
          >
          > New patch:
          >
          >
          > *** ../vim-7.2.128/src/option.c Sat Feb 21 20:27:00 2009
          > --- src/option.c        Sun Mar  1 23:15:21 2009
          > ***************
          > *** 5797,5810 ****
          >        /* load or unload key mapping tables */
          >        errmsg = keymap_init();
          >
          > !       /* When successfully installed a new keymap switch on using it. */
          > !       if (*curbuf->b_p_keymap != NUL && errmsg == NULL)
          >        {
          > !           curbuf->b_p_iminsert = B_IMODE_LMAP;
          > !           if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
          > !               curbuf->b_p_imsearch = B_IMODE_LMAP;
          > !           set_iminsert_global();
          > !           set_imsearch_global();
          >  # ifdef FEAT_WINDOWS
          >            status_redraw_curbuf();
          >  # endif
          > --- 5797,5824 ----
          >        /* load or unload key mapping tables */
          >        errmsg = keymap_init();
          >
          > !       if (errmsg == NULL)
          >        {
          > !           if (*curbuf->b_p_keymap != NUL)
          > !           {
          > !               /* Installed a new keymap, switch on using it. */
          > !               curbuf->b_p_iminsert = B_IMODE_LMAP;
          > !               if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT)
          > !                   curbuf->b_p_imsearch = B_IMODE_LMAP;
          > !           }
          > !           else
          > !           {
          > !               /* Cleared the keyamp, may reset 'iminsert' and 'imsearch'. */
          > !               if (curbuf->b_p_iminsert == B_IMODE_LMAP)
          > !                   curbuf->b_p_iminsert = B_IMODE_NONE;
          > !               if (curbuf->b_p_imsearch == B_IMODE_LMAP)
          > !                   curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
          > !           }
          > !           if ((opt_flags & OPT_LOCAL) == 0)
          > !           {
          > !               set_iminsert_global();
          > !               set_imsearch_global();
          > !           }
          >  # ifdef FEAT_WINDOWS
          >            status_redraw_curbuf();
          >  # endif
          >


          I tried the proposed patch. It looks OK.
          Just a minor typo to report in the comment: keyamp -> keymap

          Thanks!

          -- Dominique

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