forked from github/abduco
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.
This commit is contained in:
parent
7962cb99f3
commit
0102cf840e
17
abduco.1
17
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,14 +85,13 @@ 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 \-f
|
||||
Force creation of session when there is an already terminated session of the same name,
|
||||
after showing its exit status.
|
||||
.TP
|
||||
.BI \-c
|
||||
Create a new session and attach immediately to it.
|
||||
.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
|
||||
.TP
|
||||
.BI \-n
|
||||
Create a new session but do not attach to it.
|
||||
.TP
|
||||
|
|
|
|||
17
abduco.c
17
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue