⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xterm-patch

📁 举世闻名的joe记事本源程序
💻
📖 第 1 页 / 共 3 页
字号:
+#define CASE_TAKE_DONE 133  #endif /* included_VTparse_h */diff -Naur xterm-200/button.c xterm-200-new/button.c--- xterm-200/button.c	2005-02-06 16:42:37.000000000 -0500+++ xterm-200-new/button.c	2005-04-06 11:31:46.000000000 -0400@@ -1174,7 +1174,9 @@     return cutbuffer; } -static void+int base64_paste = 0;	/* Set if paste data should be sent as base64 */++void _GetSelection(Widget w, 	      Time ev_time, 	      String * params,	/* selections in precedence order */@@ -1208,19 +1210,34 @@ 	int fmt8 = 8; 	Atom type = XA_STRING; 	char *line;+	int x;++        /* Selection from X server */++#if OPT_WIDE_CHARS+        /* Joe Allen - 2005-4-4: assume X's cut buffer is UTF-8 if+           the xterm is UTF-8 */+        if (term->screen.utf8_mode)+            type = XA_UTF8_STRING(XtDisplay(w));+#endif  	/* 'line' is freed in SelectionReceived */ 	line = XFetchBuffer(XtDisplay(w), &inbytes, cutbuffer); 	nbytes = (unsigned long) inbytes;+ 	if (nbytes > 0) 	    SelectionReceived(w, NULL, &selection, &type, (XtPointer) line, 			      &nbytes, &fmt8); 	else if (num_params > 1) 	    _GetSelection(w, ev_time, params + 1, num_params - 1, NULL);+        else+            base64_paste = 0; 	return;     } else { 	struct _SelectionList *list; +	/* Selection owned by someone */+ 	if (targets == NULL || targets[0] == None) { 	    targets = _SelectionTargets(w); 	}@@ -1280,9 +1297,65 @@ #  define tty_vwrite(pty,lag,l)		v_write(pty,lag,l) #endif /* defined VMS */ +/* Return base64 code character given 6-bit number */++char base64_code[]="\+ABCDEFGHIJKLMNOPQRSTUVWXYZ\+abcdefghijklmnopqrstuvwxyz\+0123456789+/";++/* Be careful: _qWriteSelectionData expects these to be initialized+   to zero.  Base64_flush() is the last step of the conversion, it+   clears these variables. */++int base64_accu = 0;+int base64_count = 0;+int base64_pad = 0;+ static void _qWriteSelectionData(TScreen * screen, Char * lag, unsigned length) {+    if (base64_paste) {+        /* Send data as base64 */+        unsigned char *p = (unsigned char *)lag;+        Char buf[64];+        unsigned x = 0;+        while (length--) {+            switch (base64_count) {+                case 0:+                    buf[x++] = base64_code[*p >> 2];+                    base64_accu = (*p & 0x3);+                    base64_count = 2;+                    ++p;+                    break;+                case 2:+                    buf[x++] = base64_code[(base64_accu << 4) + (*p >> 4)];+                    base64_accu = (*p & 0xF);+                    base64_count = 4;+                    ++p;+                    break;+                case 4:+                    buf[x++] = base64_code[(base64_accu << 2) + (*p >> 6)];+                    buf[x++] = base64_code[*p & 0x3F];+                    base64_accu = 0;+                    base64_count = 0;+                    ++p;+                    break;+            }+            if (x >= 63) {+                /* Write 63 or 64 characters */+                base64_pad += x;+                tty_vwrite(screen->respond, buf, x);+                x = 0;+            }+        }+        if (x != 0) {+            base64_pad += x;+            tty_vwrite(screen->respond, buf, x);+        }+        return;+    }+ #if OPT_READLINE     if (SCREEN_FLAG(screen, paste_quotes)) { 	while (length--) {@@ -1295,6 +1368,29 @@ }  static void+base64_flush(TScreen *screen)+{+    unsigned char x;+    switch (base64_count) {+        case 0:+            break;+        case 2:+            x = base64_code[base64_accu << 4];+            tty_vwrite(screen->respond, &x, 1);+            break;+        case 4:+            x = base64_code[base64_accu << 2];+            tty_vwrite(screen->respond, &x, 1);+            break;+    }+    if (base64_pad & 3)+        tty_vwrite(screen->respond, "===", 4 - (base64_pad & 3));+    base64_count = 0;+    base64_accu = 0;+    base64_pad = 0;+}++static void _WriteSelectionData(TScreen * screen, Char * line, int length) {     /* Write data to pty a line at a time. */@@ -1325,13 +1421,14 @@     if (lag != end) { 	_qWriteSelectionData(screen, lag, (unsigned) (end - lag));     }+    if (base64_paste)+        base64_flush(screen); #ifdef VMS     tt_pasting = False;     tt_start_read();		/* reenable reads or a character may be lost */ #endif } -#if OPT_READLINE static void _WriteKey(TScreen * screen, Char * in) {@@ -1350,7 +1447,6 @@     line[count++] = '~';     tty_vwrite(screen->respond, line, count); }-#endif /* OPT_READLINE */  /* SelectionReceived: stuff received selection text into pty */ @@ -1434,18 +1530,20 @@     if (text_list != NULL && text_list_count != 0) { 	int i; -#if OPT_READLINE-	if (SCREEN_FLAG(screen, paste_brackets))+	if (base64_paste)+	    _WriteKey(screen, "202");+	else if (screen->paste_brackets) 	    _WriteKey(screen, "200");-#endif 	for (i = 0; i < text_list_count; i++) { 	    int len = strlen(text_list[i]); 	    _WriteSelectionData(screen, (Char *) text_list[i], len); 	}-#if OPT_READLINE-	if (SCREEN_FLAG(screen, paste_brackets))+	if (base64_paste) {+	    tty_vwrite(screen->respond, "\33", 1);+	    base64_paste = 0;+        }+        else if (screen->paste_brackets) 	    _WriteKey(screen, "201");-#endif 	XFreeStringList(text_list);     } else 	goto fail;@@ -1461,6 +1559,8 @@ 	_GetSelection(w, list->time, 		      list->params, list->count, list->targets); 	XtFree((char *) client_data);+    } else {+        base64_paste = 0;     }     return; }@@ -2452,6 +2552,96 @@     _OwnSelection(term, params, num_params); } +void ClearSelectionBuffer()+{+    TScreen *screen = &term->screen;+    screen->selection_length = 0;+    base64_count = 0;+}++void AppendStrToSelectionBuffer(Char *text,int len)+{+    TScreen *screen = &term->screen;+    if (len != 0) {+        int j = screen->selection_length + len; /* New length */+        int k = j + (j >> 2) + 80; /* New size if we grow buffer: grow by ~50% */+        if (j + 1 >= screen->selection_size) {+            if (!screen->selection_length) {+                /* New buffer */+                Char *line;+                if ((line = (Char *) malloc((unsigned) k)) == 0)+                    SysError(ERROR_BMALLOC2);+                XtFree((char *) screen->selection_data);+                screen->selection_data = line;+            } else {+                /* Realloc buffer */+                screen->selection_data = (Char *) realloc(screen->selection_data, (unsigned) k);+                if (screen->selection_data == 0)+                    SysError(ERROR_BMALLOC2);+            }+            screen->selection_size = k;+        }+        memcpy(screen->selection_data + screen->selection_length, text, len);+        screen->selection_length += len;+        screen->selection_data[screen->selection_length] = 0;+    }+}++void AppendToSelectionBuffer(unsigned c)+{+    int six;+    Char ch;++    /* Decode base64 character */+    if (c >= 'A' && c <= 'Z')+        six = c - 'A';+    else if (c >= 'a' && c <= 'z')+        six = c - 'a' + 26;+    else if (c >= '0' && c <= '9')+        six = c - '0' + 52;+    else if (c == '+')+        six = 62;+    else+        six = 63;++    /* Accumulate bytes */+    switch (base64_count) {+        case 0:+            base64_accu = six;+            base64_count = 6;+            break;++        case 2:+            ch = (base64_accu << 6) + six;+            base64_count = 0;+            AppendStrToSelectionBuffer(&ch, 1);+            break;++        case 4:+            ch = (base64_accu << 4) + (six >> 2);+            base64_accu = (six & 0x3);+            base64_count = 2;+            AppendStrToSelectionBuffer(&ch, 1);+            break;++        case 6:+            ch = (base64_accu << 2) + (six >> 4);+            base64_accu = (six & 0xF);+            base64_count = 4;+            AppendStrToSelectionBuffer(&ch, 1);+            break;+    }+}++extern char *select_args[]; /* in charproc.c */++void CompleteSelection()+{+    base64_count = 0;+    base64_accu = 0;+    _OwnSelection(term, select_args, 2);+}+ static Bool _ConvertSelectionHelper(Widget w, 			Atom * type, XtPointer *value,@@ -2715,9 +2905,14 @@ 		 */ 		unsigned long length = termw->screen.selection_length; 		Char *data = termw->screen.selection_data;+#ifdef junk+/* These days it's better to assume that X server's cut & paste buffers+   are UTF-8 when the locale is UTF-8.+    Joe Allen, 2005-04-04 */ 		if_OPT_WIDE_CHARS((&(termw->screen)), { 		    data = UTF8toLatin1(data, length, &length); 		});+#endif 		TRACE(("XStoreBuffer(%d)\n", cutbuffer)); 		XStoreBuffer(XtDisplay((Widget) termw), 			     (char *) data,@@ -2885,6 +3080,18 @@     return (result); } +/* 32 + following 7-bit word:++   1:0  Button no: 0, 1, 2.  3=release.+     2  shift+     3  meta+     4  ctrl+     5  set for motion notify+     6  set for wheel+*/++/* Position: 32 - 255. */+ static int BtnCode(XButtonEvent * event, int button) {@@ -2904,6 +3111,16 @@  #define MOUSE_LIMIT (255 - 32) +/* When screen->out_of_frame set, coordinates can go outside+   of frame as follows:+     Code            Coord     +     ----            -----+     33 - 240        1 - 208  (208 positive coordinates)+     32, 255 - 241   0, -1 - -15  (16 negative coordinates)++   When range is exceeded, the maximum closest value is sent+*/+ static void EditorButton(XButtonEvent * event) {@@ -2923,20 +3140,41 @@     row = (event->y - screen->border) / FontHeight(screen);     col = (event->x - OriginX(screen)) / FontWidth(screen); -    /* Limit to screen dimensions */-    if (row < 0)-	row = 0;-    else if (row > screen->max_row)-	row = screen->max_row;-    else if (row > MOUSE_LIMIT)-	row = MOUSE_LIMIT;--    if (col < 0)-	col = 0;-    else if (col > screen->max_col)-	col = screen->max_col;-    else if (col > MOUSE_LIMIT)-	col = MOUSE_LIMIT;+    if (screen->out_of_frame) {+        if (row > 207)+            row = 207;+        else if (row < -16)+            row = 208;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -