From 768cddff325de07a7ba3ac5debae1fa5d1785570 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Tue, 18 Dec 2012 18:34:06 +0200 Subject: [PATCH] Add config option "flowcontrol" to disable XON/XOFF. --- config.l | 1 + config.y | 6 ++++++ dgamelaunch.c | 6 ++++++ dgamelaunch.h | 1 + dgl-common.c | 1 + examples/dgamelaunch.conf | 4 ++++ 6 files changed, 19 insertions(+) diff --git a/config.l b/config.l index b1e01f3..5e3f887 100644 --- a/config.l +++ b/config.l @@ -97,6 +97,7 @@ encoding { return TYPE_ENCODING; } locale { return TYPE_LOCALE; } default_term { return TYPE_DEFTERM; } utf8esc { return TYPE_UTF8ESC; } +flowcontrol { return TYPE_FLOWCTRL; } filemode { return TYPE_FILEMODE; } yes { yylval.i = 1; return TYPE_BOOL; } no { yylval.i = 0; return TYPE_BOOL; } diff --git a/config.y b/config.y index 1d38578..b4c1b01 100644 --- a/config.y +++ b/config.y @@ -60,6 +60,7 @@ static int sortmode_number(const char *sortmode_name) { %token TYPE_POSTCMDQUEUE TYPE_TIMEFORMAT %token TYPE_MAX_IDLE_TIME TYPE_MENU_MAX_IDLE_TIME TYPE_EXTRA_INFO_FILE %token TYPE_ENCODING TYPE_LOCALE TYPE_UTF8ESC TYPE_FILEMODE TYPE_DEFTERM +%token TYPE_FLOWCTRL %token TYPE_VALUE %token TYPE_NUMBER TYPE_CMDQUEUENAME %type KeyType @@ -233,6 +234,9 @@ KeyPair: TYPE_CMDQUEUE '[' TYPE_CMDQUEUENAME ']' case TYPE_UTF8ESC: globalconfig.utf8esc = $3; break; + case TYPE_FLOWCTRL: + globalconfig.flowctrl = $3; + break; default: fprintf(stderr, "%s:%d: token %s does not take a boolean, bailing out\n", config, line, lookup_token($1)); @@ -652,6 +656,7 @@ KeyType : TYPE_SUSER { $$ = TYPE_SUSER; } | TYPE_LOCALE { $$ = TYPE_LOCALE; } | TYPE_DEFTERM { $$ = TYPE_DEFTERM; } | TYPE_UTF8ESC { $$ = TYPE_UTF8ESC; } + | TYPE_FLOWCTRL { $$ = TYPE_FLOWCTRL; } | TYPE_RC_FMT { $$ = TYPE_RC_FMT; } | TYPE_WATCH_SORTMODE { $$ = TYPE_WATCH_SORTMODE; } | TYPE_FILEMODE { $$ = TYPE_FILEMODE; } @@ -690,6 +695,7 @@ const char* lookup_token (int t) case TYPE_LOCALE: return "locale"; case TYPE_DEFTERM: return "default_term"; case TYPE_UTF8ESC: return "utf8esc"; + case TYPE_FLOWCTRL: return "flowcontrol"; case TYPE_FILEMODE: return "filemode"; default: abort(); } diff --git a/dgamelaunch.c b/dgamelaunch.c index b7881ab..a03d049 100644 --- a/dgamelaunch.c +++ b/dgamelaunch.c @@ -2791,6 +2791,12 @@ main (int argc, char** argv) signal (SIGTERM, catch_sighup); (void) tcgetattr (0, &tt); + + if (!globalconfig.flowctrl) { + tt.c_iflag &= ~(IXON | IXOFF | IXANY); /* Disable XON/XOFF */ + (void) tcsetattr(0, TCSANOW, &tt); + } + if (-1 == ioctl (0, TIOCGWINSZ, (char *) &win) || win.ws_row < 4 || win.ws_col < 4) /* Rudimentary validity check */ { diff --git a/dgamelaunch.h b/dgamelaunch.h index 9fdee30..b9ce41c 100644 --- a/dgamelaunch.h +++ b/dgamelaunch.h @@ -240,6 +240,7 @@ struct dg_globalconfig char *locale; int utf8esc; /* send select-utf8-charset escape code */ char *defterm; /* default TERM in case user TERM is unknown */ + int flowctrl; /* XON/XOFF for games? */ struct dg_cmdpart *cmdqueue[NUM_DGLTIMES]; diff --git a/dgl-common.c b/dgl-common.c index 0a7b1b6..e5c80bc 100644 --- a/dgl-common.c +++ b/dgl-common.c @@ -774,6 +774,7 @@ create_config () globalconfig.sortmode = SORTMODE_USERNAME; globalconfig.utf8esc = 0; + globalconfig.flowctrl = -1; /* undefined, don't touch it */ if (config) { diff --git a/examples/dgamelaunch.conf b/examples/dgamelaunch.conf index 1d9bf54..3d3e488 100644 --- a/examples/dgamelaunch.conf +++ b/examples/dgamelaunch.conf @@ -94,6 +94,10 @@ default_term = "xterm" # default is no. #utf8esc = yes +# Should dgl allow XON/XOFF? Default is "yes", meaning "don't touch it". +# "no" disables XON/XOFF +#flowcontrol = no + # Maximum time in seconds user can idle in the dgamelaunch menus # before dgl exits. Default value is 0, which disables the idling timer. # Does not apply to external programs or config editors. -- 2.47.3