Udo Richter wrote:
Klaus Schmidinger wrote:
I agree with the 'if...' part of your fix, but I don't like the 'else...' part.
If I do just
it works as I would expect it.

I know it looks a bit strange. But that way the delete key does nothing if the cursor is at the end of the string. In overwrite mode, the delete key continues to delete towards left if there are no chars on the right.

Well, in overwrite mode the delete key deletes the character "under" the
cursor. If this was the last character in the string, the cursor has
nowhere to go but to the new last character, which is the one that was
previously "before" the cursor. In insert mode, however, the delete key
deletes the character *after* the cursor. If this was the last character,
then there's nothing more to delete. Just try this in any string entry
field, for instance the "Subject" line of your email client. These are
usually always in insert mode. If you press "Del" several times it will
delete everything after the cursor, but nothing before it.

By the way, in your short form, the inner if is not necessary any more:

                     if (strlen(value) > 1) {
                        if (!insert || pos < int(strlen(value)) - 1)
memmove(value + pos, value + pos + 1, strlen(value) - pos);
+                       else if (insert && pos == int(strlen(value)) - 1)
+ // in insert mode, deleting the last character replaces it with a blank to keep the cursor position
+                          value[pos] = ' ';
// reduce position, if we removed the last character
                        if (pos == int(strlen(value)))

Thanks, this makes it even better ;-)


vdr mailing list

Reply via email to