/* * Load keymap. */ void set_activate_keymap(char *keymap) { char cmd[MAX_FILENAME]; char *s, enc[64]; /* keymap might be config.keymap, so be careful... */ keymap = keymap ? strdup(keymap) : NULL; if(config.keymap) free(config.keymap); if((config.keymap = keymap)) { kbd_unimode(); *enc = 0; if((s = keymap_encoding(config.keymap))) { sprintf(enc, " -c %s", s); } sprintf(cmd, "loadkeys -q %s ; dumpkeys%s >/tmp/dk ; loadkeys -q --unicode </tmp/dk", keymap, enc ); if(!config.test) { lxrc_run_console(cmd); } } }
/* * Load keymap. */ void set_activate_keymap(char *keymap) { char cmd[MAX_FILENAME]; /* keymap might be config.keymap, so be careful... */ keymap = keymap ? strdup(keymap) : NULL; if(config.keymap) free(config.keymap); if((config.keymap = keymap)) { kbd_unimode(); sprintf(cmd, "loadkeys -q %s", keymap); if(!config.test) { lxrc_run_console(cmd); } } }
void kbd_init (int first) { struct winsize winsize_ri; int fd; if(!config.test) { fd = open("/dev/tty4", O_RDWR); write(fd, "Startup...\n", sizeof "Startup...\n" - 1); close(fd); } kbd_unimode(); if(config.kbd_fd == -1) config.kbd_fd = open(config.console, O_RDWR); tcgetattr (config.kbd_fd, &kbd_norm_tio_rm); kbd_tio_rm = kbd_norm_tio_rm; if (config.linemode) { kbd_tio_rm.c_lflag &= ~ISIG; tcsetattr (config.kbd_fd, TCSAFLUSH, &kbd_tio_rm); if (first) { max_x_ig = X_DEFAULT; max_y_ig = Y_DEFAULT; } return; } kbd_tio_rm.c_cc [VMIN] = 1; kbd_tio_rm.c_cc [VTIME] = 0; kbd_tio_rm.c_lflag &= ~(ECHO | ICANON | ISIG); kbd_tio_rm.c_iflag &= ~(INLCR | IGNCR | ICRNL); if (first && !ioctl (config.kbd_fd, TIOCGWINSZ, &winsize_ri)) { if (winsize_ri.ws_col >= MIN_X && winsize_ri.ws_row >= MIN_Y) { max_x_ig = winsize_ri.ws_col; max_y_ig = winsize_ri.ws_row; } } tcsetattr (config.kbd_fd, TCSAFLUSH, &kbd_tio_rm); if (config.utf8) { write(config.kbd_fd, "\033[?1l", sizeof "\033[?1l" - 1); fsync(config.kbd_fd); write(config.kbd_fd, "\033%G", sizeof "\033%G" - 1); fsync(config.kbd_fd); } if(first && config.serial) { get_screen_size(config.kbd_fd); if(max_x_ig > MAX_X) max_x_ig = MAX_X; if(max_y_ig > MAX_Y) max_y_ig = MAX_Y; if(max_x_ig < MIN_X || max_y_ig < MIN_Y) { max_x_ig = X_DEFAULT; max_y_ig = Y_DEFAULT; } if(!config.had_segv) fprintf(stderr, "Window size: %d x %d\n", max_x_ig, max_y_ig); memset(&winsize_ri, 0, sizeof winsize_ri); winsize_ri.ws_col = max_x_ig; winsize_ri.ws_row = max_y_ig; ioctl(config.kbd_fd, TIOCSWINSZ, &winsize_ri); } }