detection of xterm mouse support

Oskar Liljeblad oskar at osk.mine.nu
Sat Dec 8 22:19:43 UTC 2001


Right now mc detects xterm mouse support by looking at the TERM
environment variable. This is not good because mouse support would
not be enabled in terminals like rxvt or Eterm (and a whole bunch other
like).

The correct way to determine _xterm_ (not generic) mouse support
is to check the "kmous" terminfo ("Km" termcap) capability.
If this is set to "\033[M", then xterm mouse support is available.
This is how ncurses (at least 5.2.20010318) does it.

This patch illustrates against src/main.c how to do it. Only
problem is that 1) tgetstr is not available and 2) before
calling tgetstr, the termcap/terminfo structures need to be
initialized with setupterm (ncurses) or tgetent. Any ideas
how to get it right?

Oskar Liljeblad (oskar at osk.mine.nu)

--- src/main.c  Mon Aug 20 07:39:21 2001
+++ /home/usel/_deb/mc-4.5.55/build-tree/mc-4.5.55/src/main.c   Sat Dec  8 23:15:59 2001
@@ -2367,13 +2367,15 @@
     char   *mc_libdir;
 #ifndef HAVE_X
     char   *termvalue;
+    char   *mousecap;
        
     termvalue = getenv ("TERM");
     if (!termvalue || !(*termvalue)){
        fprintf (stderr, _("The TERM environment variable is unset!\n"));
        exit (1);
     }
-    if (force_xterm || (strncmp (termvalue, "xterm", 5) == 0 || strcmp (termvalue, "dtterm") == 0)){
+    mousecap = tgetstr ("Km", NULL);
+    if (force_xterm || (mousecap != NULL && strcmp(mousecap, "\033[M") == 0)) {
        use_mouse_p = XTERM_MOUSE;
        xterm_flag = 1;
 #    ifdef SET_TITLE



More information about the mc-devel mailing list