📄 window.vtc
字号:
enum(&PG_OFF, &PG_ON, &PG_PAUSED);Twin ?:= new_assoc();default_pager_state ?:= PG_OFF;func std_split(win, row) [new] { new = split(win, row); if (new) init_win(new); return new;}func init_win(win) { set_obj(win, alloc(4, Twin)); win->status = ""; win->pstate = default_pager_state; win->pcount = 0; win->buffer = new_list(); set_termread(win, .std_termread);}[i] ulines = ""; for (i = 0; i < cols; i++) ulines[i] = '_';func stwrite(win, col, s / blanks) { blanks = (blanks && blanks > 0) ? blanks : 0; cmove(col + 2, win_bottom(win) + 1); write(s + field(ulines, blanks)); curs_reset();}func write_status(w, c / b) { stwrite(w, c, w->status + c, b); }func add_status(win, msg / left) [status] { status = win->status; win->status = (left) ? (msg + "_" + status) : (status + msg + "_"); write_status(win, left ? 0 : strlen(status));}func del_status(win, msg) [status, p] { status = win->status; p = strstr(status, msg + "_"); if (!p) return -1; win->status = field(status, p - status) + (p + strlen(msg) + 1); write_status(win, p - status, strlen(msg));}func change_status(win, msg, new / left) [status, p] { if (!*msg || !*new) { return (*new) ? add_status(win, new, left) : (*msg) ? del_status(win, msg) : NULL; } status = win->status; p = strstr(status, msg + "_"); if (!p) return -1; win->status = field(status, p - status) + new + (p + strlen(msg)); if (strlen(msg) == strlen(new)) stwrite(win, p - status, new); else write_status(win, p - status, strlen(msg) - strlen(new));}func redraw_hook() [win] { edfunc(K_REDRAW); for (win = head(T_WIN); win; win = next(win)) write_status(win, 0); curs_reset();}display_hook ?:= make_hook();func std_display(win, rmt / suppress) [old] { old = win_rmt(win); if (display(win, rmt) == -1) return -1; change_status(win, old ? old->name : "", rmt ? rmt->name : "", 1); change_status(win, log_string(old), log_string(rmt)); if (rmt && !suppress) printf(win, "--- World %s ---\n", rmt->name); else if (!suppress) output("--- No world ---\n", S_NORM, win); reset_prompt(); exec_hook(display_hook, win, rmt, old);}func disconnect_hook() [l] { if (errflag) printf("Disconnected: %s\n", errmsg); if (rmt_win(cur_rmt)) { del_status(rmt_win(cur_rmt), cur_rmt->name); if (rmt_win(cur_rmt) == active) prompt = ""; }}func output(text / style, w) [style, p, left, len] { w ?:= cur_win ? : active; if (w->pstate == PG_PAUSED) return add_list(w->buffer, table(text, style)); if (style == S_HILITE) bold(1); if (w->pstate == PG_ON) { len = win_bottom(w) - win_top(w); for (; *text && w->pcount <= len; text = p) { left = cols - win_col(w); p = (strchr(text, '\n', left) ? : text + left - 1) + 1; echo(w, strcpy("", text, p - text)); if (p[-1]) w->pcount++; } } else echo(w, text); if (style == S_HILITE) bold(0); if (w->pstate == PG_ON && *text) { w->pstate = PG_PAUSED; add_status(w, "[PAUSED]"); add_list(w->buffer, table(text, style)); }}func unpause(type / w) [b] { w ?:= cur_win ? : active; w->pcount = 0; if (w->pstate == PG_PAUSED) { del_status(w, "[PAUSED]"); w->pstate = (type == 2) ? PG_OFF : PG_ON; b = w->buffer; w->buffer = new_list(); if (type != 1) { while (*++b) output((*b)[0], (*b)[1], w); } } else if (type == 2) w->pstate = PG_OFF;}func reset_pager(/ w) { unpause(0, w); }func discard_pager_buffer(/ w) { unpause(1, w); }func perror(s) { printf("%s: %s\n", s, errmsg); }func isize(n) --> resize(active, rows - n - 1)func Split(s) { if (!std_split(active, atoi(s))) perror("split"); }func Resize(s) { if (resize(active, win_top(active) + atoi(s))) perror("resize");}func Isize(s) { if (isize(atoi(s))) perror("isize"); }func Close(s) { if (close(active, atoi(s))) perror("Close"); }func More(s) [w, v] { w = cur_win ? : active; v = get_flag(s); if (v == 1 && w->pstate == PG_OFF) { w->pstate = PG_ON; w->pcount = 0; } else if (v == 0) unpause(2); else if (v == 2) printf("Paging is %s\n", w->pstate ? "on" : "off");} add_cmd("split", 1, .Split, "/split <row>");add_cmd("resize", 1, .Resize, "/resize <size>");add_cmd("isize", 1, .Isize, "/isize <size>");add_cmd("close", -1, .Close, "/close");add_cmd("more", -1, .More, "/more [on|off]");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -