aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/termkey_new.35
-rw-r--r--termkey.c18
-rw-r--r--termkey.h.in1
3 files changed, 23 insertions, 1 deletions
diff --git a/man/termkey_new.3 b/man/termkey_new.3
index dd188d6..c727d22 100644
--- a/man/termkey_new.3
+++ b/man/termkey_new.3
@@ -7,12 +7,15 @@ termkey_new, termkey_destroy \- create or destroy new termkey instance
.sp
.BI "TERMKEY_CHECK_VERSION;"
.BI "TermKey *termkey_new(int " fd ", int " flags );
+.BI "TermKey *termkey_new_abstract(const char *" term ", int " flags );
.BI "void termkey_destroy(TermKey *" tk );
.fi
.sp
Link with \fI\-ltermkey\fP.
.SH DESCRIPTION
-\fBtermkey_new\fP() creates a new \fBtermkey\fP(7) instance connected to the file handle opened by \fIfd\fP using the \fIflags\fP. The \fITermKey\fP structure should be considered opaque; its contents are not intended for use outside of the library. If \fIfd\fP is given the value -1, then no file handle will be associated.
+\fBtermkey_new\fP() creates a new \fBtermkey\fP(7) instance connected to the file handle opened by \fIfd\fP using the \fIflags\fP. The \fITermKey\fP structure should be considered opaque; its contents are not intended for use outside of the library.
+.PP
+\fBtermkey_new_abstract\fP() creates a new \fBtermkey\fP() instance with no file handle associated. As this is usually done for handling other sources of terminal byte input, it also takes a string indicating the termtype to use.
.PP
\fBtermkey_destroy\fP() destroys the given instance and releases any resources controlled by it. It will not close the underlying filehandle given as the \fIfd\fP argument to \fBtermkey_new\fP().
.PP
diff --git a/termkey.c b/termkey.c
index 0ef077e..6df53bd 100644
--- a/termkey.c
+++ b/termkey.c
@@ -369,6 +369,24 @@ TermKey *termkey_new(int fd, int flags)
return tk;
}
+TermKey *termkey_new_abstract(const char *term, int flags)
+{
+ TermKey *tk = termkey_alloc();
+ if(!tk)
+ return NULL;
+
+ tk->fd = -1;
+
+ termkey_set_flags(tk, flags);
+
+ if(!termkey_init(tk, term)) {
+ free(tk);
+ return NULL;
+ }
+
+ return tk;
+}
+
void termkey_free(TermKey *tk)
{
free(tk->buffer); tk->buffer = NULL;
diff --git a/termkey.h.in b/termkey.h.in
index d61afb5..1db9d4d 100644
--- a/termkey.h.in
+++ b/termkey.h.in
@@ -157,6 +157,7 @@ enum {
void termkey_check_version(int major, int minor);
TermKey *termkey_new(int fd, int flags);
+TermKey *termkey_new_abstract(const char *term, int flags);
void termkey_free(TermKey *tk);
void termkey_destroy(TermKey *tk);