Changeset 25391

Show
Ignore:
Timestamp:
05/08/08 21:22:37 (3 days ago)
Author:
mmu_man
Message:
- get rid of control chars in source files (ESC and CTRL-L)
- fix Home and End keys
- simplify code
- add different strings for Ctrl-arrows, allows to map them to previous/next-word (PuTTY and others have actually several codes depending on mods & ALT, mode & CTRL and even mods & CTRL|ALT, might be even better...).
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • haiku/trunk/src/apps/terminal/CodeConv.cpp

    r23591 r25391  
    7373        // applies to haiku, and if not, get rid of this class and just use the system api directly. 
    7474        if (coding == B_EUC_CONVERSION && state != 0) { 
    75                 const char *end_of_jis = "(B"; 
     75                const char *end_of_jis = "\033(B"; 
    7676                strncpy((char *)dst + dstlen, end_of_jis, 3); 
    7777                dstlen += 3; 
  • haiku/trunk/src/apps/terminal/TermView.cpp

    r25388 r25391  
    14841484        // TODO: Cleanup 
    14851485        if (numBytes == 1) { 
     1486                const char *toWrite = NULL; 
    14861487                switch (*bytes) { 
    14871488                        case B_RETURN: 
    1488                                 if (rawChar == B_RETURN) { 
    1489                                         char c = 0x0d; 
    1490                                         fShell->Write(&c, 1); 
    1491                                         return; 
    1492                                 } 
     1489                                if (rawChar == B_RETURN) 
     1490                                        toWrite = "\r"; 
    14931491                                break; 
    14941492                         
    14951493                        case B_LEFT_ARROW: 
    14961494                                if (rawChar == B_LEFT_ARROW) { 
    1497                                         fShell->Write(LEFT_ARROW_KEY_CODE, sizeof(LEFT_ARROW_KEY_CODE) - 1); 
    1498                                         return; 
     1495                                        if (mod & B_CONTROL_KEY) 
     1496                                                toWrite = CTRL_LEFT_ARROW_KEY_CODE; 
     1497                                        else 
     1498                                                toWrite = LEFT_ARROW_KEY_CODE; 
    14991499                                } 
    15001500                                break; 
     
    15021502                        case B_RIGHT_ARROW: 
    15031503                                if (rawChar == B_RIGHT_ARROW) { 
    1504                                         fShell->Write(RIGHT_ARROW_KEY_CODE, sizeof(RIGHT_ARROW_KEY_CODE) - 1); 
    1505                                         return; 
     1504                                        if (mod & B_CONTROL_KEY) 
     1505                                                toWrite = CTRL_RIGHT_ARROW_KEY_CODE; 
     1506                                        else 
     1507                                                toWrite = RIGHT_ARROW_KEY_CODE; 
    15061508                                } 
    15071509                                break; 
     
    15161518                                } 
    15171519                                if (rawChar == B_UP_ARROW) { 
    1518                                         fShell->Write(UP_ARROW_KEY_CODE, sizeof(UP_ARROW_KEY_CODE) - 1); 
    1519                                         return; 
     1520                                        if (mod & B_CONTROL_KEY) 
     1521                                                toWrite = CTRL_UP_ARROW_KEY_CODE; 
     1522                                        else 
     1523                                                toWrite = UP_ARROW_KEY_CODE; 
    15201524                                } 
    15211525                                break; 
     
    15291533 
    15301534                                if (rawChar == B_DOWN_ARROW) { 
    1531                                         fShell->Write(DOWN_ARROW_KEY_CODE, sizeof(DOWN_ARROW_KEY_CODE) - 1); 
    1532                                         return; 
     1535                                        if (mod & B_CONTROL_KEY) 
     1536                                                toWrite = CTRL_DOWN_ARROW_KEY_CODE; 
     1537                                        else 
     1538                                                toWrite = DOWN_ARROW_KEY_CODE; 
    15331539                                } 
    15341540                                break; 
    15351541 
    15361542                        case B_INSERT: 
    1537                                 if (rawChar == B_INSERT) { 
    1538                                         fShell->Write(INSERT_KEY_CODE, sizeof(INSERT_KEY_CODE) - 1); 
    1539                                         return; 
    1540                                 } 
     1543                                if (rawChar == B_INSERT) 
     1544                                        toWrite = INSERT_KEY_CODE; 
    15411545                                break; 
    15421546 
    15431547                        case B_HOME: 
    1544                                 if (rawChar == B_HOME) { 
    1545                                         fShell->Write(HOME_KEY_CODE, sizeof(HOME_KEY_CODE) - 1); 
    1546                                         return; 
    1547                                 } 
     1548                                if (rawChar == B_HOME) 
     1549                                        toWrite = HOME_KEY_CODE; 
    15481550                                break; 
    15491551 
    15501552                        case B_END: 
    1551                                 if (rawChar == B_END) { 
    1552                                         fShell->Write(END_KEY_CODE, sizeof(END_KEY_CODE) - 1); 
    1553                                         return; 
    1554                                 } 
     1553                                if (rawChar == B_END) 
     1554                                        toWrite = END_KEY_CODE; 
    15551555                                break; 
    15561556 
     
    15631563                                        return; 
    15641564                                } 
    1565                                 if (rawChar == B_PAGE_UP) { 
    1566                                         fShell->Write(PAGE_UP_KEY_CODE, sizeof(PAGE_UP_KEY_CODE) - 1); 
    1567                                         return; 
    1568                                 } 
     1565                                if (rawChar == B_PAGE_UP) 
     1566                                        toWrite = PAGE_UP_KEY_CODE; 
    15691567                                break; 
    15701568 
     
    15761574                                } 
    15771575          
    1578                                 if (rawChar == B_PAGE_DOWN) { 
    1579                                         fShell->Write(PAGE_DOWN_KEY_CODE, sizeof(PAGE_DOWN_KEY_CODE) - 1); 
    1580                                         return; 
    1581                                 } 
     1576                                if (rawChar == B_PAGE_DOWN) 
     1577                                        toWrite = PAGE_DOWN_KEY_CODE; 
    15821578                                break; 
    15831579 
     
    15941590                                break; 
    15951591                } 
     1592                if (toWrite) { 
     1593                        fShell->Write(toWrite, strlen(toWrite)); 
     1594                        return; 
     1595                } 
    15961596        } else { 
    15971597                // input multibyte character 
     
    16371637{ 
    16381638        entry_ref ref; 
    1639         char *ctrl_l = " "; 
     1639        char *ctrl_l = "\x0c"; 
    16401640 
    16411641        // first check for any dropped message 
  • haiku/trunk/src/apps/terminal/VTkeymap.h

    r13734 r25391  
    6666 
    6767 
    68 #define LEFT_ARROW_KEY_CODE "" 
    69 #define RIGHT_ARROW_KEY_CODE "" 
    70 #define UP_ARROW_KEY_CODE "" 
    71 #define DOWN_ARROW_KEY_CODE "" 
     68#define LEFT_ARROW_KEY_CODE "\033[D" 
     69#define RIGHT_ARROW_KEY_CODE "\033[C" 
     70#define UP_ARROW_KEY_CODE "\033[A" 
     71#define DOWN_ARROW_KEY_CODE "\033[B" 
    7272 
    73 #define HOME_KEY_CODE "[@" 
    74 #define INSERT_KEY_CODE "[2~" 
    75 #define END_KEY_CODE "[[" 
    76 #define PAGE_UP_KEY_CODE "[5~" 
    77 #define PAGE_DOWN_KEY_CODE "[6~" 
     73#define CTRL_LEFT_ARROW_KEY_CODE "\033[5D" 
     74#define CTRL_RIGHT_ARROW_KEY_CODE "\033[5C" 
     75#define CTRL_UP_ARROW_KEY_CODE "\033[5A" 
     76#define CTRL_DOWN_ARROW_KEY_CODE "\033[5B" 
     77 
     78//#define HOME_KEY_CODE "\033[@" 
     79#define HOME_KEY_CODE "\033[1~" 
     80#define INSERT_KEY_CODE "\033[2~" 
     81//#define END_KEY_CODE "\033[[" 
     82#define END_KEY_CODE "\033[4~" 
     83#define PAGE_UP_KEY_CODE "\033[5~" 
     84#define PAGE_DOWN_KEY_CODE "\033[6~" 
    7885 
    7986//#define IS_DOWN_KEY(x) (info.key_states[(x) / 8] & key_state_table[(x) % 8]) 
  • haiku/trunk/src/apps/terminal/VTKeyTbl.c

    r13734 r25391  
    4949char *function_key_char_table [] =  
    5050{ 
    51 "[11~", 
    52 "[12~", 
    53 "[13~", 
    54 "[14~", 
    55 "[15~", 
    56 "[16~", 
    57 "[17~", 
    58 "[18~", 
    59 "[19~", 
    60 "[20~", 
    61 "[21~", 
    62 "[22~", 
     51"\033[11~", 
     52"\033[12~", 
     53"\033[13~", 
     54"\033[14~", 
     55"\033[15~", 
     56"\033[16~", 
     57"\033[17~", 
     58"\033[18~", 
     59"\033[19~", 
     60"\033[20~", 
     61"\033[21~", 
     62"\033[22~", 
    6363};