Add beginnings of input handling
parent
26e9dd9adf
commit
43845c6115
12
chat.c
12
chat.c
|
@ -15,7 +15,9 @@
|
|||
*/
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
#include <poll.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -98,8 +100,16 @@ int main(int argc, char *argv[]) {
|
|||
ircFormat("NICK :%s\r\n", nick);
|
||||
ircFormat("USER %s 0 * :%s\r\n", user, real);
|
||||
|
||||
struct pollfd fds[2] = {
|
||||
{ .events = POLLIN, .fd = STDIN_FILENO },
|
||||
{ .events = POLLIN, .fd = irc },
|
||||
};
|
||||
for (;;) {
|
||||
int nfds = poll(fds, 2, -1);
|
||||
if (nfds < 0 && errno != EINTR) err(EX_IOERR, "poll");
|
||||
|
||||
if (fds[0].revents) uiRead();
|
||||
if (fds[1].revents) ircRecv();
|
||||
uiDraw();
|
||||
ircRecv();
|
||||
}
|
||||
}
|
||||
|
|
1
chat.h
1
chat.h
|
@ -115,6 +115,7 @@ void uiShow(void);
|
|||
void uiHide(void);
|
||||
void uiDraw(void);
|
||||
void uiShowID(size_t id);
|
||||
void uiRead(void);
|
||||
void uiWrite(size_t id, enum Heat heat, const time_t *time, const char *str);
|
||||
void uiFormat(
|
||||
size_t id, enum Heat heat, const time_t *time, const char *format, ...
|
||||
|
|
45
ui.c
45
ui.c
|
@ -14,6 +14,8 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define _XOPEN_SOURCE_EXTENDED
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <curses.h>
|
||||
|
@ -192,7 +194,7 @@ void uiInit(void) {
|
|||
keypad(input, true);
|
||||
nodelay(input, true);
|
||||
windows.active = windowFor(Network);
|
||||
//uiShow();
|
||||
uiShow();
|
||||
}
|
||||
|
||||
void uiDraw(void) {
|
||||
|
@ -397,3 +399,44 @@ void uiFormat(
|
|||
assert((size_t)len < sizeof(buf));
|
||||
uiWrite(id, heat, time, buf);
|
||||
}
|
||||
|
||||
static void keyCode(int code) {
|
||||
switch (code) {
|
||||
break; case KEY_RESIZE:; // TODO
|
||||
break; case KeyFocusIn:; // TODO
|
||||
break; case KeyFocusOut: windows.active->mark = true;
|
||||
break; case KeyPasteOn:; // TODO
|
||||
break; case KeyPasteOff:; // TODO
|
||||
}
|
||||
}
|
||||
|
||||
static void keyMeta(wchar_t ch) {
|
||||
switch (ch) {
|
||||
break; case L'm': uiWrite(windows.active->id, Cold, NULL, "");
|
||||
}
|
||||
}
|
||||
|
||||
static void keyChar(wchar_t ch) {
|
||||
switch (ch) {
|
||||
break; case CTRL(L'L'): clearok(curscr, true);
|
||||
}
|
||||
}
|
||||
|
||||
void uiRead(void) {
|
||||
int ret;
|
||||
wint_t ch;
|
||||
static bool meta;
|
||||
while (ERR != (ret = wget_wch(input, &ch))) {
|
||||
if (ret == KEY_CODE_YES) {
|
||||
keyCode(ch);
|
||||
} else if (ch == '\33') {
|
||||
meta = true;
|
||||
continue;
|
||||
} else if (meta) {
|
||||
keyMeta(ch);
|
||||
} else {
|
||||
keyChar(ch);
|
||||
}
|
||||
meta = false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue