From 1264a0de67168105a77f25b9f0093acb831b6ccd Mon Sep 17 00:00:00 2001 From: Marco Peereboom Date: Fri, 14 Jan 2011 20:03:31 +0000 Subject: add session delete command --- xxxterm.1 | 4 ++++ xxxterm.c | 45 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/xxxterm.1 b/xxxterm.1 index e72359c..2c70bf8 100644 --- a/xxxterm.1 +++ b/xxxterm.1 @@ -368,6 +368,10 @@ To create a new session use the .Cm session save command. A session is defined as the lifetime of the browser window. +.It Cm session delete +Delete session session_name from persistent storage. +If session_name is the current session then the session will revert to +main_session. .It Cm session open Open session_name and close all currently open tabs. Going forward this session is named session_name. diff --git a/xxxterm.c b/xxxterm.c index ff734dd..272ff19 100644 --- a/xxxterm.c +++ b/xxxterm.c @@ -3826,11 +3826,13 @@ session_save(struct tab *t, char *filename, char **ret) if (strlen(f) == 0) goto done; + *ret = f; + a.s = f; - save_tabs(t, &a); + if (save_tabs(t, &a)) + goto done; strlcpy(named_session, f, sizeof named_session); - *ret = f; rv = 0; done: return (rv); @@ -3849,12 +3851,43 @@ session_open(struct tab *t, char *filename, char **ret) if (strlen(f) == 0) goto done; + *ret = f; + a.s = f; a.i = XT_SES_CLOSETABS; - open_tabs(t, &a); + if (open_tabs(t, &a)) + goto done; + strlcpy(named_session, f, sizeof named_session); + rv = 0; +done: + return (rv); +} + +int +session_delete(struct tab *t, char *filename, char **ret) +{ + char file[PATH_MAX]; + char *f = filename; + int rv = 1; + + f += strlen("delete"); + while (*f == ' ' && *f != '\0') + f++; + if (strlen(f) == 0) + goto done; + *ret = f; + + snprintf(file, sizeof file, "%s/%s", sessions_dir, f); + if (unlink(file)) + goto done; + + if (!strcmp(f, named_session)) + strlcpy(named_session, XT_SAVED_TABS_FILE, + sizeof named_session); + rv = 0; done: return (rv); @@ -3889,6 +3922,12 @@ session_cmd(struct tab *t, struct karg *args) filename ? filename : "INVALID"); goto done; } + } else if (g_str_has_prefix(action, "delete ")) { + if (session_delete(t, action, &filename)) { + show_oops(t, "Can't delete session: %s", + filename ? filename : "INVALID"); + goto done; + } } else show_oops(t, "Invalid command: %s", action); done: -- cgit 1.4.1-2-gfad0