From: Taisuke Yamada Date: Mon, 18 Jan 2010 22:08:12 +0000 (+0100) Subject: Added -e to lxc-console to change command character (defaults to '^a') X-Git-Tag: lxc-0.6.5~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84a24de2355afef00d5779d086b316773fd26460;p=thirdparty%2Flxc.git Added -e to lxc-console to change command character (defaults to '^a') I noticed lxc-console uses '^a' as command-mode prefix to escape out of console session, so created a patch to make it configurable. With this, you can do lxc-console -n foo -e ^t and exit the session with 'Ctrl+t q'. For emacs-binding addicts (like me), it's always nice to let shell handle '^a' as 'beginning-of-line' command... Signed-off-by: Taisuke Yamada Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h index 71ca66938..3bc027d47 100644 --- a/src/lxc/arguments.h +++ b/src/lxc/arguments.h @@ -51,6 +51,7 @@ struct lxc_arguments { /* for lxc-console */ int ttynum; + char escape; /* for lxc-wait */ char *states; diff --git a/src/lxc/lxc_console.c b/src/lxc/lxc_console.c index 2ee1c483f..7f0e83e1d 100644 --- a/src/lxc/lxc_console.c +++ b/src/lxc/lxc_console.c @@ -46,16 +46,25 @@ lxc_log_define(lxc_console_ui, lxc_console); +static char etoc(const char *expr) +{ + /* returns "control code" of given expression */ + char c = expr[0] == '^' ? expr[1] : expr[0]; + return 1 + ((c > 'Z') ? (c - 'a') : (c - 'Z')); +} + static int my_parser(struct lxc_arguments* args, int c, char* arg) { switch (c) { case 't': args->ttynum = atoi(arg); break; + case 'e': args->escape = etoc(arg); break; } return 0; } static const struct option my_longopts[] = { {"tty", required_argument, 0, 't'}, + {"escape", required_argument, 0, 'e'}, LXC_COMMON_OPTIONS }; @@ -67,12 +76,14 @@ static struct lxc_arguments my_args = { lxc-console logs on the container with the identifier NAME\n\ \n\ Options :\n\ - -n, --name=NAME NAME for name of the container\n\ - -t, --tty=NUMBER console tty number\n", + -n, --name=NAME NAME for name of the container\n\ + -t, --tty=NUMBER console tty number\n\ + -e, --escape=PREFIX prefix for escape command\n", .options = my_longopts, .parser = my_parser, .checker = NULL, .ttynum = -1, + .escape = 1, }; static int master = -1; @@ -131,7 +142,8 @@ int main(int argc, char *argv[]) if (err) goto out; - fprintf(stderr, "\nType to exit the console\n"); + fprintf(stderr, "\nType to exit the console\n", + 'a' + my_args.escape - 1); setsid(); signal(SIGWINCH, sigwinch); @@ -167,7 +179,7 @@ int main(int argc, char *argv[]) } /* we want to exit the console with Ctrl+a q */ - if (c == 1) { + if (c == my_args.escape) { wait4q = !wait4q; continue; }