====== Input method in FreeBSD virtual terminal (Week6) ====== Date: 07/12-07/18 ===== vt ===== This week I started to read the vt source code (''%%sys/dev/vt/%%'') Here are two useful functions I found: - ''%%vt_processkey()%%'': process key sequences - ''%%vt_mouse_paste()%%'': paste text ==== vt_processkey() ==== ''%%vt_processkey%%'' is reponsible for processing keys sequence. ==== vt_mouse_paste() ==== ''%%vt_mouse_paste()%%'' is called by ''%%vt_machine_kbdevent()%%'' when a user presses the PASTE key to paste text with mouse: case SPCLKEY | PASTE: /* kbdmap(5) keyword `paste`. */ #ifndef SC_NO_CUTPASTE /* Insert text from cut-paste buffer. */ vt_mouse_paste(); #endif And the function body: static void vt_mouse_paste() { term_char_t *buf; int i, len; len = VD_PASTEBUFLEN(main_vd); buf = VD_PASTEBUF(main_vd); len /= sizeof(term_char_t); for (i = 0; i < len; i++) { if (buf[i] == '\0') continue; terminal_input_char(main_vd->vd_curwindow->vw_terminal, buf[i]); } } It would call ''%%terminal_input_char%%'' to send characters into the current virtual terminal window. ===== Final Phase Plan ===== * Write a IME library with ''%%librime%%'', then opens a device/socket and listens for commands and events in user mode * Modify ''%%vt_processkey%%'' such that a user presses a specific key combination to enable the IME mode * After the user has enabled the IME mode, all key input will be processed with the IME library to output CJK chars * Write a send_chars function (can refer to ''%%vt_mouse_paste()%%'') to output these CJK chars if the mode * Additionally, show candidates during typing ===== This week's plans ===== * Do some experiments on ''%%vt%%'' code, especially focuses on how to input/output characters * Research how to display text to show candidates