use of memmove in del_char()
bugfix: added text is now properly displayed after having erased characters in getstring()
This commit is contained in:
parent
eb2992e872
commit
a4facb3687
24
src/utils.c
24
src/utils.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: utils.c,v 1.27 2007/04/04 19:42:43 culot Exp $ */
|
/* $calcurse: utils.c,v 1.28 2007/05/06 13:27:51 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -120,10 +120,11 @@ print_in_middle(WINDOW * win, int starty, int startx, int width, char *string)
|
|||||||
/* Delete a character at the given position in string. */
|
/* Delete a character at the given position in string. */
|
||||||
void del_char(int pos, char *str)
|
void del_char(int pos, char *str)
|
||||||
{
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
str += pos;
|
str += pos;
|
||||||
for (; *str; ++str)
|
len = strlen(str) + 1;
|
||||||
*str = *(str + 1);
|
memmove(str, str + 1, len);
|
||||||
*str = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a character at the given position in string. */
|
/* Add a character at the given position in string. */
|
||||||
@ -195,7 +196,8 @@ getstring(WINDOW *win, char *str, int l, int x, int y)
|
|||||||
|
|
||||||
orig = str;
|
orig = str;
|
||||||
custom_apply_attr(win, ATTR_HIGHEST);
|
custom_apply_attr(win, ATTR_HIGHEST);
|
||||||
for (; *str; ++str, ++len);
|
for (; *str; ++str, ++len)
|
||||||
|
;
|
||||||
newpos = x + len;
|
newpos = x + len;
|
||||||
showstring(win, y, x, orig, len, newpos);
|
showstring(win, y, x, orig, len, newpos);
|
||||||
|
|
||||||
@ -243,22 +245,26 @@ getstring(WINDOW *win, char *str, int l, int x, int y)
|
|||||||
|
|
||||||
case KEY_LEFT: /* move one char backward */
|
case KEY_LEFT: /* move one char backward */
|
||||||
case CTRL('B'):
|
case CTRL('B'):
|
||||||
if (newpos > x) newpos--;
|
if (newpos > x)
|
||||||
|
newpos--;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_RIGHT: /* move one char forward */
|
case KEY_RIGHT: /* move one char forward */
|
||||||
case CTRL('F'):
|
case CTRL('F'):
|
||||||
if (newpos < len) newpos++;
|
if (newpos < len)
|
||||||
|
newpos++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ESCAPE: /* cancel editing */
|
case ESCAPE: /* cancel editing */
|
||||||
return GETSTRING_ESC;
|
return (GETSTRING_ESC);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: /* insert one character */
|
default: /* insert one character */
|
||||||
if (len < l - 1) {
|
if (len < l - 1) {
|
||||||
if (newpos >= len)
|
if (newpos >= len) {
|
||||||
|
str = orig + newpos;
|
||||||
*str++ = ch;
|
*str++ = ch;
|
||||||
|
}
|
||||||
else // char is to be inserted inside string
|
else // char is to be inserted inside string
|
||||||
str = add_char(newpos, ch, orig);
|
str = add_char(newpos, ch, orig);
|
||||||
++len; ++newpos;
|
++len; ++newpos;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user