📄 watch.vtc
字号:
if (!depend_loaded) Load("depend");register_file("watch");file_depends_on("bracket");Twatch ?:= new_assoc();watches ?:= new_list();watch_interval = 60;func new_watch(name) [watch] { watch = alloc(2, Twatch); watch->name = name; watch->found = new_list(); return watch;}func find_watch(name) [i] { for (i = 1; i <= *watches && stricmp(watches[i]->name, name); i++); return (i <= *watches) ? i : NULL;}func watch() [r] { while (1) { sleep(watch_interval); if (!*watches) continue; cleanup_watches(); for (r = head(T_RMT); r; r = next(r)) check_watches(r); }}func cleanup_watches() [i, j, found] { for (i = 1; i <= *watches; i++) { found = watches[i]->found; for (j = 1; j <= *found; j++) { if (!found[j]) del_list(found, j--); } }}func check_watches(r) [wtype, i, j, k, l, name] { if (!r->type->bracket) return; who = get_cmd_response("WHO", r); for (i = 1; i <= *watches; i++) { name = watches[i]->name; found = watches[i]->found; l = strlen(name); for (j = 1; j <= *who && stricmp(name, who[j], l); j++); k = list_find_eq(watches[i]->found, r); if (j <= *who && !k) { printf("<!> %s on.\n", name); add_list(watches[i]->found, r); } else if (j > *who && k) { printf("<!> %s off\n", name); del_list(watches[i]->found, k); } }}func save_watches(fp) { for (i = 1; i <= *watches; i++) fprintf(fp, "add_watch(%s);\n", stringconst(watches[i]->name));}add_to_hook(save_hook, .save_watches);func Watch(name) { if (find_watch(name)) printf("%s already being watched.\n", name); else add_list(watches, new_watch(name));}func Unwatch(name) [i] { i = find_watch(name); if (!i) printf("%s not being watched.\n", name); else del_list(watches, i);}func List_watches() [i] { for (i = 1; i <= *watches; i++) output(watches[i]->name + "\n");}if (!watching) { detach(.watch); watching = 1;}add_cmd("watch", -1, .Watch, "/watch <name>");add_cmd("unwatch", -1, .Unwatch, "/unwatch <name>");add_cmd("list_watches", 0, .List_watches, "/list_watches");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -