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

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

Expand Messages
  • Yasuhiro Matsumoto
    ... 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
    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".

      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.

      []()()[]
      ()()()
      []()()[]
    • Yasuhiro Matsumoto
      ... Hmm? it is difference that area of yank and area of delete. which is correctly?
      Message 2 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 3 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 4 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 5 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 6 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.