Changeset 986


Ignore:
Timestamp:
May 26, 2006, 9:00:04 AM (15 years ago)
Author:
Sam Hocevar
Message:
  • UTF-8 input support for ncurses.
  • Hack for 16-color support in xfce4-terminal for both ncurses and slang.
Location:
libcaca/trunk/caca
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_ncurses.c

    r984 r986  
    256256    }
    257257
     258    /* If the key was UTF-8, parse the whole sequence */
     259    if(intkey >= 0x80 && intkey < 0x100)
     260    {
     261        int keys[7]; /* Necessary for ungetch(); */
     262        char utf8[7];
     263        uint32_t utf32;
     264        unsigned int i, bytes = 0;
     265
     266        keys[0] = intkey;
     267        utf8[0] = intkey;
     268
     269        for(i = 1; i < 6; i++)
     270        {
     271            keys[i] = getch();
     272            utf8[i] = (unsigned char)keys[i];
     273        }
     274
     275        utf8[i] = '\0';
     276        utf32 = cucul_utf8_to_utf32(utf8, &bytes);
     277
     278        while(i > bytes)
     279            ungetch(keys[--i]);
     280
     281        if(bytes)
     282        {
     283            ev->type = CACA_EVENT_KEY_PRESS;
     284            ev->data.key.ch = 0;
     285            ev->data.key.utf32 = utf32;
     286            strcpy(ev->data.key.utf8, utf8);
     287            return 1;
     288        }
     289    }
     290
    258291    if(intkey == KEY_MOUSE)
    259292    {
     
    372405static void ncurses_check_terminal(void)
    373406{
    374     char *term, *colorterm, *other;
     407    char *term, *colorterm;
    375408
    376409    term = getenv("TERM");
    377410    colorterm = getenv("COLORTERM");
    378411
    379     if(term && !strcmp(term, "xterm"))
    380     {
    381         /* If we are using gnome-terminal, it's really a 16 colour terminal */
    382         if(colorterm && !strcmp(colorterm, "gnome-terminal"))
    383         {
    384             SCREEN *screen;
    385             screen = newterm("xterm-16color", stdout, stdin);
    386             if(screen == NULL)
    387                 return;
    388             endwin();
    389             (void)putenv("TERM=xterm-16color");
     412    if(!term || strcmp(term, "xterm"))
     413        return;
     414
     415    /* If we are using gnome-terminal, it's really a 16 colour terminal.
     416     * Ditto if we are using xfce4-terminal, or Konsole. */
     417    if((colorterm && (!strcmp(colorterm, "gnome-terminal")
     418                       || !strcmp(colorterm, "Terminal")))
     419         || getenv("KONSOLE_DCOP_SESSION"))
     420    {
     421        SCREEN *screen;
     422        screen = newterm("xterm-16color", stdout, stdin);
     423        if(screen == NULL)
    390424            return;
    391         }
    392 
    393         /* Ditto if we are using Konsole */
    394         other = getenv("KONSOLE_DCOP_SESSION");
    395         if(other)
    396         {
    397             SCREEN *screen;
    398             screen = newterm("xterm-16color", stdout, stdin);
    399             if(screen == NULL)
    400                 return;
    401             endwin();
    402             (void)putenv("TERM=xterm-16color");
    403             return;
    404         }
     425        endwin();
     426        (void)putenv("TERM=xterm-16color");
     427        return;
    405428    }
    406429}
  • libcaca/trunk/caca/driver_slang.c

    r982 r986  
    468468    colorterm = getenv("COLORTERM");
    469469
    470     if(term && !strcmp(term, "xterm"))
    471     {
    472         /* If we are using gnome-terminal, it's really a 16 colour terminal */
    473         if(colorterm && !strcmp(colorterm, "gnome-terminal"))
    474         {
    475             (void)putenv("TERM=xterm-16color");
    476             return;
    477         }
    478 
    479         /* Ditto if we are using Konsole */
    480         other = getenv("KONSOLE_DCOP_SESSION");
    481         if(other)
    482         {
    483             (void)putenv("TERM=xterm-16color");
    484             return;
    485         }
     470    if(!term || strcmp(term, "xterm"))
     471        return;
     472
     473    /* If we are using gnome-terminal, it's really a 16 colour terminal.
     474     * Ditto if we are using xfce4-terminal, or Konsole. */
     475    if((colorterm && (!strcmp(colorterm, "gnome-terminal")
     476                       || !strcmp(colorterm, "Terminal")))
     477         || getenv("KONSOLE_DCOP_SESSION"))
     478    {
     479        (void)putenv("TERM=xterm-16color");
     480        return;
    486481    }
    487482}
Note: See TracChangeset for help on using the changeset viewer.