Ignore:
Timestamp:
Jun 25, 2008 12:33:40 AM (6 years ago)
Author:
pterjan
Message:
  • Have -r/-R/-S like screen
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/main.c

    r2487 r2488  
    6868    printf("Example : %s zsh top \n\n", argv[0]);
    6969    printf("Options :\n");
    70     printf("\t--config\t\t-c <file>\t\tuse given config file\n");
    71     printf("\t--pid\t\t-P <pid>\t\tattach <pid>\n");
    72     printf("\t\t\t-R\t\t\tre-attach another neercs\n");
     70    printf("\t--config\t-c <file>\t\tuse given config file\n");
     71    printf("\t--pid\t\t-P <pid>\t\tgrab <pid>\n");
     72    printf("\t\t\t-r [session]\t\treattach to a detached neercs\n");
     73    printf("\t\t\t-R [session]\t\treattach if possible, otherwise start a new session\n");
     74    printf("\t\t\t-S <name>\t\tname this session <name> instead of <pid>\n");
    7375    printf("\t--version\t-v \t\t\tdisplay version and exit\n");
    7476    printf("\t--help\t\t-h \t\t\tthis help\n");
     
    8284    struct recurrent_list *recurrent_list = NULL;
    8385    struct passwd *user_info;
    84     char *default_shell = NULL, *user_path = NULL;
     86    char *default_shell = NULL, *user_path = NULL, *session_name = NULL;
    8587    int i, w, h, args, s=0;
    8688    int eof = 0, refresh = 1, command = 0;
     
    8890    int lock_offset = 0;
    8991    int mainret = 0;
    90     int attach = 0;
     92    int attach = 0, forceattach = 0;
    9193    int *to_grab = NULL;
    9294    int nb_to_grab = 0;
     
    142144    screen_list->socket_dir = NULL;
    143145    screen_list->socket_path = NULL;
     146    screen_list->session_name = NULL;
    144147    memset(screen_list->lockmsg, 0, 1024);
    145148    memset(screen_list->lockpass, 0, 1024);
     
    168171            };
    169172#if defined USE_GRAB
    170         int c = mygetopt(argc, argv, "c:RP:hv", long_options, &option_index);
     173        int c = mygetopt(argc, argv, "c:S:R::r::P:hv", long_options, &option_index);
    171174#else
    172         int c = mygetopt(argc, argv, "c:Rhv", long_options, &option_index);
     175        int c = mygetopt(argc, argv, "c:S:R::r::hv", long_options, &option_index);
    173176#endif
    174177        if(c == -1)
     
    181184                free(user_path);
    182185            user_path = strdup(myoptarg);
     186            s+=2;
     187            break;
     188        case 'S':
     189            if(screen_list->session_name)
     190                free(screen_list->session_name);
     191            screen_list->session_name = strdup(myoptarg);
    183192            s+=2;
    184193            break;
     
    205214            s+=2;
    206215            break;
     216        case 'r':
     217            forceattach = 1;
    207218        case 'R':
     219            if(attach)
     220            {
     221                fprintf(stderr, "Attaching can only be requested once\n");
     222                return -1;
     223            }
     224            if(myoptarg)
     225            {
     226                session_name = strdup(myoptarg);
     227                s+=1;
     228            }
    208229            attach = 1;
    209230            s+=1;
     
    242263            return -1;
    243264        }
    244         sockets = list_sockets(screen_list->socket_dir);
     265        sockets = list_sockets(screen_list->socket_dir, session_name);
     266        if(!screen_list->session_name)
     267            screen_list->session_name = session_name;
     268        else
     269            free(session_name);
    245270        if(sockets && sockets[0])
    246271        {
     
    255280            fprintf(stderr, "No socket found!\n");
    256281        }
    257         return -1;
     282        if(forceattach)
     283            return -1;
     284    }
     285
     286    /* Build default session name */
     287    if(!screen_list->session_name)
     288    {
     289        char mypid[32]; /* FIXME Compute the length of PID_MAX ? */
     290        snprintf(mypid, 31, "%d", getpid());
     291        mypid[31]= '\0';
     292        screen_list->session_name = strdup(mypid);
     293        if(!screen_list->session_name)
     294        {
     295            fprintf(stderr, "Can't allocate memory at %s:%d\n", __FUNCTION__, __LINE__);
     296            return -1;
     297        }
    258298    }
    259299
Note: See TracChangeset for help on using the changeset viewer.