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

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

Expand Messages
  • Bram Moolenaar
    Mar 1, 2009
    • 0 Attachment
      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
      -~----------~----~----~----~------~----~------~--~---
    • Show all 13 messages in this topic