呵呵,纯粹为了好玩, ~~
使用说明:
Ctrl+U : 删除光标前(不含光标的在字符)的所有字符
Ctrl+K : 删除光标后(含光标所在字符)的所有字符
Ctrl+Y : 粘贴以上方法最后一次删除的字符
代码修改: (都是增加...)
先在此函数里加一变量 char save_data[STRLEN];
然后增加以下前有 '+' 的代码:
prints("%s", buf);
clrtoeol();
move(y, x + curr);
continue;
}
+ if (ch == Ctrl('U') && curr != 0) {
+ move(y, x);
+ if(clen == curr){
+ strncpy(save_data, buf, clen);
+ save_data[clen] = 0;
+ *buf = 0;
+ curr = clen = 0;
+ } else {
+ clen -= curr - 1;
+ snprintf(tmp, clen, "%s", buf + curr);
+ strncpy(save_data, buf, curr);
+ save_data[curr] = 0;
+ curr = 0;
+ strcpy(buf,tmp);
+ buf[--clen] = 0;
+ prints("%s",buf);
+ }
+ clrtoeol();
+ move(y, x);
+ continue;
+ }
+
+ if (ch == Ctrl('K') && curr != clen) {
+ move(y, x);
+ strncpy(save_data, buf + curr, clen - curr);
+ save_data[clen - curr] = 0;
+ buf[curr] = 0;
+ if( curr == 0){
+ curr = clen = 0;
+ } else {
+ clen = curr;
+ prints("%s", buf);
+ }
+ clrtoeol();
+ move(y, x + curr);
+ continue;
+ }
+
+ if (ch == Ctrl('Y') && *save_data != 0 && clen <= len){
+ move(y, x);
+ memset(tmp, 0, sizeof(tmp));
+ strncpy(tmp, buf, curr);
+ strncat(tmp, save_data,
+ strlen(save_data) + curr > len ?
+ len - curr : strlen(save_data) );
+ strncat(tmp, buf + curr,
+ strlen(save_data) + clen > len ?
+ len - strlen(save_data) - curr: clen - curr);
+ clen += strlen(save_data);
+ clen = clen > len ? len : clen;
+ strncpy(buf, tmp, clen);
+ buf[clen] = 0;
+ prints("%s", buf);
+ curr += strlen(save_data);
+ curr = curr > len ? len : curr;
+ clrtoeol();
+ move(y, x + curr);
+ continue;
+ }
if (ch == KEY_DEL) {
if (curr >= clen) {
curr = clen;
continue;
}
--