git.droids-corp.org
/
libcmdline.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cmdline (merge-intel): support ctrl-w in librte_cmdline
[libcmdline.git]
/
src
/
lib
/
cmdline_rdline.c
diff --git
a/src/lib/cmdline_rdline.c
b/src/lib/cmdline_rdline.c
index
44ad5ed
..
91217be
100644
(file)
--- a/
src/lib/cmdline_rdline.c
+++ b/
src/lib/cmdline_rdline.c
@@
-91,7
+91,8
@@
isblank2(char c)
return 0;
}
return 0;
}
-void rdline_init(struct rdline *rdl,
+void
+rdline_init(struct rdline *rdl,
rdline_write_char_t *write_char,
rdline_validate_t *validate,
rdline_complete_t *complete)
rdline_write_char_t *write_char,
rdline_validate_t *validate,
rdline_complete_t *complete)
@@
-134,6
+135,12
@@
rdline_stop(struct rdline *rdl)
rdl->status = RDLINE_INIT;
}
rdl->status = RDLINE_INIT;
}
+void
+rdline_quit(struct rdline *rdl)
+{
+ rdl->status = RDLINE_EXITED;
+}
+
void
rdline_restart(struct rdline *rdl)
{
void
rdline_restart(struct rdline *rdl)
{
@@
-157,22
+164,25
@@
rdline_get_buffer(struct rdline *rdl)
}
static void
}
static void
-display_right_buffer(struct rdline *rdl)
+display_right_buffer(struct rdline *rdl
, int force
)
{
unsigned int i;
char tmp;
{
unsigned int i;
char tmp;
+ if (!force && CIRBUF_IS_EMPTY(&rdl->right))
+ return;
+
rdline_puts(rdl, vt100_clear_right);
rdline_puts(rdl, vt100_clear_right);
-
if (!CIRBUF_IS_EMPTY(&rdl->right)
) {
- CIRBUF_FOREACH(&rdl->right, i, tmp) {
- rdl->write_char(rdl, tmp);
- }
+
CIRBUF_FOREACH(&rdl->right, i, tmp
) {
+ rdl->write_char(rdl, tmp);
+ }
+ if (!CIRBUF_IS_EMPTY(&rdl->right))
rdline_miniprintf(rdl, vt100_multi_left,
CIRBUF_GET_LEN(&rdl->right));
rdline_miniprintf(rdl, vt100_multi_left,
CIRBUF_GET_LEN(&rdl->right));
- }
}
}
-void rdline_redisplay(struct rdline *rdl)
+void
+rdline_redisplay(struct rdline *rdl)
{
unsigned int i;
char tmp;
{
unsigned int i;
char tmp;
@@
-183,7
+193,7
@@
void rdline_redisplay(struct rdline *rdl)
CIRBUF_FOREACH(&rdl->left, i, tmp) {
rdl->write_char(rdl, tmp);
}
CIRBUF_FOREACH(&rdl->left, i, tmp) {
rdl->write_char(rdl, tmp);
}
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 1
);
}
int
}
int
@@
-196,6
+206,8
@@
rdline_char_in(struct rdline *rdl, char c)
char *buf;
#endif
char *buf;
#endif
+ if (rdl->status == RDLINE_EXITED)
+ return RDLINE_RES_EXITED;
if (rdl->status != RDLINE_RUNNING)
return RDLINE_RES_NOT_RUNNING;
if (rdl->status != RDLINE_RUNNING)
return RDLINE_RES_NOT_RUNNING;
@@
-262,11
+274,12
@@
rdline_char_in(struct rdline *rdl, char c)
case CMDLINE_KEY_BKSPACE:
if(!cirbuf_del_tail_safe(&rdl->left)) {
rdline_puts(rdl, vt100_bs);
case CMDLINE_KEY_BKSPACE:
if(!cirbuf_del_tail_safe(&rdl->left)) {
rdline_puts(rdl, vt100_bs);
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 1
);
}
break;
case CMDLINE_KEY_META_BKSPACE:
}
break;
case CMDLINE_KEY_META_BKSPACE:
+ case CMDLINE_KEY_CTRL_W:
while (! CIRBUF_IS_EMPTY(&rdl->left) && isblank2(cirbuf_get_tail(&rdl->left))) {
rdline_puts(rdl, vt100_bs);
cirbuf_del_tail(&rdl->left);
while (! CIRBUF_IS_EMPTY(&rdl->left) && isblank2(cirbuf_get_tail(&rdl->left))) {
rdline_puts(rdl, vt100_bs);
cirbuf_del_tail(&rdl->left);
@@
-275,7
+288,7
@@
rdline_char_in(struct rdline *rdl, char c)
rdline_puts(rdl, vt100_bs);
cirbuf_del_tail(&rdl->left);
}
rdline_puts(rdl, vt100_bs);
cirbuf_del_tail(&rdl->left);
}
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 1
);
break;
case CMDLINE_KEY_SUPPR:
break;
case CMDLINE_KEY_SUPPR:
@@
-286,7
+299,7
@@
rdline_char_in(struct rdline *rdl, char c)
return RDLINE_RES_EOF;
}
if (!cirbuf_del_head_safe(&rdl->right)) {
return RDLINE_RES_EOF;
}
if (!cirbuf_del_head_safe(&rdl->right)) {
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 1
);
}
break;
}
break;
@@
-331,7
+344,7
@@
rdline_char_in(struct rdline *rdl, char c)
rdl->write_char(rdl, rdl->kill_buf[i]);
i++;
}
rdl->write_char(rdl, rdl->kill_buf[i]);
i++;
}
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 0
);
break;
#endif /* !NO_RDLINE_KILL_BUF */
break;
#endif /* !NO_RDLINE_KILL_BUF */
@@
-379,7
+392,7
@@
rdline_char_in(struct rdline *rdl, char c)
rdl->write_char(rdl, tmp_buf[i]);
i++;
}
rdl->write_char(rdl, tmp_buf[i]);
i++;
}
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 1
);
return RDLINE_RES_COMPLETE; /* ?? */
}
return RDLINE_RES_COMPLETE; /* ?? */
}
@@
-411,6
+424,9
@@
rdline_char_in(struct rdline *rdl, char c)
if (rdl->validate)
rdl->validate(rdl, rdl->left_buf, CIRBUF_GET_LEN(&rdl->left)+2);
if (rdl->validate)
rdl->validate(rdl, rdl->left_buf, CIRBUF_GET_LEN(&rdl->left)+2);
+ /* user may have stopped rdline */
+ if (rdl->status == RDLINE_EXITED)
+ return RDLINE_RES_EXITED;
return RDLINE_RES_VALIDATED;
#ifndef NO_RDLINE_HISTORY
return RDLINE_RES_VALIDATED;
#ifndef NO_RDLINE_HISTORY
@@
-471,7
+487,7
@@
rdline_char_in(struct rdline *rdl, char c)
return RDLINE_RES_SUCCESS;
rdl->write_char(rdl, c);
return RDLINE_RES_SUCCESS;
rdl->write_char(rdl, c);
- display_right_buffer(rdl);
+ display_right_buffer(rdl
, 0
);
return RDLINE_RES_SUCCESS;
}
return RDLINE_RES_SUCCESS;
}