diff options
author | Amadeusz Sławiński <amade@asmblr.net> | 2019-09-07 17:58:50 +0200 |
---|---|---|
committer | Amadeusz Sławiński <amade@asmblr.net> | 2019-09-07 17:58:50 +0200 |
commit | abc87e48796c9184ffc478089119e316270c7022 (patch) | |
tree | 92516835bff282878fbea4b6945f939b84469a8b | |
parent | 0328c657b5b91d439a3bd421a8e83a76b7171831 (diff) | |
download | screen-abc87e48796c9184ffc478089119e316270c7022.tar.gz |
Fix broken mouse after ncurses 6.1
ncurses 6.1 changed kmous capability from "\e[M" to "\e[<". It seems to
be done to signal that terminal supports sgr mouse mode. screen assumed
that if kmous is set to "\e[M" it is on xterm compatible terminal
anyway, so just dynamically detect which one is used and override
relevant kmapdef.
InitKeytab() is moved, so kmapdef[] can be overriden before
initialization, as InitTermcap() needs to run first, as far as I can
tell this should have no consequences.
Signed-off-by: Amadeusz Sławiński <amade@asmblr.net>
-rw-r--r-- | src/screen.c | 2 | ||||
-rw-r--r-- | src/termcap.c | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/screen.c b/src/screen.c index 9ed23ce..bf2adfd 100644 --- a/src/screen.c +++ b/src/screen.c @@ -988,7 +988,6 @@ int main(int argc, char **argv) sprintf(SocketPath + strlen(SocketPath), "/%s", socknamebuf); ServerSocket = MakeServerSocket(); - InitKeytab(); #ifdef SYSTEM_SCREENRC (void)StartRc(SYSTEM_SCREENRC, 0); #endif @@ -1011,6 +1010,7 @@ int main(int argc, char **argv) #endif } else MakeTermcap(1); + InitKeytab(); MakeNewEnv(); xsignal(SIGHUP, SigHup); xsignal(SIGINT, FinitHandler); diff --git a/src/termcap.c b/src/termcap.c index 95b8ff4..0253cf1 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -36,6 +36,7 @@ #include "screen.h" #include "encoding.h" +#include "kmapdef.h" #include "misc.h" #include "process.h" #include "resize.h" @@ -174,8 +175,11 @@ int InitTermcap(int width, int height) /* ISO2022 */ if ((D_EA && strstr(D_EA, "\033(B")) || (D_AS && strstr(D_AS, "\033(0"))) D_CG0 = 1; - if (strstr(D_termname, "xterm") || strstr(D_termname, "rxvt") || (D_CKM && strstr(D_CKM, "\033[M"))) + if (strstr(D_termname, "xterm") || strstr(D_termname, "rxvt") || (D_CKM && + (strstr(D_CKM, "\033[M") || strstr(D_CKM, "\033[<")))) { D_CXT = 1; + kmapdef[0] = SaveStr(D_CKM); + } /* "be" seems to be standard for xterms... */ if (D_CXT) D_BE = 1; |