77#include " cpp-terminal/key.hpp"
88#include " cpp-terminal/terminal.hpp"
99#include " cpp-terminal/tty.hpp"
10+ #include " cpp-terminal/version.hpp"
1011
1112#include < iostream>
1213#include < utility>
@@ -29,67 +30,96 @@ int main()
2930 int quit{0 };
3031 while (quit != 3 )
3132 {
32- Term::Key key{Term::read_key ()};
33- if (key == Term::Key::Value::q) quit++;
34- else
35- quit = 0 ;
36- std::string s;
37- if (key == Term::Key::Value::NO_KEY) continue ;
38- if (key >= Term::Key::a && key <= Term::Key::z)
33+ Term::Event event{Term::read_event ()};
34+ switch (event.type ())
3935 {
40- s = (char )(key + Term::Key::A - Term::Key::a); // Convert to upper case
41- }
42- else if (key >= Term::Key::A && key <= Term::Key::Z)
43- {
44- s = (std::string) " Shift+" + (char )key; // Already in upper case;
45- }
46- else if (key.is_CTRL ()) { s = (std::string) " CTRL+" + (char )(-Term::Key::CTRL + key); }
47- else if (key.is_ALT ())
48- {
49- s = (std::string) " Alt+" + (char )(key + Term::Key::A - (Term::Key::ALT + Term::Key::a)); // Convert to upper case
50- }
51- else if (key.is_extended_ASCII () && !iscntrl (key)) { s = (char )key; }
52- else
53- {
54- switch (key)
36+ case Term::Event::Type::Key:
5537 {
56- case Term::Key::BACKSPACE: s = " BACKSPACE" ; break ;
57- case Term::Key::ENTER: s = " ENTER" ; break ;
58- case Term::Key::ALT_ENTER: s = " Alt+ENTER" ; break ;
59- case Term::Key::TAB: s = " TAB" ; break ;
60- case Term::Key::ARROW_LEFT: s = " ARROW_LEFT" ; break ;
61- case Term::Key::ARROW_RIGHT: s = " ARROW_RIGHT" ; break ;
62- case Term::Key::ARROW_UP: s = " ARROW_UP" ; break ;
63- case Term::Key::ARROW_DOWN: s = " ARROW_DOWN" ; break ;
64- case Term::Key::CTRL_UP: s = " CTRL_UP" ; break ;
65- case Term::Key::CTRL_DOWN: s = " CTRL_DOWN" ; break ;
66- case Term::Key::CTRL_RIGHT: s = " CTRL_RIGHT" ; break ;
67- case Term::Key::CTRL_LEFT: s = " CTRL_LEFT" ; break ;
68- case Term::Key::NUMERIC_5: s = " NUMERIC_5" ; break ;
69- case Term::Key::DEL: s = " DELETE" ; break ;
70- case Term::Key::HOME: s = " HOME" ; break ;
71- case Term::Key::INSERT: s = " INSERT" ; break ;
72- case Term::Key::END: s = " END" ; break ;
73- case Term::Key::PAGE_UP: s = " PAGE_UP" ; break ;
74- case Term::Key::PAGE_DOWN: s = " PAGE_DOWN" ; break ;
75- case Term::Key::ESC: s = " ESC" ; break ;
76- case Term::Key::F1: s = " F1" ; break ;
77- case Term::Key::F2: s = " F2" ; break ;
78- case Term::Key::F3: s = " F3" ; break ;
79- case Term::Key::F4: s = " F4" ; break ;
80- case Term::Key::F5: s = " F5" ; break ;
81- case Term::Key::F6: s = " F6" ; break ;
82- case Term::Key::F7: s = " F7" ; break ;
83- case Term::Key::F8: s = " F8" ; break ;
84- case Term::Key::F9: s = " F9" ; break ;
85- case Term::Key::F10: s = " F10" ; break ;
86- case Term::Key::F11: s = " F11" ; break ;
87- case Term::Key::F12: s = " F12" ; break ;
88-
89- default : s = " Unknown:" + std::to_string (key);
38+ Term::Key key{event};
39+ if (key == Term::Key::Value::q) quit++;
40+ else
41+ quit = 0 ;
42+ std::string s;
43+ if (key == Term::Key::Value::NO_KEY) continue ;
44+ if (key >= Term::Key::a && key <= Term::Key::z)
45+ {
46+ s = (char )(key + Term::Key::A - Term::Key::a); // Convert to upper case
47+ }
48+ else if (key >= Term::Key::A && key <= Term::Key::Z)
49+ {
50+ s = (std::string) " Shift+" + (char )key; // Already in upper case;
51+ }
52+ else if (key.is_CTRL ()) { s = (std::string) " CTRL+" + (char )(-Term::Key::CTRL + key); }
53+ else if (key.is_ALT ())
54+ {
55+ s = (std::string) " Alt+" + (char )(key + Term::Key::A - (Term::Key::ALT + Term::Key::a)); // Convert to upper case
56+ }
57+ else if (key.is_extended_ASCII () && !iscntrl (key)) { s = (char )key; }
58+ else
59+ {
60+ switch (key)
61+ {
62+ case Term::Key::BACKSPACE: s = " BACKSPACE" ; break ;
63+ case Term::Key::ENTER: s = " ENTER" ; break ;
64+ case Term::Key::ALT_ENTER: s = " Alt+ENTER" ; break ;
65+ case Term::Key::TAB: s = " TAB" ; break ;
66+ case Term::Key::ARROW_LEFT: s = " ARROW_LEFT" ; break ;
67+ case Term::Key::ARROW_RIGHT: s = " ARROW_RIGHT" ; break ;
68+ case Term::Key::ARROW_UP: s = " ARROW_UP" ; break ;
69+ case Term::Key::ARROW_DOWN: s = " ARROW_DOWN" ; break ;
70+ case Term::Key::CTRL_UP: s = " CTRL_UP" ; break ;
71+ case Term::Key::CTRL_DOWN: s = " CTRL_DOWN" ; break ;
72+ case Term::Key::CTRL_RIGHT: s = " CTRL_RIGHT" ; break ;
73+ case Term::Key::CTRL_LEFT: s = " CTRL_LEFT" ; break ;
74+ case Term::Key::NUMERIC_5: s = " NUMERIC_5" ; break ;
75+ case Term::Key::DEL: s = " DELETE" ; break ;
76+ case Term::Key::HOME: s = " HOME" ; break ;
77+ case Term::Key::INSERT: s = " INSERT" ; break ;
78+ case Term::Key::END: s = " END" ; break ;
79+ case Term::Key::PAGE_UP: s = " PAGE_UP" ; break ;
80+ case Term::Key::PAGE_DOWN: s = " PAGE_DOWN" ; break ;
81+ case Term::Key::ESC: s = " ESC" ; break ;
82+ case Term::Key::F1: s = " F1" ; break ;
83+ case Term::Key::F2: s = " F2" ; break ;
84+ case Term::Key::F3: s = " F3" ; break ;
85+ case Term::Key::F4: s = " F4" ; break ;
86+ case Term::Key::F5: s = " F5" ; break ;
87+ case Term::Key::F6: s = " F6" ; break ;
88+ case Term::Key::F7: s = " F7" ; break ;
89+ case Term::Key::F8: s = " F8" ; break ;
90+ case Term::Key::F9: s = " F9" ; break ;
91+ case Term::Key::F10: s = " F10" ; break ;
92+ case Term::Key::F11: s = " F11" ; break ;
93+ case Term::Key::F12: s = " F12" ; break ;
94+ case Term::Key::F13: s = " F13" ; break ;
95+ case Term::Key::F14: s = " F14" ; break ;
96+ case Term::Key::F15: s = " F15" ; break ;
97+ case Term::Key::F16: s = " F16" ; break ;
98+ case Term::Key::F17: s = " F17" ; break ;
99+ case Term::Key::F18: s = " F18" ; break ;
100+ case Term::Key::F19: s = " F19" ; break ;
101+ case Term::Key::F20: s = " F20" ; break ;
102+ case Term::Key::F21: s = " F21" ; break ;
103+ case Term::Key::F22: s = " F22" ; break ;
104+ case Term::Key::F23: s = " F23" ; break ;
105+ case Term::Key::F24: s = " F24" ; break ;
106+ default : s = " Unknown:" + std::to_string (key);
107+ }
108+ }
109+ std::cout << " Key: " << s << " (" << key << " ) " << std::endl;
110+ break ;
111+ }
112+ case Term::Event::Type::CopyPaste:
113+ {
114+ std::string key_str{event};
115+ if (!key_str.empty () && key_str[0 ] == ' \033 ' )
116+ {
117+ std::cout << " You discovered a key combination not yet managed by cpp-terminal (" ;
118+ for (std::size_t i = 0 ; i != key_str.size (); ++i) std::cout << static_cast <std::int32_t >(key_str[i]) << " " ;
119+ std::cout << " ).\n Please report key combination pressed to " << Term::Homepage << std::endl;
120+ }
90121 }
91122 }
92- std::cout << " Key: " << s << std::endl;
93123 }
94124 }
95125 catch (const Term::Exception& re)
0 commit comments