Add bracketed paste mode
This patch enables bracketed paste mode ( http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Bracketed%20Paste%20Mode ). It's mainly useful for text editors to disable line wrapping and auto indentation when text is being pasted, rather than typed from keyboard. On the emulator side, it is supported by at least xterm, urxvt, gnome-terminal, putty, iterm2; and I have a patch for konsole. On the application side, vim can be configured easily to handle this, and I have pending patches for mcedit and joe. Probably many others also support it.
This commit is contained in:
parent
eae31a532e
commit
8ac0a5f872
1 changed files with 8 additions and 0 deletions
8
st.c
8
st.c
|
@ -132,6 +132,7 @@ enum term_mode {
|
||||||
MODE_FOCUS = 65536,
|
MODE_FOCUS = 65536,
|
||||||
MODE_MOUSEX10 = 131072,
|
MODE_MOUSEX10 = 131072,
|
||||||
MODE_MOUSEMANY = 262144,
|
MODE_MOUSEMANY = 262144,
|
||||||
|
MODE_BRCKTPASTE = 524288,
|
||||||
MODE_MOUSE = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
|
MODE_MOUSE = MODE_MOUSEBTN|MODE_MOUSEMOTION|MODE_MOUSEX10\
|
||||||
|MODE_MOUSEMANY,
|
|MODE_MOUSEMANY,
|
||||||
};
|
};
|
||||||
|
@ -1013,7 +1014,11 @@ selnotify(XEvent *e) {
|
||||||
*repl++ = '\r';
|
*repl++ = '\r';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(IS_SET(MODE_BRCKTPASTE))
|
||||||
|
ttywrite("\033[200~", 6);
|
||||||
ttywrite((const char *)data, nitems * format / 8);
|
ttywrite((const char *)data, nitems * format / 8);
|
||||||
|
if(IS_SET(MODE_BRCKTPASTE))
|
||||||
|
ttywrite("\033[201~", 6);
|
||||||
XFree(data);
|
XFree(data);
|
||||||
/* number of 32-bit chunks returned */
|
/* number of 32-bit chunks returned */
|
||||||
ofs += nitems * format / 32;
|
ofs += nitems * format / 32;
|
||||||
|
@ -1868,6 +1873,9 @@ tsetmode(bool priv, bool set, int *args, int narg) {
|
||||||
case 1048:
|
case 1048:
|
||||||
tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
|
tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
|
||||||
break;
|
break;
|
||||||
|
case 2004: /* 2004: bracketed paste mode */
|
||||||
|
MODBIT(term.mode, set, MODE_BRCKTPASTE);
|
||||||
|
break;
|
||||||
/* Not implemented mouse modes. See comments there. */
|
/* Not implemented mouse modes. See comments there. */
|
||||||
case 1001: /* mouse highlight mode; can hang the
|
case 1001: /* mouse highlight mode; can hang the
|
||||||
terminal by design when implemented. */
|
terminal by design when implemented. */
|
||||||
|
|
Loading…
Reference in a new issue