abduco

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | LICENSE

commit 0102cf840ee5fb8a14e00e8bea9092b65bb395a5
parent 7962cb99f3e1032384b11ef6f73e6d24dce7435d
Author: yy <yiyu.jgl@gmail.com>
Date:   Thu, 26 Feb 2015 13:58:05 +0100

Remove -C mode, in favour of a -f flag

that works with -c, -n or -A, which forces the creation of a
new session when there is an existing but already terminated
session of the same name.

Diffstat:
abduco.1 | 17++++-------------
abduco.c | 17+++++++++++------
2 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/abduco.1 b/abduco.1 @@ -12,14 +12,6 @@ abduco - terminal session manager .RI [ args \ ... "" ] .br .B abduco -.RB [ \-e -.IR detachkey ] -.RB \-C -.RB name -.RB command -.RI [ args \ ... "" ] -.br -.B abduco .RB [ \-r ] .RB [ \-e .IR detachkey ] @@ -93,13 +85,12 @@ Readonly session, i.e. user input is ignored. .BI \-e \ detachkey Set the key to detach which by default is set to CTRL+\\ i.e. ^\\ to detachkey. .TP -.BI \-c -Create a new session and attach immediately to it. +.BI \-f +Force creation of session when there is an already terminated session of the same name, +after showing its exit status. .TP -.BI \-C -Show the exit status of an already terminated session, and create a new session under the same name. -If the session does not exist, it acts like .BI \-c +Create a new session and attach immediately to it. .TP .BI \-n Create a new session but do not attach to it. diff --git a/abduco.c b/abduco.c @@ -483,7 +483,7 @@ static bool attach_session(const char *name, const bool terminate) { exit(status); } - return true; + return terminate; } static int session_filter(const struct dirent *d) { @@ -529,6 +529,7 @@ static int list_session(void) { } int main(int argc, char *argv[]) { + bool force = false; char **cmd = NULL, action = '\0'; server.name = basename(argv[0]); gethostname(server.host+1, sizeof(server.host) - 1); @@ -562,6 +563,9 @@ int main(int argc, char *argv[]) { *esc = CTRL(esc[1]); KEY_DETACH = *esc; break; + case 'f': + force = true; + break; case 'r': client.readonly = true; break; @@ -597,8 +601,9 @@ int main(int argc, char *argv[]) { redo: switch (action) { - case 'C': - if (set_socket_name(&sockaddr, server.session_name)) { + case 'n': + case 'c': + if (force && set_socket_name(&sockaddr, server.session_name)) { struct stat sb; if (stat(sockaddr.sun_path, &sb) == 0 && S_ISSOCK(sb.st_mode)) { if (sb.st_mode & S_IXGRP) { @@ -609,17 +614,17 @@ int main(int argc, char *argv[]) { return 1; } } + force = false; } - case 'n': - case 'c': if (!create_session(server.session_name, cmd)) die("create-session"); if (action == 'n') break; case 'a': case 'A': - if (!attach_session(server.session_name, true)) { + if (!attach_session(server.session_name, !force || action == 'a')) { if (action == 'A') { + force = false; action = 'c'; goto redo; }