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

Re: [60am,mb] visual selection is not drawn correctly

Expand Messages
  • Yasuhiro Matsumoto
    ... Hmm? it is difference that area of yank and area of delete. which is correctly?
    Message 1 of 9 , Jul 3, 2001
      Bram Moolenaar wrote:
      >This code to check for the start/end of a highlighting region is executed for
      >every character. It starts to look complicated now. I'll try to simplify it
      >a bit.
      >
      >Please verify that the patch below works properly. It's simpler than your
      >patch, perhaps I missed something. I verified it works correclty in UTF-8
      >text. The characters that are highlighted are the ones deleted with "d".

      Hmm?
      it is difference that area of yank and area of delete.
      which is correctly?
    • Bram Moolenaar
      ... That is the same as what I see. However, suppose one line is selected, as in 1., then press d to delete the selected text. The two characters in between
      Message 2 of 9 , Jul 3, 2001
        Yasuhiro Matsumoto wrote:

        > >Please verify that the patch below works properly. It's simpler than your
        > >patch, perhaps I missed something. I verified it works correclty in UTF-8
        > >text. The characters that are highlighted are the ones deleted with "d".
        >
        > No, your patch does not have the same function as my patch.
        >
        > if comparing like multibyte to [], and comparing like
        > selected multibyte to (),
        > below's operation is correctly.
        >
        > 1. one line vertical selection.
        >
        > start point
        > |
        > v
        > []()[][]
        > [][][]
        > []()[][]
        > ^
        > |
        > end point
        >
        > 2. two line vertical selection.
        >
        > start point
        > |
        > v
        > []()()[]
        > []()[]
        > []()()[]
        > ^
        > |
        > end point
        >
        > but your patch's selection is below.
        >
        > 1. one line vertical selection.
        >
        > []()[][]
        > ()()[]
        > []()[][]
        >
        > 2. two line vertical selection.
        >
        > []()()[]
        > ()()()
        > []()()[]

        That is the same as what I see.

        However, suppose one line is selected, as in 1., then press "d" to delete the
        selected text. The two characters in between are also deleted (two spaces
        inserted to align the text). Do you get this as well? Or is there some
        situation where this is different?

        start point
        | after deleting
        v
        []()[][] [][][]
        [][][] []
        []()[][] [][][]
        ^
        |
        end point

        Since the characters are affected, I think they should be highlighted.

        Unfortunately, when using "y" on the same text, pasting it somewhere else
        results in spaces to be inserted, thus you might argue that the two characters
        in between were not included.

        I would argue that deleting is more important here, since you need to be
        warned that "d" deletes more than what you might expect.

        --
        >From "know your smileys":
        :-H Is missing teeth

        /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
        ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
        \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
      • Yasuhiro Matsumoto
        ... * this is case of delete. start point ... v []()[][] _()()[]_ []()[][] ^ ... end point deleted text is ... start point ... v __()____ _()()___ __()____ ^
        Message 3 of 9 , Jul 3, 2001
          Bram Moolenaar wrote:
          >That is the same as what I see.
          >
          >However, suppose one line is selected, as in 1., then press "d" to delete the
          >selected text. The two characters in between are also deleted (two spaces
          >inserted to align the text). Do you get this as well? Or is there some
          >situation where this is different?
          >
          >
          >Since the characters are affected, I think they should be highlighted.
          >
          >Unfortunately, when using "y" on the same text, pasting it somewhere else
          >results in spaces to be inserted, thus you might argue that the two characters

          >in between were not included.
          >
          >I would argue that deleting is more important here, since you need to be
          >warned that "d" deletes more than what you might expect.

          -----------------------------------
          * this is case of delete.

          start point
          |
          v
          []()[][]
          _()()[]_
          []()[][]
          ^
          |
          end point

          deleted text is ...

          start point
          |
          v
          __()____
          _()()___
          __()____
          ^
          |
          end point

          -----------------------------------
          * this is case of yank.

          start point
          |
          v
          []()[][]
          _()()[]_
          []()[][]
          ^
          |
          end point

          yanked text is ...

          start point
          |
          v
          __()____
          __ ____
          __()____
          ^
          |
          end point

          -----------------------------------

          Hmm,
          Is this not actual area but the area which may influence?
          That is right if this is right.

          but do_put doesn't work correctly. X-(
          if it need inserting visual selected area and
          it located between two multibyte string,
          pasted text need shifting left.

          this is a patch.

          please check this.

          thanks.

          --
          Yasuhiro Matsumoto
        • Bram Moolenaar
          ... I think that s the best thing to do here. It s not possible to highlight half a character. It s not possible to delete or yank half a character either.
          Message 4 of 9 , Jul 4, 2001
            Yasuhiro Matsumoto wrote:

            > Hmm,
            > Is this not actual area but the area which may influence?
            > That is right if this is right.

            I think that's the best thing to do here. It's not possible to highlight half
            a character. It's not possible to delete or yank half a character either.

            > but do_put doesn't work correctly. X-(
            > if it need inserting visual selected area and
            > it located between two multibyte string,
            > pasted text need shifting left.
            >
            > this is a patch.
            >
            > please check this.

            I can see the problem with UTF-8 as well.

            I think there is some confusion of screen cells and bytes here. I'll look
            into it.

            --
            >From "know your smileys":
            @:-() Elvis Presley

            /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
            ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
            \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
          • Bram Moolenaar
            ... On further investigation I discovered this was wrong for control characters as well. When pasting halfway a ^V (or , when display is uhex ), the
            Message 5 of 9 , Jul 4, 2001
              Yasuhiro Matsumoto wrote:

              > but do_put doesn't work correctly. X-(
              > if it need inserting visual selected area and
              > it located between two multibyte string,
              > pasted text need shifting left.
              >
              > this is a patch.
              >
              > please check this.

              On further investigation I discovered this was wrong for control characters as
              well. When pasting halfway a ^V (or <16>, when 'display' is "uhex"), the
              character would be deleted.

              The patch below fixes this by only deleting the character if it is a tab. I
              think a put operation is allowed to replace a tab by spaces, to make the text
              aligned. But deleting another character is not what a user expects. The
              result is that the text after the put block is misaligned. I don't see a
              simple way to avoid that.

              *** ../dist/vim60am/src/ops.c Wed Jun 27 13:41:37 2001
              --- ops.c Wed Jul 4 15:03:55 2001
              ***************
              *** 3023,3028 ****
              --- 3023,3040 ----
              bd.startspaces = incr - bd.endspaces;
              --bd.textcol;
              delcount = 1;
              + #ifdef FEAT_MBYTE
              + if (has_mbyte)
              + bd.textcol -= (*mb_head_off)(oldp, oldp + bd.textcol);
              + #endif
              + if (oldp[bd.textcol] != TAB)
              + {
              + /* Only a Tab can be split into spaces. Other
              + * characters will have to be moved to after the
              + * block, causing misalignment. */
              + delcount = 0;
              + bd.endspaces = 0;
              + }
              }

              yanklen = (int)STRLEN(y_array[i]);

              --
              >From "know your smileys":
              :.-( Crying

              /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
              ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
              \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
            Your message has been successfully submitted and would be delivered to recipients shortly.