summaryrefslogtreecommitdiffstats
path: root/linenoise
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-04-04 20:10:53 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-04-04 20:10:53 -0700
commitc23f91464c4b68fb0190a8f395f302ab9f1e451d (patch)
tree7e9782ce94f39e78129c7ecddef8af6401c857be /linenoise
parentd6a92ee6cc6425dbcea2862dccd97f04a80d29f5 (diff)
downloadtxr-c23f91464c4b68fb0190a8f395f302ab9f1e451d.tar.gz
txr-c23f91464c4b68fb0190a8f395f302ab9f1e451d.tar.bz2
txr-c23f91464c4b68fb0190a8f395f302ab9f1e451d.zip
linenoise: support forcing of noninteractive mode.
* linenoise/linenoise.c (struct lino_state): New member, noninteractive. (lino_set_noninteractive, lino_get_noninteractive): New functions. (linenoise): Check noninteractive flag; if set, treat the situation like !isatty(ls->ifd). * linenoise/linenoise.h (lino_set_noninteractive, lino_get_noninteractive): Delared.
Diffstat (limited to 'linenoise')
-rw-r--r--linenoise/linenoise.c13
-rw-r--r--linenoise/linenoise.h2
2 files changed, 14 insertions, 1 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c
index 90fd1529..1209816a 100644
--- a/linenoise/linenoise.c
+++ b/linenoise/linenoise.c
@@ -124,6 +124,7 @@ struct lino_state {
int need_refresh; /* Need refresh. */
int selmode; /* Visual selection being made. */
int selinclusive; /* Selections include character right of endpoint. */
+ int noninteractive; /* No character editing, even if input is tty. */
struct lino_undo *undo_stack;
lino_error_t error; /* Most recent error. */
};
@@ -174,6 +175,16 @@ int lino_get_selinculsive(lino_t *ls)
return ls->selinclusive;
}
+void lino_set_noninteractive(lino_t *ls, int ni)
+{
+ ls->noninteractive = ni;
+}
+
+int lino_get_noninteractive(lino_t *ls)
+{
+ return ls->noninteractive;
+}
+
void lino_set_atom_cb(lino_t *l, lino_atom_cb_t *cb, void *ctx)
{
l->atom_callback = cb;
@@ -2186,7 +2197,7 @@ char *linenoise(lino_t *ls, const char *prompt)
{
int count;
- if (ls->ifs || !isatty(ls->ifd)) {
+ if (ls->ifs || ls->noninteractive || !isatty(ls->ifd)) {
if (!ls->ifs) {
int fd = dup(ls->ifd);
FILE *fi = (fd > 0) ? fdopen(fd, "r") : 0;
diff --git a/linenoise/linenoise.h b/linenoise/linenoise.h
index 454523a9..28b304a4 100644
--- a/linenoise/linenoise.h
+++ b/linenoise/linenoise.h
@@ -75,6 +75,8 @@ void lino_set_multiline(lino_t *, int ml);
int lino_get_multiline(lino_t *);
void lino_set_selinclusive(lino_t *, int si);
int lino_get_selinculsive(lino_t *);
+void lino_set_noninteractive(lino_t *, int ni);
+int lino_get_noninteractive(lino_t *);
typedef char *lino_atom_cb_t(lino_t *, const char *line, int n, void *ctx);
void lino_set_atom_cb(lino_t *, lino_atom_cb_t *, void *ctx);