[BACK]Return to keymap.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Annotation of src/usr.bin/mg/keymap.c, Revision 1.30

1.30    ! kjell       1: /*     $OpenBSD: keymap.c,v 1.29 2005/05/30 13:13:50 jason Exp $       */
        !             2:
        !             3: /* This file is in the public domain. */
1.5       niklas      4:
1.1       deraadt     5: /*
1.11      mickey      6:  * Keyboard maps.  This is character set dependent.  The terminal specific
1.4       millert     7:  * parts of building the keymap has been moved to a better place.
1.1       deraadt     8:  */
1.4       millert     9:
1.28      db         10: #include "def.h"
                     11: #include "kbd.h"
1.1       deraadt    12:
                     13: /*
1.11      mickey     14:  * initial keymap declarations, deepest first
1.1       deraadt    15:  */
                     16:
                     17: #ifndef NO_HELP
1.4       millert    18: static PF cHcG[] = {
1.3       millert    19:        ctrlg,                  /* ^G */
1.28      db         20:        help_help               /* ^H */
1.3       millert    21: };
1.4       millert    22:
                     23: static PF cHa[] = {
1.3       millert    24:        apropos_command,        /* a */
                     25:        wallchart,              /* b */
1.28      db         26:        desckey                 /* c */
1.1       deraadt    27: };
1.4       millert    28:
1.3       millert    29: static struct KEYMAPE (2 + IMAPEXT) helpmap = {
1.1       deraadt    30:        2,
1.3       millert    31:        2 + IMAPEXT,
1.1       deraadt    32:        rescan,
                     33:        {
1.3       millert    34:                {
1.10      art        35:                        CCHR('G'), CCHR('H'), cHcG, NULL
1.3       millert    36:                },
                     37:                {
1.10      art        38:                        'a', 'c', cHa, NULL
1.28      db         39:                }
1.1       deraadt    40:        }
                     41: };
1.4       millert    42: #endif /* !NO_HELP */
1.1       deraadt    43:
1.4       millert    44: static PF cX4cF[] = {
1.3       millert    45:        poptofile,              /* ^f */
1.28      db         46:        ctrlg                   /* ^g */
1.3       millert    47: };
1.4       millert    48: static PF cX4b[] = {
1.3       millert    49:        poptobuffer,            /* b */
                     50:        rescan,                 /* c */
                     51:        rescan,                 /* d */
                     52:        rescan,                 /* e */
1.28      db         53:        poptofile               /* f */
1.1       deraadt    54: };
1.3       millert    55: static struct KEYMAPE (2 + IMAPEXT) cX4map = {
1.1       deraadt    56:        2,
1.3       millert    57:        2 + IMAPEXT,
1.1       deraadt    58:        rescan,
                     59:        {
1.3       millert    60:                {
1.10      art        61:                        CCHR('F'), CCHR('G'), cX4cF, NULL
1.3       millert    62:                },
                     63:                {
1.10      art        64:                        'b', 'f', cX4b, NULL
1.28      db         65:                }
1.1       deraadt    66:        }
                     67: };
                     68:
