File src/cmdline.c changed (mode: 100644) (index 25a1165bb..34f2952ec) |
... |
... |
def_handler(wchar_t key) |
287 |
287 |
if(key != L'\r' && !iswprint(key)) |
if(key != L'\r' && !iswprint(key)) |
288 |
288 |
return 0; |
return 0; |
289 |
289 |
|
|
290 |
|
p = realloc(input_stat.line, (input_stat.len+2) * sizeof(wchar_t)); |
|
|
290 |
|
p = realloc(input_stat.line, (input_stat.len + 2) * sizeof(wchar_t)); |
291 |
291 |
if(p == NULL) |
if(p == NULL) |
292 |
292 |
{ |
{ |
293 |
293 |
leave_cmdline_mode(); |
leave_cmdline_mode(); |
|
... |
... |
def_handler(wchar_t key) |
303 |
303 |
wcsins(input_stat.line, buf, input_stat.index); |
wcsins(input_stat.line, buf, input_stat.index); |
304 |
304 |
input_stat.len++; |
input_stat.len++; |
305 |
305 |
|
|
306 |
|
if((input_stat.len + 1) % getmaxx(status_bar) == 0) |
|
307 |
|
update_cmdline_size(); |
|
308 |
|
|
|
309 |
306 |
input_stat.curs_pos += wcwidth(key); |
input_stat.curs_pos += wcwidth(key); |
|
307 |
|
|
|
308 |
|
update_cmdline_size(); |
310 |
309 |
update_cmdline_text(); |
update_cmdline_text(); |
311 |
310 |
|
|
312 |
311 |
return 0; |
return 0; |
|
... |
... |
static void |
316 |
315 |
update_cmdline_size(void) |
update_cmdline_size(void) |
317 |
316 |
{ |
{ |
318 |
317 |
int d; |
int d; |
319 |
|
d = (input_stat.prompt_wid + input_stat.len + 1 + line_width - 1)/line_width; |
|
|
318 |
|
int cursor_at_the_end; |
|
319 |
|
|
|
320 |
|
cursor_at_the_end = ((input_stat.prompt_wid + input_stat.len) == |
|
321 |
|
input_stat.curs_pos); |
|
322 |
|
d = (input_stat.prompt_wid + input_stat.len + cursor_at_the_end + line_width - |
|
323 |
|
1)/line_width; |
320 |
324 |
mvwin(status_bar, getmaxy(stdscr) - d, 0); |
mvwin(status_bar, getmaxy(stdscr) - d, 0); |
321 |
325 |
wresize(status_bar, d, line_width); |
wresize(status_bar, d, line_width); |
322 |
326 |
|
|
|
... |
... |
update_cmdline_text(void) |
330 |
334 |
werase(status_bar); |
werase(status_bar); |
331 |
335 |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
332 |
336 |
if(input_stat.line != NULL) |
if(input_stat.line != NULL) |
333 |
|
mvwaddwstr(status_bar, 0, input_stat.prompt_wid, input_stat.line); |
|
334 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
337 |
|
mvwaddwstr(status_bar, input_stat.prompt_wid/line_width, |
|
338 |
|
input_stat.prompt_wid%line_width, input_stat.line); |
|
339 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
340 |
|
input_stat.curs_pos%line_width); |
|
341 |
|
wrefresh(status_bar); |
335 |
342 |
} |
} |
336 |
343 |
|
|
337 |
344 |
/* Insert a string into another string |
/* Insert a string into another string |
|
... |
... |
prepare_cmdline_mode(const wchar_t *prompt, const wchar_t *cmd) |
437 |
444 |
input_stat.history_search = 0; |
input_stat.history_search = 0; |
438 |
445 |
input_stat.line_buf = NULL; |
input_stat.line_buf = NULL; |
439 |
446 |
|
|
440 |
|
wcsncpy(input_stat.prompt, prompt, sizeof(input_stat.prompt)/sizeof(wchar_t)); |
|
|
447 |
|
wcsncpy(input_stat.prompt, prompt, ARRAY_LEN(input_stat.prompt)); |
441 |
448 |
input_stat.prompt_wid = input_stat.curs_pos = wcslen(input_stat.prompt); |
input_stat.prompt_wid = input_stat.curs_pos = wcslen(input_stat.prompt); |
442 |
449 |
|
|
443 |
450 |
if(input_stat.len != 0) |
if(input_stat.len != 0) |
|
... |
... |
cmd_ctrl_h(struct key_info key_info, struct keys_info *keys_info) |
542 |
549 |
input_stat.len--; |
input_stat.len--; |
543 |
550 |
|
|
544 |
551 |
input_stat.curs_pos -= wcwidth(input_stat.line[input_stat.index]); |
input_stat.curs_pos -= wcwidth(input_stat.line[input_stat.index]); |
545 |
|
wcsdel(input_stat.line, input_stat.index+1, 1); |
|
|
552 |
|
wcsdel(input_stat.line, input_stat.index + 1, 1); |
546 |
553 |
|
|
547 |
554 |
werase(status_bar); |
werase(status_bar); |
548 |
555 |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
|
... |
... |
cmd_ctrl_u(struct key_info key_info, struct keys_info *keys_info) |
746 |
753 |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
747 |
754 |
mvwaddwstr(status_bar, 0, input_stat.prompt_wid, input_stat.line); |
mvwaddwstr(status_bar, 0, input_stat.prompt_wid, input_stat.line); |
748 |
755 |
|
|
749 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
756 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
757 |
|
input_stat.curs_pos%line_width); |
750 |
758 |
} |
} |
751 |
759 |
|
|
752 |
760 |
static void |
static void |
|
... |
... |
cmd_ctrl_w(struct key_info key_info, struct keys_info *keys_info) |
769 |
777 |
werase(status_bar); |
werase(status_bar); |
770 |
778 |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
771 |
779 |
waddwstr(status_bar, input_stat.line); |
waddwstr(status_bar, input_stat.line); |
772 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
780 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
781 |
|
input_stat.curs_pos%line_width); |
773 |
782 |
} |
} |
774 |
783 |
|
|
775 |
784 |
static void |
static void |
776 |
785 |
cmd_meta_b(struct key_info key_info, struct keys_info *keys_info) |
cmd_meta_b(struct key_info key_info, struct keys_info *keys_info) |
777 |
786 |
{ |
{ |
778 |
787 |
find_prev_word(); |
find_prev_word(); |
779 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
788 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
789 |
|
input_stat.curs_pos%line_width); |
780 |
790 |
} |
} |
781 |
791 |
|
|
782 |
792 |
static void |
static void |
|
... |
... |
cmd_meta_d(struct key_info key_info, struct keys_info *keys_info) |
816 |
826 |
werase(status_bar); |
werase(status_bar); |
817 |
827 |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
mvwaddwstr(status_bar, 0, 0, input_stat.prompt); |
818 |
828 |
waddwstr(status_bar, input_stat.line); |
waddwstr(status_bar, input_stat.line); |
819 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
829 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
830 |
|
input_stat.curs_pos%line_width); |
820 |
831 |
} |
} |
821 |
832 |
|
|
822 |
833 |
static void |
static void |
823 |
834 |
cmd_meta_f(struct key_info key_info, struct keys_info *keys_info) |
cmd_meta_f(struct key_info key_info, struct keys_info *keys_info) |
824 |
835 |
{ |
{ |
825 |
836 |
find_next_word(); |
find_next_word(); |
826 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
837 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
838 |
|
input_stat.curs_pos%line_width); |
827 |
839 |
} |
} |
828 |
840 |
|
|
829 |
841 |
static void |
static void |
|
... |
... |
cmd_home(struct key_info key_info, struct keys_info *keys_info) |
878 |
890 |
{ |
{ |
879 |
891 |
input_stat.index = 0; |
input_stat.index = 0; |
880 |
892 |
input_stat.curs_pos = wcslen(input_stat.prompt); |
input_stat.curs_pos = wcslen(input_stat.prompt); |
881 |
|
wmove(status_bar, 0, input_stat.curs_pos); |
|
|
893 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
894 |
|
input_stat.curs_pos%line_width); |
882 |
895 |
} |
} |
883 |
896 |
|
|
884 |
897 |
static void |
static void |
|
... |
... |
static void |
1070 |
1083 |
update_cmdline(void) |
update_cmdline(void) |
1071 |
1084 |
{ |
{ |
1072 |
1085 |
int d; |
int d; |
1073 |
|
input_stat.curs_pos = input_stat.prompt_wid |
|
1074 |
|
+ wcswidth(input_stat.line, input_stat.len); |
|
|
1086 |
|
input_stat.curs_pos = input_stat.prompt_wid + |
|
1087 |
|
wcswidth(input_stat.line, input_stat.len); |
1075 |
1088 |
input_stat.index = input_stat.len; |
input_stat.index = input_stat.len; |
1076 |
1089 |
|
|
1077 |
1090 |
d = (input_stat.prompt_wid + input_stat.len + 1 + line_width - 1)/line_width; |
d = (input_stat.prompt_wid + input_stat.len + 1 + line_width - 1)/line_width; |
|
... |
... |
insert_completed_command(struct line_stats *stat, const char *complete_command) |
1259 |
1272 |
werase(status_bar); |
werase(status_bar); |
1260 |
1273 |
mvwaddwstr(status_bar, 0, 0, stat->prompt); |
mvwaddwstr(status_bar, 0, 0, stat->prompt); |
1261 |
1274 |
mvwaddwstr(status_bar, 0, stat->prompt_wid, stat->line); |
mvwaddwstr(status_bar, 0, stat->prompt_wid, stat->line); |
1262 |
|
wmove(status_bar, 0, stat->curs_pos); |
|
|
1275 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
1276 |
|
input_stat.curs_pos%line_width); |
1263 |
1277 |
|
|
1264 |
1278 |
return 0; |
return 0; |
1265 |
1279 |
} |
} |
|
... |
... |
static void redraw_status_bar(struct line_stats *stat) |
1561 |
1575 |
werase(status_bar); |
werase(status_bar); |
1562 |
1576 |
mvwaddwstr(status_bar, 0, 0, stat->prompt); |
mvwaddwstr(status_bar, 0, 0, stat->prompt); |
1563 |
1577 |
mvwaddwstr(status_bar, 0, stat->prompt_wid, stat->line); |
mvwaddwstr(status_bar, 0, stat->prompt_wid, stat->line); |
1564 |
|
wmove(status_bar, 0, stat->curs_pos); |
|
|
1578 |
|
wmove(status_bar, input_stat.curs_pos/line_width, |
|
1579 |
|
input_stat.curs_pos%line_width); |
1565 |
1580 |
} |
} |
1566 |
1581 |
|
|
1567 |
1582 |
static size_t |
static size_t |