/* Readline callback. Redisplay the command line with its prompt after readline has changed the edited text. */ void tui_redisplay_readline(void) { int prev_col; int height; int col, line; int c_pos; int c_line; int in; WINDOW *w; const char *prompt; int start_line; /* Detect when we temporarily left SingleKey and now the readline edit buffer is empty, automatically restore the SingleKey mode. */ if ((tui_current_key_mode == TUI_ONE_COMMAND_MODE) && (rl_end == 0)) tui_set_key_mode(TUI_SINGLE_KEY_MODE); if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) prompt = ""; else prompt = tui_rl_saved_prompt; c_pos = -1; c_line = -1; w = TUI_CMD_WIN->generic.handle; start_line = TUI_CMD_WIN->detail.command_info.start_line; wmove(w, start_line, 0); prev_col = 0; height = 1; for (in = 0; prompt && prompt[in]; in++) { waddch(w, prompt[in]); getyx(w, line, col); if (col < prev_col) height++; prev_col = col; } for (in = 0; in < rl_end; in++) { unsigned char c; c = (unsigned char)rl_line_buffer[in]; if (in == rl_point) { getyx(w, c_line, c_pos); } if (CTRL_CHAR(c) || (c == RUBOUT)) { waddch(w, '^'); waddch(w, CTRL_CHAR(c) ? UNCTRL(c) : '?'); } else { waddch(w, c); } if (c == '\n') { getyx(w, TUI_CMD_WIN->detail.command_info.start_line, TUI_CMD_WIN->detail.command_info.curch); } getyx(w, line, col); if (col < prev_col) height++; prev_col = col; } wclrtobot(w); getyx(w, TUI_CMD_WIN->detail.command_info.start_line, TUI_CMD_WIN->detail.command_info.curch); if (c_line >= 0) { wmove(w, c_line, c_pos); TUI_CMD_WIN->detail.command_info.cur_line = c_line; TUI_CMD_WIN->detail.command_info.curch = c_pos; } TUI_CMD_WIN->detail.command_info.start_line -= (height - 1); wrefresh(w); fflush(stdout); /* this conditional is just to silence '-Wunused-but-set-variable': */ if (line == 0) { return; } }
void echo_keyb_characters() { int c; while(1) { c = getc(stdin); printf("Key number: '%3d' / Char: '%c' Meta: %d Ctrl: %d Ctrl mask: %d\n", c, c, META_CHAR(c), CTRL_CHAR(c), c&control_character_mask); } }
/* Readline callback. Redisplay the command line with its prompt after readline has changed the edited text. */ void tui_redisplay_readline (void) { int prev_col; int height; int col; int c_pos; int c_line; int in; WINDOW *w; const char *prompt; int start_line; /* Detect when we temporarily left SingleKey and now the readline edit buffer is empty, automatically restore the SingleKey mode. The restore must only be done if the command has finished. The command could call prompt_for_continue and we must not restore SingleKey so that the prompt and normal keymap are used. */ if (tui_current_key_mode == TUI_ONE_COMMAND_MODE && rl_end == 0 && !gdb_in_secondary_prompt_p (current_ui)) tui_set_key_mode (TUI_SINGLE_KEY_MODE); if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) prompt = ""; else prompt = tui_rl_saved_prompt; c_pos = -1; c_line = -1; w = TUI_CMD_WIN->generic.handle; start_line = TUI_CMD_WIN->detail.command_info.start_line; wmove (w, start_line, 0); prev_col = 0; height = 1; for (in = 0; prompt && prompt[in]; in++) { waddch (w, prompt[in]); col = getcurx (w); if (col <= prev_col) height++; prev_col = col; } for (in = 0; in <= rl_end; in++) { unsigned char c; if (in == rl_point) { getyx (w, c_line, c_pos); } if (in == rl_end) break; c = (unsigned char) rl_line_buffer[in]; if (CTRL_CHAR (c) || c == RUBOUT) { waddch (w, '^'); waddch (w, CTRL_CHAR (c) ? UNCTRL (c) : '?'); } else if (c == '\t') { /* Expand TABs, since ncurses on MS-Windows doesn't. */ col = getcurx (w); do { waddch (w, ' '); col++; } while ((col % 8) != 0); } else { waddch (w, c); } if (c == '\n') TUI_CMD_WIN->detail.command_info.start_line = getcury (w); col = getcurx (w); if (col < prev_col) height++; prev_col = col; } wclrtobot (w); TUI_CMD_WIN->detail.command_info.start_line = getcury (w); if (c_line >= 0) wmove (w, c_line, c_pos); TUI_CMD_WIN->detail.command_info.start_line -= height - 1; wrefresh (w); fflush(stdout); }
/* Readline callback. Redisplay the command line with its prompt after readline has changed the edited text. */ void tui_redisplay_readline (void) { int prev_col; int height; int col, line; int c_pos; int c_line; int in; WINDOW *w; char *prompt; int start_line; /* Detect when we temporarily left SingleKey and now the readline edit buffer is empty, automatically restore the SingleKey mode. The restore must only be done if the command has finished. The command could call prompt_for_continue and we must not restore SingleKey so that the prompt and normal keymap are used. */ if (tui_current_key_mode == TUI_ONE_COMMAND_MODE && rl_end == 0 && immediate_quit == 0) tui_set_key_mode (TUI_SINGLE_KEY_MODE); if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) prompt = ""; else prompt = tui_rl_saved_prompt; c_pos = -1; c_line = -1; w = TUI_CMD_WIN->generic.handle; start_line = TUI_CMD_WIN->detail.command_info.start_line; wmove (w, start_line, 0); prev_col = 0; height = 1; for (in = 0; prompt && prompt[in]; in++) { waddch (w, prompt[in]); getyx (w, line, col); if (col < prev_col) height++; prev_col = col; } for (in = 0; in < rl_end; in++) { unsigned char c; c = (unsigned char) rl_line_buffer[in]; if (in == rl_point) { getyx (w, c_line, c_pos); } if (CTRL_CHAR (c) || c == RUBOUT) { waddch (w, '^'); waddch (w, CTRL_CHAR (c) ? UNCTRL (c) : '?'); } else { waddch (w, c); } if (c == '\n') { getyx (w, TUI_CMD_WIN->detail.command_info.start_line, TUI_CMD_WIN->detail.command_info.curch); } getyx (w, line, col); if (col < prev_col) height++; prev_col = col; } wclrtobot (w); getyx (w, TUI_CMD_WIN->detail.command_info.start_line, TUI_CMD_WIN->detail.command_info.curch); if (c_line >= 0) { wmove (w, c_line, c_pos); TUI_CMD_WIN->detail.command_info.cur_line = c_line; TUI_CMD_WIN->detail.command_info.curch = c_pos; } TUI_CMD_WIN->detail.command_info.start_line -= height - 1; wrefresh (w); fflush(stdout); }