Changeset 3957 for neercs


Ignore:
Timestamp:
Nov 19, 2009, 2:31:37 PM (10 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Implemented \33M ANSI command (scroll up), less now works flawlessly while hitting up arrow
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/term.c

    r3956 r3957  
    181181            skip += 1;
    182182        }
    183 
     183        /* Reverse Index (RI) go up one line, reverse scroll if necessary */
     184        else if(buffer[i] == '\033' && buffer[i + 1] == 'M')
     185        {
     186            /* FIXME : not sure about the meaning of 'go up one line' and
     187             * 'if necessary' words. Implemented as a scroller only. */
     188            for(j = height; j > 0; j--)
     189            {
     190                for(k = 0; k < width; k++)
     191                {
     192                        caca_put_char(sc->cv, k, j, caca_get_char(sc->cv, k, j-1));
     193                        caca_put_attr(sc->cv, k, j, caca_get_attr(sc->cv, k, j-1));
     194                }
     195            }
     196            caca_draw_line(sc->cv, 0, 0, width, 0, ' ');
     197            skip += 1;
     198        }
     199       
    184200        /* Single Shift Select of G3 Character Set (SS2: 0x8f):
    185201         * affects next character only */
     
    387403            switch(buffer[i + final])
    388404            {
    389             case 'H': /* CUP (0x48) - Cursor Position */
    390                 x = (argc > 1 && argv[1] > 0) ? argv[1] - 1 : 0;
    391                 y = (argc > 0 && argv[0] > 0) ? argv[0] - 1 : 0;
    392                 break;
    393405            case 'A': /* CUU (0x41) - Cursor Up */
    394406                y -= argc ? argv[0] : 1;
     
    400412                break;
    401413            case 'C': /* CUF (0x43) - Cursor Right */
    402                     debug("Cursor right %d\n", argc);
    403414                x += argc ? argv[0] : 1;
    404415                break;
     
    411422                x = (argc && argv[0] > 0) ? argv[0] - 1 : 0;
    412423                break;
     424            case 'H': /* CUP (0x48) - Cursor Position */
     425                x = (argc > 1 && argv[1] > 0) ? argv[1] - 1 : 0;
     426                y = (argc > 0 && argv[0] > 0) ? argv[0] - 1 : 0;
     427                break;
    413428            case 'J': /* ED (0x4a) - Erase In Page */
    414429                savedattr = caca_get_attr(sc->cv, -1, -1);
     
    432447                break;
    433448            case 'K': /* EL (0x4b) - Erase In Line */
    434                 if(!argc || argv[0] == 0)
     449                if(!argc || argv[0] == 0)
     450                {
    435451                    caca_draw_line(sc->cv, x, y, width, y, ' ');
     452                }
    436453                else if(argv[0] == 1)
     454                {
    437455                    caca_draw_line(sc->cv, 0, y, x, y, ' ');
     456                }
    438457                else if(argv[0] == 2)
     458                {
    439459                    if((unsigned int)x < width)
    440460                        caca_draw_line(sc->cv, x, y, width - 1, y, ' ');
     461                }
    441462                //x = width;
    442463                break;
     
    459480                if(!argc || argv[0] == 0)
    460481                    argv[0] = 1; /* echo -ne 'foobar\r\e[0P\n' */
    461                     /* Jylam : Start from x, not 0 */
     482                /* Jylam : Start from x, not 0 */
    462483                for(j = x; (unsigned int)(j + argv[0]) < width; j++)
    463484                {
     
    576597            size_t bytes;
    577598
    578             if(i + 6 < size)
     599            if(i + 6 < size) {
    579600                ch = caca_utf8_to_utf32((char const *)(buffer + i), &bytes);
    580             else
     601            } else
    581602            {
    582603                /* Add a trailing zero to what we're going to read */
     
    613634
    614635            wch = caca_utf32_is_fullwidth(ch) ? 2 : 1;
     636           
    615637            skip += bytes - 1;
    616638        }
Note: See TracChangeset for help on using the changeset viewer.