summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2014-05-11 09:11:49 +0200
committerYorhel <git@yorhel.nl>2014-05-11 09:14:42 +0200
commit75d49b6ea3b64e0e8053962b86bec51d9ad10007 (patch)
treefeec758afb1538a16887a79f22b258e59ef9c2fb
parent505b387717bea9ea4623059cfff9e41965003bb6 (diff)
Send bracketed paste mode code to stderr + workaround for screen
For some reset the reset code wasn't caught when send to stdout. The workaround for screen was found while looking through the weechat code to figure out why the reset code didn't work.
-rw-r--r--src/main.c4
-rw-r--r--src/ui.c19
2 files changed, 17 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index 4487e34..2c7a9e2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -504,9 +504,7 @@ int main(int argc, char **argv) {
erase();
refresh();
endwin();
-
- // reset bracketed paste mode
- printf("\x1b[?2004l"); // http://www.xfree86.org/current/ctlseqs.html#C1%20%288-Bit%29%20Control%20Characters
+ ui_set_bracketed_paste(0);
printf("Flushing unsaved data to disk...");
fflush(stdout);
diff --git a/src/ui.c b/src/ui.c
index 79c40be..128676c 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -245,6 +245,21 @@ void ui_tab_incprio(ui_tab_t *tab, int prio) {
}
+// Based on gui_window_set_bracketed_paste_mode() in weechat's gui/curses/gui-curses-window.c
+void ui_set_bracketed_paste(int enable) {
+ char *env = getenv("TMUX");
+ int tmux = env && *env;
+ env = getenv("TERM");
+ int screen = env && (strncmp(env, "screen", 6) == 0) && !tmux;
+
+ fprintf(stderr, "%s\033[?2004%c%s",
+ screen ? "\033P" : "",
+ enable ? 'h' : 'l',
+ screen ? "\033\\" : "");
+ fflush(stderr);
+}
+
+
void ui_init() {
// init curses
initscr();
@@ -257,9 +272,7 @@ void ui_init() {
// ensure curses is init'd before event-keys defined before events happen
define_key("\x1b[200~", KEY_BRACKETED_PASTE_START);
define_key("\x1b[201~", KEY_BRACKETED_PASTE_END);
-
- const char paste_mode[] = "\x1b[?2004h";
- write(STDOUT_FILENO, paste_mode, sizeof(paste_mode)-1);
+ ui_set_bracketed_paste(1);
// global textinput field
ui_global_textinput = ui_textinput_create(TRUE, cmd_suggest);