1.4       millert    69: static PF cXcB[] = {
1.3       millert    70:        listbuffers,            /* ^B */
                     71:        quit,                   /* ^C */
                     72:        rescan,                 /* ^D */
                     73:        rescan,                 /* ^E */
                     74:        filevisit,              /* ^F */
1.28      db         75:        ctrlg                   /* ^G */
1.3       millert    76: };
1.4       millert    77:
                     78: static PF cXcL[] = {
1.3       millert    79:        lowerregion,            /* ^L */
                     80:        rescan,                 /* ^M */
                     81:        rescan,                 /* ^N */
                     82:        deblank,                /* ^O */
                     83:        rescan,                 /* ^P */
1.23      vincent    84:        rescan,                 /* ^Q */
1.3       millert    85:        rescan,                 /* ^R */
                     86:        filesave,               /* ^S */
                     87:        rescan,                 /* ^T */
                     88:        upperregion,            /* ^U */
1.29      jason      89:        filevisitalt,           /* ^V */
1.3       millert    90:        filewrite,              /* ^W */
1.28      db         91:        swapmark                /* ^X */
1.1       deraadt    92: };
1.4       millert    93:
1.1       deraadt    94: #ifndef NO_MACRO
1.4       millert    95: static PF cXlp[] = {
1.3       millert    96:        definemacro,            /* ( */
1.28      db         97:        finishmacro             /* ) */
1.3       millert    98: };
1.4       millert    99: #endif /* !NO_MACRO */
                    100:
                    101: static PF cX0[] = {
1.3       millert   102:        delwind,                /* 0 */
                    103:        onlywind,               /* 1 */
                    104:        splitwind,              /* 2 */
                    105:        rescan,                 /* 3 */
1.28      db        106:        NULL                    /* 4 */
1.3       millert   107: };
1.4       millert   108:
                    109: static PF cXeq[] = {
1.28      db        110:        showcpos                /* = */
1.3       millert   111: };
1.4       millert   112:
                    113: static PF cXcar[] = {
1.3       millert   114:        enlargewind,            /* ^ */
                    115:        rescan,                 /* _ */
                    116:        rescan,                 /* ` */
                    117:        rescan,                 /* a */
                    118:        usebuffer,              /* b */
                    119:        rescan,                 /* c */
1.1       deraadt   120: #ifndef NO_DIRED
1.3       millert   121:        dired,                  /* d */
1.4       millert   122: #else /* !NO_DIRED */
1.3       millert   123:        rescan,                 /* d */
1.4       millert   124: #endif /* !NO_DIRED */
1.1       deraadt   125: #ifndef NO_MACRO
1.3       millert   126:        executemacro,           /* e */
1.4       millert   127: #else /* !NO_MACRO */
1.3       millert   128:        rescan,                 /* e */
1.4       millert   129: #endif /* !NO_MACRO */
1.3       millert   130:        setfillcol,             /* f */
1.26      deraadt   131:        gotoline,               /* g */
1.3       millert   132:        rescan,                 /* h */
                    133:        fileinsert,             /* i */
                    134:        rescan,                 /* j */
1.27      jfb       135:        killbuffer_cmd,         /* k */
1.3       millert   136:        rescan,                 /* l */
                    137:        rescan,                 /* m */
1.15      deraadt   138:        nextwind,               /* n */
1.3       millert   139:        nextwind,               /* o */
1.15      deraadt   140:        prevwind,               /* p */
1.3       millert   141:        rescan,                 /* q */
                    142:        rescan,                 /* r */
                    143:        savebuffers,            /* s */
1.25      deraadt   144:        rescan,                 /* t */
1.24      deraadt   145:        undo                    /* u */
1.1       deraadt   146: };
1.4       millert   147:
1.1       deraadt   148: #ifndef NO_MACRO
1.3       millert   149: static struct KEYMAPE (6 + IMAPEXT) cXmap = {
1.1       deraadt   150:        6,
1.3       millert   151:        6 + IMAPEXT,
1.4       millert   152: #else /* !NO_MACRO */
1.3       millert   153: static struct KEYMAPE (5 + IMAPEXT) cXmap = {
1.1       deraadt   154:        5,
1.3       millert   155:        5 + IMAPEXT,
1.4       millert   156: #endif /* !NO_MACRO */
1.1       deraadt   157:        rescan,
                    158:        {
1.3       millert   159:                {
1.10      art       160:                        CCHR('B'), CCHR('G'), cXcB, NULL
1.3       millert   161:                },
                    162:                {
1.10      art       163:                        CCHR('L'), CCHR('X'), cXcL, NULL
1.3       millert   164:                },
1.1       deraadt   165: #ifndef NO_MACRO
1.3       millert   166:                {
1.10      art       167:                        '(', ')', cXlp, NULL
1.3       millert   168:                },
1.4       millert   169: #endif /* !NO_MACRO */
1.3       millert   170:                {
                    171:                        '0', '4', cX0, (KEYMAP *) & cX4map
                    172:                },
                    173:                {
1.10      art       174:                        '=', '=', cXeq, NULL
1.3       millert   175:                },
                    176:                {
1.24      deraadt   177:                        '^', 'u', cXcar, NULL
1.28      db        178:                }
1.1       deraadt   179:        }
                    180: };
                    181:
1.4       millert   182: static PF metacG[] = {
1.28      db        183:        ctrlg                   /* ^G */
1.1       deraadt   184: };
1.4       millert   185:
                    186: static PF metacV[] = {
1.28      db        187:        pagenext                /* ^V */
1.1       deraadt   188: };
1.4       millert   189:
                    190: static PF metasp[] = {
1.28      db        191:        justone                 /* space */
1.1       deraadt   192: };
1.4       millert   193:
                    194: static PF metapct[] = {
1.28      db        195:        queryrepl               /* % */
1.1       deraadt   196: };
1.4       millert   197:
                    198: static PF metami[] = {
1.1       deraadt   199:        negative_argument,      /* - */
1.3       millert   200:        rescan,                 /* . */
                    201:        rescan,                 /* / */
                    202:        digit_argument,         /* 0 */
                    203:        digit_argument,         /* 1 */
                    204:        digit_argument,         /* 2 */
                    205:        digit_argument,         /* 3 */
                    206:        digit_argument,         /* 4 */
                    207:        digit_argument,         /* 5 */
                    208:        digit_argument,         /* 6 */
                    209:        digit_argument,         /* 7 */
                    210:        digit_argument,         /* 8 */
                    211:        digit_argument,         /* 9 */
                    212:        rescan,                 /* : */
                    213:        rescan,                 /* ; */
                    214:        gotobob,                /* < */
                    215:        rescan,                 /* = */
1.28      db        216:        gotoeob                 /* > */
1.3       millert   217: };
1.4       millert   218:
                    219: static PF metalb[] = {
1.3       millert   220:        gotobop,                /* [ */
                    221:        delwhite,               /* \ */
                    222:        gotoeop,                /* ] */
                    223:        rescan,                 /* ^ */
                    224:        rescan,                 /* _ */
                    225:        rescan,                 /* ` */
                    226:        rescan,                 /* a */
                    227:        backword,               /* b */
                    228:        capword,                /* c */
                    229:        delfword,               /* d */
                    230:        rescan,                 /* e */
1.28      db        231:        forwword                /* f */
1.3       millert   232: };
1.4       millert   233:
                    234: static PF metal[] = {
1.3       millert   235:        lowerword,              /* l */
                    236:        rescan,                 /* m */
                    237:        rescan,                 /* n */
                    238:        rescan,                 /* o */
                    239:        rescan,                 /* p */
                    240:        fillpara,               /* q */
                    241:        backsearch,             /* r */
                    242:        forwsearch,             /* s */
                    243:        rescan,                 /* t */
                    244:        upperword,              /* u */
                    245:        backpage,               /* v */
                    246:        copyregion,             /* w */
1.28      db        247:        extend                  /* x */
1.3       millert   248: };
1.4       millert   249:
                    250: static PF metatilde[] = {
1.3       millert   251:        notmodified,            /* ~ */
1.28      db        252:        delbword                /* DEL */
1.1       deraadt   253: };
1.4       millert   254:
1.3       millert   255: static struct KEYMAPE (8 + IMAPEXT) metamap = {
1.1       deraadt   256:        8,
1.3       millert   257:        8 + IMAPEXT,
1.1       deraadt   258:        rescan,
                    259:        {
1.3       millert   260:                {
1.10      art       261:                        CCHR('G'), CCHR('G'), metacG, NULL
1.3       millert   262:                },
                    263:                {
1.10      art       264:                        CCHR('V'), CCHR('V'), metacV, NULL
1.3       millert   265:                },
                    266:                {
1.10      art       267:                        ' ', ' ', metasp, NULL
1.3       millert   268:                },
                    269:                {
1.10      art       270:                        '%', '%', metapct, NULL
1.3       millert   271:                },
                    272:                {
1.10      art       273:                        '-', '>', metami, NULL
1.3       millert   274:                },
                    275:                {
1.10      art       276:                        '[', 'f', metalb, NULL
1.3       millert   277:                },
                    278:                {
1.10      art       279:                        'l', 'x', metal, NULL
1.3       millert   280:                },
                    281:                {
1.10      art       282:                        '~', CCHR('?'), metatilde, NULL
1.28      db        283:                }
1.1       deraadt   284:        }
                    285: };
                    286:
1.4       millert   287: static PF fund_at[] = {
1.3       millert   288:        setmark,                /* ^@ */
                    289:        gotobol,                /* ^A */
                    290:        backchar,               /* ^B */
                    291:        rescan,                 /* ^C */
                    292:        forwdel,                /* ^D */
                    293:        gotoeol,                /* ^E */
                    294:        forwchar,               /* ^F */
                    295:        ctrlg,                  /* ^G */
1.1       deraadt   296: #ifndef NO_HELP
1.6       art       297:        NULL,                   /* ^H */
1.4       millert   298: #else /* !NO_HELP */
1.3       millert   299:        rescan,                 /* ^H */
1.4       millert   300: #endif /* !NO_HELP */
1.1       deraadt   301: };
1.4       millert   302:
1.1       deraadt   303: /* ^I is selfinsert */
1.4       millert   304: static PF fund_CJ[] = {
1.3       millert   305:        indent,                 /* ^J */
                    306:        killline,               /* ^K */
                    307:        reposition,             /* ^L */
                    308:        newline,                /* ^M */
                    309:        forwline,               /* ^N */
                    310:        openline,               /* ^O */
                    311:        backline,               /* ^P */
                    312:        quote,                  /* ^Q */
                    313:        backisearch,            /* ^R */
                    314:        forwisearch,            /* ^S */
                    315:        twiddle,                /* ^T */
1.1       deraadt   316:        universal_argument,     /* ^U */
1.3       millert   317:        forwpage,               /* ^V */
                    318:        killregion,             /* ^W */
1.6       art       319:        NULL,                   /* ^X */
1.3       millert   320:        yank,                   /* ^Y */
1.28      db        321:        spawncli                /* ^Z */
1.1       deraadt   322: };
1.4       millert   323:
                    324: static PF fund_esc[] = {
1.6       art       325:        NULL,                   /* esc */
1.4       millert   326:        rescan,                 /* ^\ selfinsert is default on fundamental */
1.3       millert   327:        rescan,                 /* ^] */
                    328:        rescan,                 /* ^^ */
1.28      db        329:        undo                    /* ^_ */
1.1       deraadt   330: };
1.4       millert   331:
                    332: static PF fund_del[] = {
1.28      db        333:        backdel                 /* DEL */
1.1       deraadt   334: };
                    335:
                    336: #ifndef        FUND_XMAPS
                    337: #define NFUND_XMAPS    0       /* extra map sections after normal ones */
                    338: #endif
                    339:
1.3       millert   340: static struct KEYMAPE (4 + NFUND_XMAPS + IMAPEXT) fundmap = {
1.1       deraadt   341:        4 + NFUND_XMAPS,
                    342:        4 + NFUND_XMAPS + IMAPEXT,
                    343:        selfinsert,
                    344:        {
                    345: #ifndef NO_HELP
1.3       millert   346:                {
                    347:                        CCHR('@'), CCHR('H'), fund_at, (KEYMAP *) & helpmap
                    348:                },
1.4       millert   349: #else /* !NO_HELP */
1.3       millert   350:                {
1.10      art       351:                        CCHR('@'), CCHR('H'), fund_at, NULL
1.3       millert   352:                },
1.4       millert   353: #endif /* !NO_HELP */
1.3       millert   354:                {
                    355:                        CCHR('J'), CCHR('Z'), fund_CJ, (KEYMAP *) & cXmap
                    356:                },
                    357:                {
                    358:                        CCHR('['), CCHR('_'), fund_esc, (KEYMAP *) & metamap
                    359:                },
                    360:                {
1.10      art       361:                        CCHR('?'), CCHR('?'), fund_del, NULL
1.3       millert   362:                },
1.4       millert   363: #ifdef FUND_XMAPS
1.1       deraadt   364:                FUND_XMAPS,
1.4       millert   365: #endif /* FUND_XMAPS */
1.1       deraadt   366:        }
                    367: };
                    368:
1.4       millert   369: static PF fill_sp[] = {
1.28      db        370:        fillword                /* ' ' */
1.1       deraadt   371: };
1.4       millert   372:
1.3       millert   373: static struct KEYMAPE (1 + IMAPEXT) fillmap = {
1.1       deraadt   374:        1,
1.3       millert   375:        1 + IMAPEXT,
1.1       deraadt   376:        rescan,
                    377:        {
1.3       millert   378:                {
1.10      art       379:                        ' ', ' ', fill_sp, NULL
1.28      db        380:                }
1.1       deraadt   381:        }
                    382: };
                    383:
1.4       millert   384: static PF indent_lf[] = {
1.3       millert   385:        newline,                /* ^J */
                    386:        rescan,                 /* ^K */
                    387:        rescan,                 /* ^L */
1.28      db        388:        indent                  /* ^M */
1.1       deraadt   389: };
1.4       millert   390:
1.3       millert   391: static struct KEYMAPE (1 + IMAPEXT) indntmap = {
1.1       deraadt   392:        1,
1.3       millert   393:        1 + IMAPEXT,
1.1       deraadt   394:        rescan,
                    395:        {
1.3       millert   396:                {
1.10      art       397:                        CCHR('J'), CCHR('M'), indent_lf, NULL
1.28      db        398:                }
1.1       deraadt   399:        }
                    400: };
1.4       millert   401:
                    402: static PF blink_rp[] = {
1.28      db        403:        showmatch               /* ) */
1.1       deraadt   404: };
1.4       millert   405:
1.3       millert   406: static struct KEYMAPE (1 + IMAPEXT) blinkmap = {
1.1       deraadt   407:        1,
1.3       millert   408:        1 + IMAPEXT,
1.1       deraadt   409:        rescan,
                    410:        {
1.3       millert   411:                {
1.10      art       412:                        ')', ')', blink_rp, NULL
1.28      db        413:                }
1.1       deraadt   414:        }
                    415: };
                    416:
1.4       millert   417: #ifdef NOTAB
                    418: static PF notab_tab[] = {
1.28      db        419:        space_to_tabstop        /* ^I */
1.1       deraadt   420: };
1.4       millert   421:
1.3       millert   422: static struct KEYMAPE (1 + IMAPEXT) notabmap = {
1.1       deraadt   423:        1,
1.3       millert   424:        1 + IMAPEXT,
1.1       deraadt   425:        rescan,
                    426:        {
1.3       millert   427:                {
1.10      art       428:                        CCHR('I'), CCHR('I'), notab_tab, NULL
1.28      db        429:                }
1.1       deraadt   430:        }
                    431: };
1.4       millert   432: #endif /* NOTAB */
1.1       deraadt   433:
1.3       millert   434: static struct KEYMAPE (1 + IMAPEXT) overwmap = {
1.1       deraadt   435:        0,
1.3       millert   436:        1 + IMAPEXT,            /* 1 to avoid 0 sized array */
1.1       deraadt   437:        rescan,
                    438:        {
                    439:                /* unused dummy entry for VMS C */
1.3       millert   440:                {
1.10      art       441:                        (KCHAR)0, (KCHAR)0, NULL, NULL
1.28      db        442:                }
1.1       deraadt   443:        }
                    444: };
                    445:
                    446: #ifndef NO_DIRED
1.4       millert   447: static PF dirednul[] = {
1.3       millert   448:        setmark,                /* ^@ */
                    449:        gotobol,                /* ^A */
                    450:        backchar,               /* ^B */
                    451:        rescan,                 /* ^C */
                    452:        d_del,                  /* ^D */
                    453:        gotoeol,                /* ^E */
                    454:        forwchar,               /* ^F */
                    455:        ctrlg,                  /* ^G */
1.1       deraadt   456: #ifndef NO_HELP
1.6       art       457:        NULL,                   /* ^H */
1.4       millert   458: #endif /* !NO_HELP */
1.1       deraadt   459: };
1.4       millert   460:
                    461: static PF diredcl[] = {
1.3       millert   462:        reposition,             /* ^L */
                    463:        forwline,               /* ^M */
                    464:        forwline,               /* ^N */
                    465:        rescan,                 /* ^O */
                    466:        backline,               /* ^P */
                    467:        rescan,                 /* ^Q */
                    468:        backisearch,            /* ^R */
                    469:        forwisearch,            /* ^S */
                    470:        rescan,                 /* ^T */
                    471:        universal_argument,     /* ^U */
                    472:        forwpage,               /* ^V */
                    473:        rescan,                 /* ^W */
1.28      db        474:        NULL                    /* ^X */
1.1       deraadt   475: };
1.4       millert   476:
                    477: static PF diredcz[] = {
1.3       millert   478:        spawncli,               /* ^Z */
1.6       art       479:        NULL,                   /* esc */
1.3       millert   480:        rescan,                 /* ^\ */
                    481:        rescan,                 /* ^] */
                    482:        rescan,                 /* ^^ */
                    483:        rescan,                 /* ^_ */
1.28      db        484:        forwline                /* SP */
1.3       millert   485: };
1.4       millert   486:
                    487: static PF diredc[] = {
1.3       millert   488:        d_copy,                 /* c */
                    489:        d_del,                  /* d */
                    490:        d_findfile,             /* e */
1.28      db        491:        d_findfile              /* f */
1.3       millert   492: };
1.4       millert   493:
                    494: static PF diredn[] = {
1.3       millert   495:        forwline,               /* n */
                    496:        d_ffotherwindow,        /* o */
                    497:        backline,               /* p */
                    498:        rescan,                 /* q */
                    499:        d_rename,               /* r */
                    500:        rescan,                 /* s */
                    501:        rescan,                 /* t */
                    502:        d_undel,                /* u */
                    503:        rescan,                 /* v */
                    504:        rescan,                 /* w */
1.28      db        505:        d_expunge               /* x */
1.1       deraadt   506: };
1.4       millert   507:
                    508: static PF direddl[] = {
1.28      db        509:        d_undelbak              /* del */
1.1       deraadt   510: };
                    511:
                    512: #ifndef        DIRED_XMAPS
                    513: #define        NDIRED_XMAPS    0       /* number of extra map sections */
1.4       millert   514: #endif /* DIRED_XMAPS */
1.1       deraadt   515:
1.3       millert   516: static struct KEYMAPE (6 + NDIRED_XMAPS + IMAPEXT) diredmap = {
1.1       deraadt   517:        6 + NDIRED_XMAPS,
                    518:        6 + NDIRED_XMAPS + IMAPEXT,
                    519:        rescan,
                    520:        {
                    521: #ifndef NO_HELP
1.3       millert   522:                {
                    523:                        CCHR('@'), CCHR('H'), dirednul, (KEYMAP *) & helpmap
                    524:                },
1.4       millert   525: #else /* !NO_HELP */
1.3       millert   526:                {
1.10      art       527:                        CCHR('@'), CCHR('G'), dirednul, NULL
1.3       millert   528:                },
1.4       millert   529: #endif /* !NO_HELP */
1.3       millert   530:                {
                    531:                        CCHR('L'), CCHR('X'), diredcl, (KEYMAP *) & cXmap
                    532:                },
                    533:                {
                    534:                        CCHR('Z'), ' ', diredcz, (KEYMAP *) & metamap
                    535:                },
                    536:                {
1.10      art       537:                        'c', 'f', diredc, NULL
1.3       millert   538:                },
                    539:                {
1.10      art       540:                        'n', 'x', diredn, NULL
1.3       millert   541:                },
                    542:                {
1.10      art       543:                        CCHR('?'), CCHR('?'), direddl, NULL
1.3       millert   544:                },
1.1       deraadt   545: #ifdef DIRED_XMAPS
1.3       millert   546:                DIRED_XMAPS,    /* map sections for dired mode keys      */
1.4       millert   547: #endif /* DIRED_XMAPS */
1.1       deraadt   548:        }
                    549: };
1.4       millert   550: #endif /* !NO_DIRED */
1.1       deraadt   551:
1.28      db        552: MAPS   fundamental_mode = { (KEYMAP *)&fundmap, "fundamental" };
1.13      art       553:
1.3       millert   554: /*
                    555:  * give names to the maps, for use by help etc. If the map is to be bindable,
                    556:  * it must also be listed in the function name table below with the same
1.28      db        557:  * name. Maps created dynamically currently don't get added here, thus are
1.3       millert   558:  * unnamed. Modes are just named keymaps with functions to add/subtract them
                    559:  * from a buffer's list of modes.  If you change a mode name, change it in
1.1       deraadt   560:  * modes.c also.
                    561:  */
                    562:
1.13      art       563: static MAPS map_table[] = {
                    564:        {(KEYMAP *) &fillmap, "fill",},
                    565:        {(KEYMAP *) &indntmap, "indent",},
                    566:        {(KEYMAP *) &blinkmap, "blink",},
1.4       millert   567: #ifdef NOTAB
1.13      art       568:        {(KEYMAP *) &notabmap, "notab",},
1.4       millert   569: #endif /* NOTAB */
1.13      art       570:        {(KEYMAP *) &overwmap, "overwrite",},
                    571:        {(KEYMAP *) &metamap, "esc prefix",},
                    572:        {(KEYMAP *) &cXmap, "c-x prefix",},
                    573:        {(KEYMAP *) &cX4map, "c-x 4 prefix",},
1.1       deraadt   574: #ifndef NO_HELP
1.13      art       575:        {(KEYMAP *) &helpmap, "help",},
1.1       deraadt   576: #endif
                    577: #ifndef NO_DIRED
1.13      art       578:        {(KEYMAP *) &diredmap, "dired",},
1.1       deraadt   579: #endif
1.28      db        580:        {NULL, NULL}
1.1       deraadt   581: };
                    582:
1.13      art       583: MAPS *maps;
                    584:
                    585: void
                    586: maps_init(void)
                    587: {
1.28      db        588:        int      i;
                    589:        MAPS    *mp;
1.13      art       590:
                    591:        maps = &fundamental_mode;
                    592:        for (i = 0; map_table[i].p_name != NULL; i++) {
                    593:                mp = &map_table[i];
                    594:                mp->p_next = maps;
                    595:                maps = mp;
                    596:        }
                    597: }
1.9       art       598:
1.13      art       599: int
1.19      vincent   600: maps_add(KEYMAP *map, const char *name)
1.13      art       601: {
1.28      db        602:        MAPS    *mp;
1.13      art       603:
                    604:        if ((mp = malloc(sizeof(*mp))) == NULL)
1.28      db        605:                return (FALSE);
1.13      art       606:
                    607:        mp->p_name = name;
                    608:        mp->p_map = map;
                    609:        mp->p_next = maps;
                    610:        maps = mp;
                    611:
1.28      db        612:        return (TRUE);
1.13      art       613: }
1.1       deraadt   614:
1.19      vincent   615: const char *
1.13      art       616: map_name(KEYMAP *map)
1.1       deraadt   617: {
1.28      db        618:        MAPS    *mp;
1.1       deraadt   619:
1.13      art       620:        for (mp = maps; mp != NULL; mp = mp->p_next)
1.3       millert   621:                if (mp->p_map == map)
1.28      db        622:                        return (mp->p_name);
                    623:        return (NULL);
1.1       deraadt   624: }
                    625:
1.4       millert   626: MAPS *
1.19      vincent   627: name_mode(const char *name)
1.1       deraadt   628: {
1.28      db        629:        MAPS    *mp;
1.1       deraadt   630:
1.13      art       631:        for (mp = maps; mp != NULL; mp = mp->p_next)
1.3       millert   632:                if (strcmp(mp->p_name, name) == 0)
1.28      db        633:                        return (mp);
                    634:        return (NULL);
1.1       deraadt   635: }
                    636:
1.4       millert   637: KEYMAP *
1.19      vincent   638: name_map(const char *name)
1.1       deraadt   639: {
1.4       millert   640:        MAPS    *mp;
1.28      db        641:        return ((mp = name_mode(name)) == NULL ? NULL : mp->p_map);
1.1       deraadt   642: }