X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fconsole.cpp;h=6ae969914b732319ed78609a30d294e3b670c609;hp=c846604806aa66e36ea8ce76d37199b7420b4372;hb=c750a22da0df0b54af78374fd66ad1a055327e34;hpb=d6a72ed8ba181dc35bd750811bf4a10a5583d472 diff --git a/source/io/console.cpp b/source/io/console.cpp index c846604..6ae9699 100644 --- a/source/io/console.cpp +++ b/source/io/console.cpp @@ -99,11 +99,21 @@ void Console::set_line_buffer(bool l) if(!SetConsoleMode(*handle, (m&~ENABLE_LINE_INPUT) | (l?ENABLE_LINE_INPUT:0))) throw system_error("SetConsoleMode"); #else - // XXX ICANON does more than just set line buffering, may need a bit more thought termios t; if(tcgetattr(*handle, &t)==-1) throw system_error("tcgetattr"); t.c_lflag = (t.c_lflag&~ICANON) | (l?ICANON:0); + // man termios warns that VMIN and VTIME may share indices with VEOF and VEOL + if(l) + { + t.c_cc[VEOF] = orig_attr.c_cc[VEOF]; + t.c_cc[VEOL] = orig_attr.c_cc[VEOL]; + } + else + { + t.c_cc[VMIN] = 1; + t.c_cc[VTIME] = 0; + } if(tcsetattr(*handle, TCSADRAIN, &t)==-1) throw system_error("tcsetattr"); #endif