diff options
author | Marco Peereboom <marco@conformal.com> | 2011-01-14 20:03:31 +0000 |
---|---|---|
committer | Marco Peereboom <marco@conformal.com> | 2011-01-14 20:03:31 +0000 |
commit | 1264a0de67168105a77f25b9f0093acb831b6ccd (patch) | |
tree | 602fc9331fe38a83916dfe460e918636ddfdeb24 | |
parent | 82cb11858b207deb60d485e7e2dc5eefa5c0d7d5 (diff) | |
download | xombrero-1264a0de67168105a77f25b9f0093acb831b6ccd.tar.gz |
add session delete command
-rw-r--r-- | xxxterm.1 | 4 | ||||
-rw-r--r-- | 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 <session_name> +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 <session_name> 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: |