[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.24

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