summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-09-18 06:45:50 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-09-18 06:45:50 -0700
commit1c11d63f020a1a6f2e20064027246cb55800f89f (patch)
treeaf2f753d71cf6e47d6c4b599fd658ee23d6e7abc
parentd76d11198035408667b20e3c0972e059551cde69 (diff)
downloadtxr-1c11d63f020a1a6f2e20064027246cb55800f89f.tar.gz
txr-1c11d63f020a1a6f2e20064027246cb55800f89f.tar.bz2
txr-1c11d63f020a1a6f2e20064027246cb55800f89f.zip
linenoise: support suffix on temp file name.
This is so that when a command line is edited in an external editor, editors can choose appropriate syntax highlighting mode based on the suffix. * linenoise/linenoise.c (struct lino_state): New member, suffix. (edit_in_editor): If we have the mkstemps function, then use it to create a suffixed name. (lino_set_tempfile_suffix): New function. * linenoise/linenoise.h (lino_set_tempfile_suffix): Declared.
-rw-r--r--linenoise/linenoise.c20
-rw-r--r--linenoise/linenoise.h1
2 files changed, 19 insertions, 2 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c
index ff931121..d1973e94 100644
--- a/linenoise/linenoise.c
+++ b/linenoise/linenoise.c
@@ -88,6 +88,7 @@ struct lino_state {
char buf[LINENOISE_MAX_DISP]; /* Displayed line bufer. */
char data[LINENOISE_MAX_LINE]; /* True data corresponding to display */
const char *prompt; /* Prompt to display. */
+ const char *suffix; /* Suffix when creating temp file. */
size_t plen; /* Prompt length. */
size_t pos; /* Current cursor position. */
size_t len; /* Current edited line display length. */
@@ -1022,14 +1023,24 @@ static void edit_in_editor(lino_t *l) {
if (ed) {
char *ho = getenv("HOME");
int fd;
+#if HAVE_MKSTEMPS
+ const char *suffix = l->suffix ? l->suffix : "";
+#else
+ const char *suffix = "";
+#endif
if (ho)
- snprintf(path, sizeof path, "%s/%s", ho, template);
+ snprintf(path, sizeof path, "%s/%s%s", ho, template, suffix);
else
- snprintf(path, sizeof path, "%s", template);
+ snprintf(path, sizeof path, "%s%s", template, suffix);
+#if HAVE_MKSTEMPS
+ if ((fd = mkstemps(path, strlen(suffix))) != -1)
+ fo = fdopen(fd, "w");
+#else
if ((fd = mkstemp(path)) != -1)
fo = fdopen(fd, "w");
+#endif
if (!fo && fd != -1)
close(fd);
@@ -1486,6 +1497,11 @@ void lino_free(lino_t *ls)
}
}
+void lino_set_tempfile_suffix(lino_t *l, const char *suffix)
+{
+ l->suffix = suffix;
+}
+
lino_error_t lino_get_error(lino_t *l)
{
return l->error;
diff --git a/linenoise/linenoise.h b/linenoise/linenoise.h
index 688ed64c..6471993f 100644
--- a/linenoise/linenoise.h
+++ b/linenoise/linenoise.h
@@ -61,6 +61,7 @@ lino_t *lino_copy(lino_t *);
void lino_free(lino_t *);
char *linenoise(lino_t *, const char *prompt);
+void lino_set_tempfile_suffix(lino_t *, const char *);
lino_error_t lino_get_error(lino_t *);
lino_error_t lino_set_error(lino_t *, lino_error_t); /* returns old */
int lino_hist_add(lino_t *, const char *line);