diff --git a/include/notcurses/notcurses.h b/include/notcurses/notcurses.h index 0e197821a..26c6bcda8 100644 --- a/include/notcurses/notcurses.h +++ b/include/notcurses/notcurses.h @@ -2699,7 +2699,7 @@ API struct ncsubproc* ncsubproc_createvp(struct ncplane* n, const ncsubproc_opti API struct ncsubproc* ncsubproc_createvpe(struct ncplane* n, const ncsubproc_options* opts, const char* bin, char* const arg[], char* const env[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); - +API struct ncplane* ncsubproc_plane(struct ncsubproc* n); API int ncsubproc_destroy(struct ncsubproc* n); // Draw a QR code at the current position on the plane. If there is insufficient diff --git a/python/src/notcurses/build_notcurses.py b/python/src/notcurses/build_notcurses.py index 332b576ae..5628d7f07 100644 --- a/python/src/notcurses/build_notcurses.py +++ b/python/src/notcurses/build_notcurses.py @@ -450,16 +450,24 @@ int ncdplot_set_sample(struct ncdplot* n, uint64_t x, double y); void ncuplot_destroy(struct ncuplot* n); void ncdplot_destroy(struct ncdplot* n); bool ncplane_set_scrolling(struct ncplane* n, bool scrollp); -typedef int(ncfdplane_callback)(struct ncfdplane n, const void buf, size_t s, void curry); -typedef int(ncfdplane_done_cb)(struct ncfdplane n, int fderrno, void curry); -struct ncfdplane ncfdplane_create(struct ncplane n, const ncfdplane_options opts, int fd, ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); -struct ncplane ncfdplane_plane(struct ncfdplane n); -int ncfdplane_destroy(struct ncfdplane n); -struct ncsubproc ncsubproc_createv(struct ncplane n, const ncsubproc_options opts, const char bin, char const arg[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); -struct ncsubproc ncsubproc_createvp(struct ncplane n, const ncsubproc_options opts, const char bin, char const arg[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); -struct ncsubproc ncsubproc_createvpe(struct ncplane n, const ncsubproc_options opts, const char bin, char const arg[], char const env[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); -struct ncplane ncsubproc_plane(struct ncsubproc n); -int ncsubproc_destroy(struct ncsubproc n); +typedef struct ncfdplane_options { + void* curry; // parameter provided to callbacks + bool follow; // keep reading after hitting end? (think tail -f) +} ncfdplane_options; +typedef int(ncfdplane_callback)(struct ncfdplane* n, const void* buf, size_t s, void* curry); +typedef int(ncfdplane_done_cb)(struct ncfdplane* n, int fderrno, void* curry); +struct ncfdplane* ncfdplane_create(struct ncplane* n, const ncfdplane_options* opts, int fd, ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); +struct ncplane* ncfdplane_plane(struct ncfdplane* n); +int ncfdplane_destroy(struct ncfdplane* n); +typedef struct ncsubproc_options { + ncfdplane_options popts; + uint64_t restart_period; // restart this many seconds after an exit (watch) +} ncsubproc_options; +struct ncsubproc* ncsubproc_createv(struct ncplane* n, const ncsubproc_options* opts, const char* bin, char* const arg[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); +struct ncsubproc* ncsubproc_createvp(struct ncplane* n, const ncsubproc_options* opts, const char* bin, char* const arg[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); +struct ncsubproc* ncsubproc_createvpe(struct ncplane* n, const ncsubproc_options* opts, const char* bin, char* const arg[], char* const env[], ncfdplane_callback cbfxn, ncfdplane_done_cb donecbfxn); +struct ncplane* ncsubproc_plane(struct ncsubproc* n); +int ncsubproc_destroy(struct ncsubproc* n); """) if __name__ == "__main__": diff --git a/src/lib/fd.c b/src/lib/fd.c index a2e8a37bc..5e2855394 100644 --- a/src/lib/fd.c +++ b/src/lib/fd.c @@ -296,3 +296,7 @@ int ncsubproc_destroy(ncsubproc* n){ } return ret; } + +ncplane* ncsubproc_plane(ncsubproc* n){ + return n->nfp->ncp; +}