Skip to content

Commit 4bbdf1d

Browse files
committed
Merge remote-tracking branch 'origin/read' into read
2 parents 41b47e4 + 337214f commit 4bbdf1d

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

cpp-terminal/platforms/input.cpp

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "cpp-terminal/tty.hpp"
1212

1313
#include <string>
14+
#include <vector>
1415

1516
char Term::Platform::read_raw_stdin()
1617
{
@@ -35,24 +36,28 @@ Term::Event Term::Platform::read_raw()
3536
GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &nread);
3637
if(nread >= 1)
3738
{
38-
INPUT_RECORD buf;
39-
if(!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &buf, 1, &nread)) { Term::Exception("ReadFile() failed"); }
40-
if(nread == 1)
39+
DWORD nre{0};
40+
std::vector<INPUT_RECORD> buf{nread};
41+
if(!ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &buf[0], buf.size(), &nre)) { Term::Exception("ReadFile() failed"); }
42+
std::string ret(nre, '\0');
43+
int processed{0};
44+
for(std::size_t i = 0; i != nre; ++i)
4145
{
42-
switch(buf.EventType)
46+
switch(buf[i].EventType)
4347
{
4448
case KEY_EVENT:
4549
{
46-
//if(buf.Event.KeyEvent.bKeyDown)std::cout<<buf.Event.KeyEvent.wVirtualKeyCode<<" "<<buf.Event.KeyEvent.uChar.AsciiChar<<std::endl;
47-
WORD skip = buf.Event.KeyEvent.wVirtualKeyCode; //skip them for now
48-
if(skip == VK_SHIFT || skip == VK_LWIN || skip == VK_RWIN || skip == VK_APPS || skip == VK_CONTROL || skip == VK_MENU || skip == VK_CAPITAL) { return Event(); }
49-
if(buf.Event.KeyEvent.bKeyDown)
50+
WORD skip = buf[i].Event.KeyEvent.wVirtualKeyCode; //skip them for now
51+
if(skip == VK_SHIFT || skip == VK_LWIN || skip == VK_RWIN || skip == VK_APPS || skip == VK_CONTROL || skip == VK_MENU || skip == VK_CAPITAL) break;
52+
if(buf[i].Event.KeyEvent.bKeyDown)
5053
{
51-
if(buf.Event.KeyEvent.uChar.AsciiChar != 0) return Event(buf.Event.KeyEvent.uChar.AsciiChar);
52-
else
53-
switch(buf.Event.KeyEvent.wVirtualKeyCode)
54+
if(buf[i].Event.KeyEvent.uChar.AsciiChar != 0) ret[processed] = buf[i].Event.KeyEvent.uChar.AsciiChar;
55+
++processed;
56+
break;
57+
/*else
58+
switch(buf[i].Event.KeyEvent.wVirtualKeyCode)
5459
{
55-
case VK_CLEAR: return Key(Term::Key::Value::NUMERIC_5);
60+
case VK_CLEAR: return Event("");Key(Term::Key::Value::NUMERIC_5);
5661
case VK_PRIOR: return Key(Term::Key::Value::PAGE_UP);
5762
case VK_NEXT: return Key(Term::Key::Value::PAGE_DOWN);
5863
case VK_END: return Key(Term::Key::Value::END);
@@ -63,7 +68,7 @@ Term::Event Term::Platform::read_raw()
6368
case VK_DOWN: return Key(Term::Key::Value::ARROW_DOWN);
6469
case VK_SNAPSHOT: return Key(Term::Key::Value::PRINT_SCREEN);
6570
case VK_INSERT: return Key(Term::Key::Value::INSERT);
66-
case VK_DELETE: return Key(Term::Key::Value::Delete);
71+
case VK_DELETE: return Key(Term::Key::Value::DEL);
6772
case VK_F1: return Key(Term::Key::Value::F1);
6873
case VK_F2: return Key(Term::Key::Value::F2);
6974
case VK_F3: return Key(Term::Key::Value::F3);
@@ -88,10 +93,10 @@ Term::Event Term::Platform::read_raw()
8893
case VK_F22: return Key(Term::Key::Value::F22);
8994
case VK_F23: return Key(Term::Key::Value::F23);
9095
case VK_F24: return Key(Term::Key::Value::F24);
91-
}
96+
}*/
9297
}
9398
else
94-
return Event();
99+
break;
95100
}
96101
case FOCUS_EVENT:
97102
case MENU_EVENT:
@@ -100,7 +105,7 @@ Term::Event Term::Platform::read_raw()
100105
default: return Event();
101106
}
102107
}
103-
else { throw Term::Exception("kbhit() and ReadFile() inconsistent"); }
108+
return Event(ret.c_str());
104109
}
105110
else
106111
return Event();

0 commit comments

Comments
 (0)