=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd.c,v retrieving revision 1.82 retrieving revision 1.83 diff -c -r1.82 -r1.83 *** src/usr.bin/tmux/cmd.c 2013/03/25 10:09:05 1.82 --- src/usr.bin/tmux/cmd.c 2013/03/25 10:11:45 1.83 *************** *** 1,4 **** ! /* $OpenBSD: cmd.c,v 1.82 2013/03/25 10:09:05 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd.c,v 1.83 2013/03/25 10:11:45 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 123,128 **** --- 123,129 ---- struct client *cmd_choose_client(struct clients *); struct client *cmd_lookup_client(const char *); struct session *cmd_lookup_session(const char *, int *); + struct session *cmd_lookup_session_id(const char *); struct winlink *cmd_lookup_window(struct session *, const char *, int *); int cmd_lookup_index(struct session *, const char *, int *); struct window_pane *cmd_lookup_paneid(const char *); *************** *** 358,365 **** } /* Use the session from the TMUX environment variable. */ ! if (data != NULL && data->pid == getpid() && data->idx != -1) { ! s = session_find_by_index(data->idx); if (s != NULL) return (s); } --- 359,366 ---- } /* Use the session from the TMUX environment variable. */ ! if (data != NULL && data->pid == getpid() && data->session_id != -1) { ! s = session_find_by_id(data->session_id); if (s != NULL) return (s); } *************** *** 551,556 **** --- 552,572 ---- return (NULL); } + /* Find the target session or report an error and return NULL. */ + struct session * + cmd_lookup_session_id(const char *arg) + { + char *endptr; + long id; + + if (arg[0] != '$') + return (NULL); + id = strtol(arg + 1, &endptr, 10); + if (arg[1] != '\0' && *endptr == '\0') + return (session_find_by_id(id)); + return (NULL); + } + /* Lookup a session by name. If no session is found, NULL is returned. */ struct session * cmd_lookup_session(const char *name, int *ambiguous) *************** *** 558,563 **** --- 574,583 ---- struct session *s, *sfound; *ambiguous = 0; + + /* Look for $id first. */ + if ((s = cmd_lookup_session_id(name)) != NULL) + return (s); /* * Look for matches. First look for exact matches - session names must