Fix up some terminal bits, add F keys
This commit is contained in:
parent
f76616d06e
commit
cd677b44c3
Binary file not shown.
@ -53,11 +53,12 @@ size_t ring_buffer_read(ring_buffer_t * ring_buffer, size_t size, uint8_t * buff
|
||||
collected++;
|
||||
}
|
||||
spin_unlock(&ring_buffer->lock);
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
if (collected == 0) {
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
sleep_on(ring_buffer->wait_queue);
|
||||
}
|
||||
}
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
return collected;
|
||||
}
|
||||
|
||||
@ -73,12 +74,13 @@ size_t ring_buffer_write(ring_buffer_t * ring_buffer, size_t size, uint8_t * buf
|
||||
}
|
||||
|
||||
spin_unlock(&ring_buffer->lock);
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
if (written < size) {
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
sleep_on(ring_buffer->wait_queue);
|
||||
}
|
||||
}
|
||||
|
||||
wakeup_queue(ring_buffer->wait_queue);
|
||||
return written;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
toaru|toaruos framebuffer terminal,
|
||||
toaru|toaru terminal,
|
||||
mc5i,
|
||||
xenl,
|
||||
cols#128, lines#45,
|
||||
km,
|
||||
mir,
|
||||
msgr,
|
||||
cols#80, lines#24,
|
||||
colors#256, it#8, ncv#18, pairs#32767, npc, am,
|
||||
ind=^J, cr=^M,
|
||||
nel=^J, ht=^I,
|
||||
@ -36,7 +39,18 @@ toaru|toaruos framebuffer terminal,
|
||||
ri=\E[T,
|
||||
sc=\E[s,
|
||||
rc=\E[u,
|
||||
knp=\E[6~,
|
||||
kpp=\E[5~,
|
||||
kf1=\EOP,
|
||||
kf2=\EOQ,
|
||||
kf3=\EOR,
|
||||
kf4=\EOS,
|
||||
kf5=\E[15~,
|
||||
kf6=\E[17~,
|
||||
kf7=\E[18~,
|
||||
kf8=\E[19~,
|
||||
kf9=\E[20~,
|
||||
kf10=\E[21~,
|
||||
kf11=\E[23~,
|
||||
kf12=\E[24~,
|
||||
|
||||
toaru-small|toaruos windowed terminal at 80x24,
|
||||
use=toaru,
|
||||
cols#80, lines#24,
|
||||
|
@ -40,6 +40,7 @@ size_t shell_scroll = 0;
|
||||
char shell_temp[1024];
|
||||
|
||||
int shell_interactive = 1;
|
||||
int shell_force_raw = 0;
|
||||
|
||||
int pid; /* Process ID of the shell */
|
||||
|
||||
@ -861,6 +862,8 @@ _done:
|
||||
|
||||
shell_command_t func = shell_find(argv[0]);
|
||||
|
||||
if (shell_force_raw) set_unbuffered();
|
||||
|
||||
if (func) {
|
||||
return func(tokenid, argv);
|
||||
} else {
|
||||
@ -1103,6 +1106,12 @@ uint32_t shell_cmd_set(int argc, char * argv[]) {
|
||||
printf("\033[3000;%s;%sz", argv[2], argv[3]);
|
||||
fflush(stdout);
|
||||
return 0;
|
||||
} else if (!strcmp(argv[1], "force-raw")) {
|
||||
shell_force_raw = 1;
|
||||
return 0;
|
||||
} else if (!strcmp(argv[1], "no-force-raw")) {
|
||||
shell_force_raw = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,6 +75,7 @@ typedef struct _terminal_cell {
|
||||
|
||||
/* master and slave pty descriptors */
|
||||
static int fd_master, fd_slave;
|
||||
static FILE * terminal;
|
||||
|
||||
int scale_fonts = 0; /* Whether fonts should be scaled */
|
||||
float font_scaling = 1.0; /* How much they should be scaled by */
|
||||
@ -686,13 +687,6 @@ void ansi_init(void (*writer)(char), int w, int y, void (*setcolor)(uint32_t, ui
|
||||
ansi_set_color(state.fg, state.bg);
|
||||
}
|
||||
|
||||
void ansi_print(char * c) {
|
||||
uint32_t len = strlen(c);
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
ansi_put(c[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void render_decors() {
|
||||
if (_windowed) {
|
||||
if (terminal_title_length) {
|
||||
@ -844,10 +838,7 @@ term_write_char(
|
||||
}
|
||||
error = FT_Load_Glyph(*_font, glyph_index, FT_LOAD_DEFAULT);
|
||||
if (error) {
|
||||
char tmp[256];
|
||||
sprintf(tmp, "%d", val);
|
||||
ansi_print("Error loading glyph: ");
|
||||
ansi_print(tmp);
|
||||
fprintf(terminal, "Error loading glyph: %d\n", val);
|
||||
};
|
||||
slot = (*_font)->glyph;
|
||||
if (slot->format == FT_GLYPH_FORMAT_OUTLINE) {
|
||||
@ -1336,7 +1327,8 @@ int buffer_put(char c) {
|
||||
input_collected--;
|
||||
input_buffer[input_collected] = '\0';
|
||||
if (state.local_echo) {
|
||||
ansi_print("\010 \010");
|
||||
fprintf(terminal, "\010 \010");
|
||||
fflush(terminal);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -1350,7 +1342,8 @@ int buffer_put(char c) {
|
||||
}
|
||||
input_buffer[input_collected] = c;
|
||||
if (state.local_echo) {
|
||||
ansi_put(c);
|
||||
fprintf(terminal, "%c", c);
|
||||
fflush(terminal);
|
||||
}
|
||||
if (input_buffer[input_collected] == '\n') {
|
||||
input_collected++;
|
||||
@ -1375,9 +1368,13 @@ void handle_input(char c) {
|
||||
}
|
||||
|
||||
void handle_input_s(char * c) {
|
||||
while (*c) {
|
||||
handle_input(*c);
|
||||
c++;
|
||||
if (_unbuffered) {
|
||||
write(fd_master, c, strlen(c));
|
||||
} else {
|
||||
while (*c) {
|
||||
handle_input(*c);
|
||||
c++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1387,6 +1384,42 @@ void key_event(int ret, key_event_t * event) {
|
||||
} else {
|
||||
if (event->action == KEY_ACTION_UP) return;
|
||||
switch (event->keycode) {
|
||||
case KEY_F1:
|
||||
handle_input_s("\033OP");
|
||||
break;
|
||||
case KEY_F2:
|
||||
handle_input_s("\033OQ");
|
||||
break;
|
||||
case KEY_F3:
|
||||
handle_input_s("\033OR");
|
||||
break;
|
||||
case KEY_F4:
|
||||
handle_input_s("\033OS");
|
||||
break;
|
||||
case KEY_F5:
|
||||
handle_input_s("\033[15~");
|
||||
break;
|
||||
case KEY_F6:
|
||||
handle_input_s("\033[17~");
|
||||
break;
|
||||
case KEY_F7:
|
||||
handle_input_s("\033[18~");
|
||||
break;
|
||||
case KEY_F8:
|
||||
handle_input_s("\033[19~");
|
||||
break;
|
||||
case KEY_F9:
|
||||
handle_input_s("\033[20~");
|
||||
break;
|
||||
case KEY_F10:
|
||||
handle_input_s("\033[21~");
|
||||
break;
|
||||
case KEY_F11:
|
||||
handle_input_s("\033[23~");
|
||||
break;
|
||||
case KEY_F12:
|
||||
handle_input_s("\033[24~");
|
||||
break;
|
||||
case KEY_ARROW_UP:
|
||||
handle_input_s("\033[A");
|
||||
break;
|
||||
@ -1407,6 +1440,8 @@ void key_event(int ret, key_event_t * event) {
|
||||
i++;
|
||||
}
|
||||
redraw_scrollback();
|
||||
} else {
|
||||
handle_input_s("\033[5~");
|
||||
}
|
||||
break;
|
||||
case KEY_PAGE_DOWN:
|
||||
@ -1417,6 +1452,8 @@ void key_event(int ret, key_event_t * event) {
|
||||
i++;
|
||||
}
|
||||
redraw_scrollback();
|
||||
} else {
|
||||
handle_input_s("\033[6~");
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1760,6 +1797,8 @@ int main(int argc, char ** argv) {
|
||||
|
||||
syscall_openpty(&fd_master, &fd_slave, NULL, NULL, NULL);
|
||||
|
||||
terminal = fdopen(fd_slave, "w");
|
||||
|
||||
reinit();
|
||||
|
||||
int pid = getpid();
|
||||
|
Loading…
x
Reference in New Issue
Block a user