[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#913237: xterm: exec-formatted yields a tilde character in zsh and emacs



On 2018-12-05 14:12:32 +0100, Vincent Lefevre wrote:
> I suspect a bug in doSelectionFormat() in button.c that makes xterm
> think that there was a bracketed paste, whose consequence is to
> generate the "ESC [ 2 0 1 ~ .".
> 
> If I remove
> 
> #if OPT_READLINE
>     mydata->paste_brackets = screen->paste_brackets;
>     SCREEN_FLAG_unset(screen, paste_brackets);
> #endif
> 
> then I no longer get the "\33[201~". There's another issue, but
> that's a start.

Replacing

    mydata->paste_brackets = screen->paste_brackets;

by

    mydata->paste_brackets = 0;

seems to solve the problem for exec-formatted. But doSelectionFormat
is also used by insert-formatted. I propose the attached patch, which
doesn't change the behavior for insert-formatted. But I don't know
about the

    SCREEN_FLAG_unset(screen, paste_brackets);

line. Perhaps

#if OPT_PASTE64
    mydata->base64_paste = screen->base64_paste;
    screen->base64_paste = 0;
#endif

needs to be modified in a similar way, I don't know.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Index: xterm-337/button.c
===================================================================
--- xterm-337.orig/button.c
+++ xterm-337/button.c
@@ -4943,7 +4943,8 @@ doSelectionFormat(XtermWidget xw,
 		  XEvent *event,
 		  String *params,
 		  Cardinal *num_params,
-		  FormatSelect format_select)
+		  FormatSelect format_select,
+		  int paste)
 {
     TScreen *screen = TScreenOf(xw);
     InternalSelect *mydata = &(screen->internal_select);
@@ -4958,7 +4959,7 @@ doSelectionFormat(XtermWidget xw,
     screen->base64_paste = 0;
 #endif
 #if OPT_READLINE
-    mydata->paste_brackets = screen->paste_brackets;
+    mydata->paste_brackets = paste ? screen->paste_brackets : 0;
     SCREEN_FLAG_unset(screen, paste_brackets);
 #endif
 
@@ -5402,7 +5403,7 @@ HandleExecFormatted(Widget w,
     TRACE_EVENT("HandleExecFormatted", event, params, num_params);
     if ((xw = getXtermWidget(w)) != 0 &&
 	(*num_params > 1)) {
-	doSelectionFormat(xw, w, event, params, num_params, reallyExecFormatted);
+	doSelectionFormat(xw, w, event, params, num_params, reallyExecFormatted, 0);
     }
 }
 
@@ -5468,7 +5469,7 @@ HandleInsertFormatted(Widget w,
     TRACE_EVENT("HandleInsertFormatted", event, params, num_params);
     if ((xw = getXtermWidget(w)) != 0 &&
 	(*num_params > 1)) {
-	doSelectionFormat(xw, w, event, params, num_params, reallyInsertFormatted);
+	doSelectionFormat(xw, w, event, params, num_params, reallyInsertFormatted, 1);
     }
 }
 

Reply to: