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

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