|
@@ -67,18 +67,19 @@ bool_t tinyrl_key_end_of_line(tinyrl_t *tinyrl, unsigned char key)
|
|
|
|
|
|
bool_t tinyrl_key_kill(tinyrl_t *tinyrl, unsigned char key)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
- lub_string_free(tinyrl->kill_string);
|
|
|
+
|
|
|
+ faux_str_free(tinyrl->buffer);
|
|
|
+ tinyrl->buffer = NULL;
|
|
|
|
|
|
-
|
|
|
- tinyrl->kill_string = lub_string_dup(&tinyrl->buffer[tinyrl->point]);
|
|
|
+
|
|
|
+ if (tinyrl->line.pos == tinyrl->line.len)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+ tinyrl->buffer = faux_str_dup(tinyrl->line.str + tinyrl->line.pos);
|
|
|
+
|
|
|
+ tinyrl_line_delete(tinyrl, tinyrl->line.pos, tinyrl->line.len);
|
|
|
|
|
|
-
|
|
|
- tinyrl_delete_text(tinyrl, tinyrl->point, tinyrl->end);
|
|
|
-*/
|
|
|
|
|
|
- tinyrl = tinyrl;
|
|
|
key = key;
|
|
|
|
|
|
return BOOL_TRUE;
|
|
@@ -87,18 +88,15 @@ bool_t tinyrl_key_kill(tinyrl_t *tinyrl, unsigned char key)
|
|
|
|
|
|
bool_t tinyrl_key_yank(tinyrl_t *tinyrl, unsigned char key)
|
|
|
{
|
|
|
- bool_t result = BOOL_FALSE;
|
|
|
-
|
|
|
- if (tinyrl->kill_string) {
|
|
|
-
|
|
|
- result = tinyrl_insert_text(tinyrl, tinyrl->kill_string);
|
|
|
- }
|
|
|
-*/
|
|
|
+ if (!tinyrl->buffer)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+ tinyrl_line_insert(tinyrl, tinyrl->buffer, strlen(tinyrl->buffer));
|
|
|
+
|
|
|
|
|
|
- tinyrl = tinyrl;
|
|
|
key = key;
|
|
|
|
|
|
- return result;
|
|
|
+ return BOOL_TRUE;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -233,23 +231,45 @@ bool_t tinyrl_key_delete(tinyrl_t *tinyrl, unsigned char key)
|
|
|
|
|
|
bool_t tinyrl_key_backword(tinyrl_t *tinyrl, unsigned char key)
|
|
|
{
|
|
|
- bool_t result = BOOL_FALSE;
|
|
|
-
|
|
|
-
|
|
|
- while (tinyrl->point > 0 && isspace(tinyrl->line[tinyrl->point - 1]))
|
|
|
- tinyrl_key_backspace(tinyrl, KEY_BS);
|
|
|
-
|
|
|
-
|
|
|
- while (tinyrl->point > 0 && !isspace(tinyrl->line[tinyrl->point - 1]))
|
|
|
- tinyrl_key_backspace(tinyrl, KEY_BS);
|
|
|
-
|
|
|
- result = BOOL_TRUE;
|
|
|
-*/
|
|
|
+ size_t new_pos = tinyrl->line.pos;
|
|
|
+
|
|
|
+
|
|
|
+ faux_str_free(tinyrl->buffer);
|
|
|
+ tinyrl->buffer = NULL;
|
|
|
+
|
|
|
+ if (tinyrl->line.pos == 0)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+
|
|
|
+ while (new_pos > 0) {
|
|
|
+ size_t prev_pos = tinyrl->utf8 ?
|
|
|
+ utf8_move_left(tinyrl->line.str, new_pos) : (new_pos - 1);
|
|
|
+ if (!isspace(tinyrl->line.str[prev_pos]))
|
|
|
+ break;
|
|
|
+ new_pos = prev_pos;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ while (new_pos > 0) {
|
|
|
+ size_t prev_pos = tinyrl->utf8 ?
|
|
|
+ utf8_move_left(tinyrl->line.str, new_pos) : (new_pos - 1);
|
|
|
+ if (isspace(tinyrl->line.str[prev_pos]))
|
|
|
+ break;
|
|
|
+ new_pos = prev_pos;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (new_pos == tinyrl->line.pos)
|
|
|
+ return BOOL_TRUE;
|
|
|
+
|
|
|
+
|
|
|
+ tinyrl->buffer = faux_str_dupn(tinyrl->line.str + new_pos,
|
|
|
+ tinyrl->line.pos - new_pos);
|
|
|
+ tinyrl_line_delete(tinyrl, new_pos, tinyrl->line.pos - new_pos);
|
|
|
+
|
|
|
|
|
|
- tinyrl = tinyrl;
|
|
|
key = key;
|
|
|
|
|
|
- return result;
|
|
|
+ return BOOL_TRUE;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -267,58 +287,31 @@ bool_t tinyrl_key_clear_screen(tinyrl_t *tinyrl, unsigned char key)
|
|
|
|
|
|
bool_t tinyrl_key_erase_line(tinyrl_t *tinyrl, unsigned char key)
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
+ faux_str_free(tinyrl->buffer);
|
|
|
+ tinyrl->buffer = NULL;
|
|
|
|
|
|
-
|
|
|
- lub_string_free(tinyrl->kill_string);
|
|
|
-
|
|
|
- if (!tinyrl->point) {
|
|
|
- tinyrl->kill_string = NULL;
|
|
|
+
|
|
|
+ if (tinyrl->line.len == 0)
|
|
|
return BOOL_TRUE;
|
|
|
- }
|
|
|
-
|
|
|
- end = tinyrl->point - 1;
|
|
|
-
|
|
|
-
|
|
|
- tinyrl->kill_string = malloc(tinyrl->point + 1);
|
|
|
- memcpy(tinyrl->kill_string, tinyrl->buffer, tinyrl->point);
|
|
|
- tinyrl->kill_string[tinyrl->point] = '\0';
|
|
|
+
|
|
|
+ tinyrl->buffer = faux_str_dup(tinyrl->line.str);
|
|
|
+
|
|
|
+ tinyrl_line_delete(tinyrl, 0, tinyrl->line.len);
|
|
|
|
|
|
-
|
|
|
- tinyrl_delete_text(tinyrl, 0, end);
|
|
|
- tinyrl->point = 0;
|
|
|
-*/
|
|
|
|
|
|
- tinyrl = tinyrl;
|
|
|
key = key;
|
|
|
|
|
|
return BOOL_TRUE;
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
bool_t tinyrl_key_tab(tinyrl_t *tinyrl, unsigned char key)
|
|
|
{
|
|
|
- bool_t result = BOOL_FALSE;
|
|
|
-
|
|
|
- tinyrl_match_e status = tinyrl_complete_with_extensions(tinyrl);
|
|
|
-
|
|
|
- switch (status) {
|
|
|
- case TINYRL_COMPLETED_MATCH:
|
|
|
- case TINYRL_MATCH:
|
|
|
-
|
|
|
- result = tinyrl_insert_text(tinyrl, " ");
|
|
|
- break;
|
|
|
- case TINYRL_NO_MATCH:
|
|
|
- case TINYRL_MATCH_WITH_EXTENSIONS:
|
|
|
- case TINYRL_AMBIGUOUS:
|
|
|
- case TINYRL_COMPLETED_AMBIGUOUS:
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
-*/
|
|
|
|
|
|
tinyrl = tinyrl;
|
|
|
key = key;
|
|
|
|
|
|
- return result;
|
|
|
+ return BOOL_TRUE;
|
|
|
}
|