static int putxy(WINDOW *win, int width, int *i, int *y, int *x, char *str) { if ((unsigned char) str[0] > 0x7F) { wchar_t dest[2]; int bytes = mbtowc(dest, &str[0], 3) - 1; if (bytes >= 0) { /* To deal with non-latin characters that can take up more than one character's alotted width, with offset x by wcwidth(character) rather than 1 */ /* Took me forever to find that function, thanks Andreas (newsbeuter) for that one. */ int rwidth = wcwidth(dest[0]); if (rwidth < 0) rwidth = 1; if (rwidth > (width - *x)) return 1; dest[1] = 0; mvwaddwstr(win, *y, *x, dest); *x += rwidth; *i += bytes; } } else mvwaddch(win, *y, (*x)++, str[0]); return 0; }
int t_mv_wprint(WINDOW *win, int x, int y, t_char *fmt, ...) { wchar_t buf[MAX_PRINT_LEN]; va_list args; va_start(args, fmt); vswprintf(buf, MAX_PRINT_LEN, fmt, args); va_end(args); return mvwaddwstr(win, y, x, buf); }
/* Also updates cursor. */ static void update_cmdline_text(void) { int attr; input_line_changed(); werase(status_bar); attr = cfg.cs.color[CMD_LINE_COLOR].attr; wattron(status_bar, COLOR_PAIR(DCOLOR_BASE + CMD_LINE_COLOR) | attr); mvwaddwstr(status_bar, 0, 0, input_stat.prompt); if(input_stat.line != NULL) mvwaddwstr(status_bar, input_stat.prompt_wid/line_width, input_stat.prompt_wid%line_width, input_stat.line); update_cursor(); wrefresh(status_bar); }
static void cmd_ctrl_u(key_info_t key_info, keys_info_t *keys_info) { input_stat.history_search = HIST_NONE; stop_completion(); if(input_stat.index == 0) return; input_stat.len -= input_stat.index; input_stat.curs_pos = input_stat.prompt_wid; wcsdel(input_stat.line, 1, input_stat.index); input_stat.index = 0; werase(status_bar); mvwaddwstr(status_bar, 0, 0, input_stat.prompt); mvwaddwstr(status_bar, 0, input_stat.prompt_wid, input_stat.line); update_cmdline_text(); }
void NYView::guiDrawCell(YCursor pos, const YDrawCell& cell) { int x = pos.x(); if(!fakeLine) { /* if this line is a fake, don't apply margins */ x += marginLeft; } /* * TODO: reverse bg/fg... but... how set bg ? if ( cell.sel & YSelectionPool::Visual ) { } */ int mAttributes = attribWhite; if(cell.foregroundColor().isValid()) { int rawcolor = cell.foregroundColor().rgb() & RGB_MASK; if(mAttributesMap.contains(rawcolor)) { mAttributes = mAttributesMap[ rawcolor ]; } else { yzWarning() << "Unknown color from libyzis, cell.foregroundColor().name() is " << cell.foregroundColor().name() << endl; } } if(cell.hasSelection(yzis::SelectionAny)) { mAttributes |= A_REVERSE; // TODO, reverse bg/fg } //if ( drawUnderline() ) mAttributes |= A_UNDERLINE; /* convert string to wide_char */ QByteArray my_char = cell.content().toLocal8Bit(); char* from_char = new char[ my_char.length() + 1 ]; strcpy(from_char, my_char.constData()); size_t needed = mbstowcs(NULL, from_char, strlen(from_char)) + 1; wchar_t* wide_char = (wchar_t*)malloc(needed * sizeof(wchar_t)); mbstowcs(wide_char, from_char, strlen(from_char)); wide_char[needed - 1] = '\0'; wattron(editor, mAttributes); mvwaddwstr(editor, pos.y(), x, wide_char); wattroff(editor, mAttributes); free(wide_char); delete[] from_char; }
static void ex_draw() { log_msg("EXCMD", "ex_draw"); werase(ex.nc_win); if (ex.ex_state == EX_CMD_STATE) menu_draw(ex.menu); pos_T max = layout_size(); wchar_t *wline = str2wide(ex.line); int len = 2 + wcswidth(wline, -1); int offset = MAX(len - (max.col - 1), 0); mvwaddch(ex.nc_win, 0, 0, ex.state_symbol); mvwaddwstr(ex.nc_win, 0, 1, &wline[offset]); mvwchgat(ex.nc_win, 0, 0, 1, A_NORMAL, ex.col_symb, NULL); mvwchgat(ex.nc_win, 0, 1, -1, A_NORMAL, ex.col_text, NULL); doupdate(); curs_set(1); wmove(ex.nc_win, 0, (ex.curpos + 1) - offset); wnoutrefresh(ex.nc_win); free(wline); }
static void show_1st(WINDOW *win, int line, wchar_t *buffer) { (void) mvwaddwstr(win, line, 5, buffer); }
int mvaddwstr(int y, int x, wchar_t *ws) { return (mvwaddwstr(stdscr, y, x, ws)); }
int t_mv_vwprint(WINDOW *win, int x, int y, t_char *fmt, va_list args) { wchar_t buf[MAX_PRINT_LEN]; vswprintf(buf, MAX_PRINT_LEN, fmt, args); return mvwaddwstr(win, y, x, buf); }
main() { setlocale(LC_ALL, "en_US.UTF-8"); WINDOW * mainwin; if ( (mainwin = initscr()) == NULL ) { fprintf(stderr, "Error initialising ncurses.\n"); exit(EXIT_FAILURE); } int height = 29; int width = 80; mvaddstr(0, 0, "+------------------------------------------------------------------------------+"); int u; for(u=1;u<height;u++) { mvaddstr(u,0,"| |"); } mvaddstr(height, 0, "+------------------------------------------------------------------------------+"); /*setvbuf (stdout, NULL, _IONBF, 0); printf("asds \n");*/ int gridHeight= 15; int gridWidth= 15; int** grid = createGrid(gridHeight,gridWidth); /*grid[2][2]=1;grid[3][2]=1;grid[2][1]=1;grid[2][3]=1;*//*grid[1][2]=1;*/ grid[1][0]=1;grid[0][2]=1;grid[1][2]=1;grid[2][2]=1;grid[2][1]=1; /*grid[4][4]=1;grid[4][3]=1;grid[4][5]=1;*/ makeDisp(grid, gridHeight, gridWidth);sleep(3); int** newgrid; int o = 0; while(o<1) { /*usleep(125000);*/ newgrid = onestep(grid, gridHeight, gridWidth); int i; /*for(i=0;i<gridHeight;i++) free(grid[i]); free(grid);*/ /*printf("\n");*/ printGrid(newgrid, gridHeight, gridWidth); o++; grid = newgrid; } wchar_t* wstr = L"\u2593"; mvwaddwstr(mainwin, 1, 1, wstr); refresh();sleep(2); usleep(500000); mvaddstr(1, 2, "e"); refresh(); usleep(500000); mvaddstr(1, 3, "l"); refresh(); usleep(500000); mvaddstr(1, 4, "l"); refresh(); usleep(500000); mvaddstr(1, 5, "o"); refresh(); usleep(500000); mvaddstr(1, 6, "!"); refresh(); usleep(500000); delwin(mainwin); endwin(); refresh(); return 0; }