home *** CD-ROM | disk | FTP | other *** search
- /*
- * Keyboard maps. This is character set dependent.
- * The terminal specific parts of building the
- * keymap has been moved to a better place.
- */
- #include "def.h"
- #include "kbd.h"
-
- /*
- * Defined by "basic.c".
- */
- extern int gotobol(); /* Move to start of line */
- extern int backchar(); /* Move backward by characters */
- extern int gotoeol(); /* Move to end of line */
- extern int forwchar(); /* Move forward by characters */
- extern int gotobob(); /* Move to start of buffer */
- extern int gotoeob(); /* Move to end of buffer */
- extern int forwline(); /* Move forward by lines */
- extern int backline(); /* Move backward by lines */
- extern int forwpage(); /* Move forward by pages */
- extern int backpage(); /* Move backward by pages */
- extern int pagenext(); /* Page forward next window */
- extern int setmark(); /* Set mark */
- extern int swapmark(); /* Swap "." and mark */
- extern int gotoline(); /* Go to a specified line. */
- #ifdef GOSMACS
- extern int forw1page(); /* move forward by lines */
- extern int back1page(); /* move back by lines */
- #endif
-
- /*
- * Defined by "buffer.c".
- */
- extern int listbuffers(); /* Display list of buffers */
- extern int usebuffer(); /* Switch a window to a buffer */
- extern int poptobuffer(); /* Other window to a buffer */
- extern int killbuffer(); /* Make a buffer go away. */
- extern int savebuffers(); /* Save unmodified buffers */
- extern int bufferinsert(); /* Insert buffer into another */
- extern int notmodified(); /* Reset modification flag */
-
- #ifndef NO_DIR
- /*
- * Defined by "dir.c"
- */
- extern int changedir(); /* change current directory */
- extern int showcwdir(); /* show current directory */
-
- #ifndef NO_DIRED
- /*
- * defined by "dired.c"
- */
- extern int dired(); /* dired */
- extern int d_findfile(); /* dired find file */
- extern int d_del(); /* dired mark for deletion */
- extern int d_undel(); /* dired unmark */
- extern int d_undelbak(); /* dired unmark backwards */
- extern int d_expunge(); /* dired expunge */
- extern int d_copy(); /* dired copy */
- extern int d_rename(); /* dired rename */
- extern int d_otherwindow(); /* dired other window */
- extern int d_ffotherwindow(); /* dired find file other window */
- #endif
- #endif
-
- /*
- * Defined by "extend.c".
- */
- extern int extend(); /* Extended commands. */
- extern int bindtokey(); /* Modify global key bindings. */
- extern int localbind(); /* Modify mode key bindings. */
- extern int define_key(); /* modify any key map */
- extern int unbindtokey(); /* delete global binding */
- extern int localunbind(); /* delete local binding */
- extern int insert(); /* insert string */
- #ifndef NO_STARTUP
- extern int evalexpr(); /* Extended commands (again) */
- extern int evalbuffer(); /* Evaluate current buffer */
- extern int evalfile(); /* Evaluate a file */
- #endif
-
- /*
- * Defined by "file.c".
- */
- extern int filevisit(); /* Get a file, read write */
- extern int poptofile(); /* Get a file, other window */
- extern int filewrite(); /* Write a file */
- extern int filesave(); /* Save current file */
- extern int fileinsert(); /* Insert file into buffer */
- #ifndef NO_BACKUP
- extern int makebkfile(); /* Control backups on saves */
- #endif
-
- /*
- * defined by help.c
- */
- #ifndef NO_HELP
- extern int desckey(); /* describe key */
- extern int wallchart(); /* Make wall chart. */
- extern int help_help(); /* help help */
- extern int apropos_command(); /* apropos */
- #endif
-
- /*
- * defined by "kbd.c"
- */
- #ifdef DO_METAKEY
- extern int do_meta(); /* interpret meta keys */
- #endif
- #ifdef BSMAP
- extern int bsmap(); /* backspace mapping */
- #endif
- extern int universal_argument(); /* Ctrl-U */
- extern int digit_argument(); /* M-1, etc. */
- extern int negative_argument(); /* M-- */
- extern int selfinsert(); /* Insert character */
- extern int rescan(); /* internal try again function */
-
- /*
- * defined by "macro.c"
- */
- #ifndef NO_MACRO
- extern int definemacro(); /* Begin macro */
- extern int finishmacro(); /* End macro */
- extern int executemacro(); /* Execute macro */
- #endif
-
- /*
- * Defined by "main.c".
- */
- extern int ctrlg(); /* Abort out of things */
- extern int quit(); /* Quit */
-
- /*
- * Defined by "match.c"
- */
- extern int showmatch(); /* Hack to show matching paren */
-
- /* defined by "modes.c" */
-
- extern int indentmode(); /* set auto-indent mode */
- extern int fillmode(); /* set word-wrap mode */
- extern int blinkparen(); /* Fake blink-matching-paren var */
- #ifdef NOTAB
- extern int notabmode(); /* no tab mode */
- #endif
- extern int overwrite(); /* overwrite mode */
- extern int set_default_mode(); /* set default modes */
-
- /*
- * defined by "paragraph.c" - the paragraph justification code.
- */
- extern int gotobop(); /* Move to start of paragraph. */
- extern int gotoeop(); /* Move to end of paragraph. */
- extern int fillpara(); /* Justify a paragraph. */
- extern int killpara(); /* Delete a paragraph. */
- extern int setfillcol(); /* Set fill column for justify. */
- extern int fillword(); /* Insert char with word wrap. */
-
- /*
- * Defined by "random.c".
- */
- extern int showcpos(); /* Show the cursor position */
- extern int twiddle(); /* Twiddle characters */
- extern int quote(); /* Insert literal */
- extern int openline(); /* Open up a blank line */
- extern int newline(); /* Insert newline */
- extern int deblank(); /* Delete blank lines */
- extern int justone(); /* Delete extra whitespace */
- extern int delwhite(); /* Delete all whitespace */
- extern int indent(); /* Insert newline, then indent */
- extern int forwdel(); /* Forward delete */
- extern int backdel(); /* Backward delete in */
- extern int killline(); /* Kill forward */
- extern int yank(); /* Yank back from killbuffer. */
- #ifdef NOTAB
- extern int space_to_tabstop();
- #endif
-
- #ifdef REGEX
- /*
- * Defined by "re_search.c"
- */
- extern int re_forwsearch(); /* Regex search forward */
- extern int re_backsearch(); /* Regex search backwards */
- extern int re_searchagain(); /* Repeat regex search command */
- extern int re_queryrepl(); /* Regex query replace */
- extern int setcasefold(); /* Set case fold in searches */
- extern int delmatchlines(); /* Delete all lines matching */
- extern int delnonmatchlines(); /* Delete all lines not matching */
- extern int cntmatchlines(); /* Count matching lines */
- extern int cntnonmatchlines(); /* Count nonmatching lines */
- #endif
-
- /*
- * Defined by "region.c".
- */
- extern int killregion(); /* Kill region. */
- extern int copyregion(); /* Copy region to kill buffer. */
- extern int lowerregion(); /* Lower case region. */
- extern int upperregion(); /* Upper case region. */
- #ifdef PREFIXREGION
- extern int prefixregion(); /* Prefix all lines in region */
- extern int setprefix(); /* Set line prefix string */
- #endif
-
- /*
- * Defined by "search.c".
- */
- extern int forwsearch(); /* Search forward */
- extern int backsearch(); /* Search backwards */
- extern int searchagain(); /* Repeat last search command */
- extern int forwisearch(); /* Incremental search forward */
- extern int backisearch(); /* Incremental search backwards */
- extern int queryrepl(); /* Query replace */
-
- /*
- * Defined by "spawn.c".
- */
- extern int spawncli(); /* Run CLI in a subjob. */
- #ifdef VMS
- extern int attachtoparent(); /* Attach to parent process */
- #endif
-
- /* defined by "version.c" */
-
- extern int showversion(); /* Show version numbers, etc. */
-
- /*
- * Defined by "window.c".
- */
- extern int reposition(); /* Reposition window */
- extern int refresh(); /* Refresh the screen */
- extern int nextwind(); /* Move to the next window */
- #ifdef GOSMACS
- extern int prevwind(); /* Move to the previous window */
- #endif
- extern int onlywind(); /* Make current window only one */
- extern int splitwind(); /* Split current window */
- extern int delwind(); /* Delete current window */
- extern int enlargewind(); /* Enlarge display window. */
- extern int shrinkwind(); /* Shrink window. */
-
- /*
- * Defined by "word.c".
- */
- extern int backword(); /* Backup by words */
- extern int forwword(); /* Advance by words */
- extern int upperword(); /* Upper case word. */
- extern int lowerword(); /* Lower case word. */
- extern int capword(); /* Initial capitalize word. */
- extern int delfword(); /* Delete forward word. */
- extern int delbword(); /* Delete backward word. */
-
- #ifdef AMIGA
- #ifdef DO_ICONIFY
- extern int tticon();
- #endif
- #ifdef DO_MENU
- extern int amigamenu(); /* Menu function */
- #endif
- #ifdef MOUSE
- extern int amigamouse(); /* Amiga mouse functions */
- extern int mgotobob();
- extern int mforwdel();
- extern int mdelwhite();
- extern int mdelwind();
- extern int mgotoeob();
- extern int menlargewind();
- extern int mkillline();
- extern int mkillregion();
- extern int mdelfword();
- extern int mreposition();
- extern int mbackpage();
- extern int mforwpage();
- extern int mshrinkwind();
- extern int msplitwind();
- extern int myank();
- #endif MOUSE
-
- extern int togglewindow(); /* Defined by "ttyio.c" */
- extern int togglezooms(); /* "" "" */
-
- #ifdef CHANGE_FONT
- extern int setfont(); /* Defined by "ttyio.c" */
- #endif
-
- #ifdef CHANGE_COLOR
- /* functions to mess with the mode line rendition, window colors*/
- extern int ttmode(); /* Defined by "tty.c" */
- extern int tttext(); /* "" */
- extern int textforeground(); /* "" */
- extern int textbackground(); /* "" */
- extern int modeforeground(); /* "" */
- extern int modebackground(); /* "" */
- #endif
-
- /*
- * This file contains map segment definitions for adding function keys to
- * keymap declarations. Currently you can add things to the fundamental
- * mode keymap and the dired mode keymap. See the declaration of
- * diredmap and fundmap for details.
- */
- #include "amiga_maps.c"
-
- #endif /* AMIGA */
-
- /* initial keymap declarations, deepest first */
-
- #ifndef NO_HELP
- static PF cHcG[] = {
- ctrlg, /* ^G */
- help_help, /* ^H */
- };
- static PF cHa[] = {
- apropos_command,/* a */
- wallchart, /* b */
- desckey, /* c */
- };
- static struct KEYMAPE(2+IMAPEXT) helpmap = {
- 2,
- 2+IMAPEXT,
- rescan,
- {
- {CCHR('G'),CCHR('H'), cHcG, (KEYMAP *)NULL},
- {'a', 'c', cHa, (KEYMAP *)NULL},
- }
- };
- #endif
-
- static PF cX4cF[] = {
- poptofile, /* ^f */
- ctrlg, /* ^g */
- };
- static PF cX4b[] = {
- poptobuffer, /* b */
- rescan, /* c */
- rescan, /* d */
- rescan, /* e */
- poptofile, /* f */
- };
- static struct KEYMAPE(2+IMAPEXT) cX4map = {
- 2,
- 2+IMAPEXT,
- rescan,
- {
- {CCHR('F'),CCHR('G'), cX4cF, (KEYMAP *)NULL},
- {'b', 'f', cX4b, (KEYMAP *)NULL},
- }
- };
-
- static PF cXcB[] = {
- listbuffers, /* ^B */
- quit, /* ^C */
- rescan, /* ^D */
- rescan, /* ^E */
- filevisit, /* ^F */
- ctrlg, /* ^G */
- };
- static PF cXcL[] = {
- lowerregion, /* ^L */
- rescan, /* ^M */
- rescan, /* ^N */
- deblank, /* ^O */
- rescan, /* ^P */
- rescan, /* ^Q */
- rescan, /* ^R */
- filesave, /* ^S */
- rescan, /* ^T */
- upperregion, /* ^U */
- rescan, /* ^V */
- filewrite, /* ^W */
- swapmark, /* ^X */
- };
- #ifndef NO_MACRO
- static PF cXlp[] = {
- definemacro, /* ( */
- finishmacro, /* ) */
- };
- #endif
- static PF cX0[] = {
- delwind, /* 0 */
- onlywind, /* 1 */
- splitwind, /* 2 */
- rescan, /* 3 */
- prefix, /* 4 */
- };
- static PF cXeq[] = {
- showcpos, /* = */
- };
- static PF cXcar[] = {
- enlargewind, /* ^ */
- rescan, /* _ */
- rescan, /* ` */
- rescan, /* a */
- usebuffer, /* b */
- rescan, /* c */
- #ifndef NO_DIRED
- dired, /* d */
- #else
- rescan, /* d */
- #endif
- #ifndef NO_MACRO
- executemacro, /* e */
- #else
- rescan, /* e */
- #endif
- setfillcol, /* f */
- rescan, /* g */
- rescan, /* h */
- fileinsert, /* i */
- rescan, /* j */
- killbuffer, /* k */
- rescan, /* l */
- rescan, /* m */
- rescan, /* n */
- nextwind, /* o */
- rescan, /* p */
- rescan, /* q */
- rescan, /* r */
- savebuffers, /* s */
- };
- #ifndef NO_MACRO
- static struct KEYMAPE(6+IMAPEXT) cXmap = {
- 6,
- 6+IMAPEXT,
- #else
- static struct KEYMAPE(5+IMAPEXT) cXmap = {
- 5,
- 5+IMAPEXT,
- #endif
- rescan,
- {
- {CCHR('B'),CCHR('G'), cXcB, (KEYMAP *)NULL},
- {CCHR('L'),CCHR('X'), cXcL, (KEYMAP *)NULL},
- #ifndef NO_MACRO
- {'(', ')', cXlp, (KEYMAP *)NULL},
- #endif
- {'0', '4', cX0, (KEYMAP *)&cX4map},
- {'=', '=', cXeq, (KEYMAP *)NULL},
- {'^', 's', cXcar, (KEYMAP *)NULL},
- }
- };
-
- static PF metacG[] = {
- ctrlg, /* ^G */
- };
- static PF metacV[] = {
- pagenext, /* ^V */
- };
- static PF metasp[] = {
- justone, /* space */
- };
- static PF metapct[] = {
- queryrepl, /* % */
- };
- static PF metami[] = {
- negative_argument, /* - */
- rescan, /* . */
- rescan, /* / */
- digit_argument, /* 0 */
- digit_argument, /* 1 */
- digit_argument, /* 2 */
- digit_argument, /* 3 */
- digit_argument, /* 4 */
- digit_argument, /* 5 */
- digit_argument, /* 6 */
- digit_argument, /* 7 */
- digit_argument, /* 8 */
- digit_argument, /* 9 */
- rescan, /* : */
- rescan, /* ; */
- gotobob, /* < */
- rescan, /* = */
- gotoeob, /* > */
- };
- static PF metalb[] = {
- gotobop, /* [ */
- delwhite, /* \ */
- gotoeop, /* ] */
- rescan, /* ^ */
- rescan, /* _ */
- rescan, /* ` */
- rescan, /* a */
- backword, /* b */
- capword, /* c */
- delfword, /* d */
- rescan, /* e */
- forwword, /* f */
- };
- static PF metal[] = {
- lowerword, /* l */
- rescan, /* m */
- rescan, /* n */
- rescan, /* o */
- rescan, /* p */
- fillpara, /* q */
- backsearch, /* r */
- forwsearch, /* s */
- rescan, /* t */
- upperword, /* u */
- backpage, /* v */
- copyregion, /* w */
- extend, /* x */
- };
- static PF metatilde[] = {
- notmodified, /* ~ */
- delbword, /* DEL */
- };
- static struct KEYMAPE(8+IMAPEXT) metamap = {
- 8,
- 8+IMAPEXT,
- rescan,
- {
- {CCHR('G'),CCHR('G'), metacG, (KEYMAP *)NULL},
- {CCHR('V'),CCHR('V'), metacV, (KEYMAP *)NULL},
- {' ', ' ', metasp, (KEYMAP *)NULL},
- {'%', '%', metapct,(KEYMAP *)NULL},
- {'-', '>', metami, (KEYMAP *)NULL},
- {'[', 'f', metalb, (KEYMAP *)NULL},
- {'l', 'x', metal, (KEYMAP *)NULL},
- {'~', CCHR('?'), metatilde,(KEYMAP *)NULL},
- }
- };
-
- static PF fund_at[] = {
- setmark, /* ^@ */
- gotobol, /* ^A */
- backchar, /* ^B */
- rescan, /* ^C */
- forwdel, /* ^D */
- gotoeol, /* ^E */
- forwchar, /* ^F */
- ctrlg, /* ^G */
- #ifndef NO_HELP
- prefix, /* ^H */
- #else
- rescan, /* ^H */
- #endif
- };
- /* ^I is selfinsert */
- static PF fund_CJ[] = {
- indent, /* ^J */
- killline, /* ^K */
- reposition, /* ^L */
- newline, /* ^M */
- forwline, /* ^N */
- openline, /* ^O */
- backline, /* ^P */
- quote, /* ^Q */
- backisearch, /* ^R */
- forwisearch, /* ^S */
- twiddle, /* ^T */
- universal_argument, /* ^U */
- forwpage, /* ^V */
- killregion, /* ^W */
- prefix, /* ^X */
- yank, /* ^Y */
- #ifndef VMS
- spawncli, /* ^Z */
- #else
- attachtoparent, /* ^Z */
- #endif
- };
- static PF fund_esc[] = {
- prefix, /* esc */
- rescan, /* ^\ */ /* selfinsert is default on fundamental */
- rescan, /* ^] */
- rescan, /* ^^ */
- rescan, /* ^_ */
- };
- static PF fund_del[] = {
- backdel, /* DEL */
- };
-
- #ifndef FUND_XMAPS
- #define NFUND_XMAPS 0 /* extra map sections after normal ones */
- #endif
-
- static struct KEYMAPE(4+NFUND_XMAPS+IMAPEXT) fundmap = {
- 4 + NFUND_XMAPS,
- 4 + NFUND_XMAPS + IMAPEXT,
- selfinsert,
- {
- #ifndef NO_HELP
- {CCHR('@'),CCHR('H'), fund_at, (KEYMAP *)&helpmap},
- #else
- {CCHR('@'),CCHR('H'), fund_at, (KEYMAP *)NULL},
- #endif
- {CCHR('J'),CCHR('Z'), fund_CJ, (KEYMAP *)&cXmap},
- {CCHR('['),CCHR('_'), fund_esc,(KEYMAP *)&metamap},
- {CCHR('?'),CCHR('?'), fund_del,(KEYMAP *)NULL},
- #ifdef FUND_XMAPS
- FUND_XMAPS,
- #endif
- }
- };
-
- static PF fill_sp[] = {
- fillword, /* ' ' */
- };
- static struct KEYMAPE(1+IMAPEXT) fillmap = {
- 1,
- 1+IMAPEXT,
- rescan,
- {
- {' ', ' ', fill_sp, (KEYMAP *)NULL},
- }
- };
-
- static PF indent_lf[] = {
- newline, /* ^J */
- rescan, /* ^K */
- rescan, /* ^L */
- indent, /* ^M */
- };
- static struct KEYMAPE(1+IMAPEXT) indntmap = {
- 1,
- 1+IMAPEXT,
- rescan,
- {
- {CCHR('J'), CCHR('M'), indent_lf, (KEYMAP *)NULL},
- }
- };
- static PF blink_rp[] = {
- showmatch, /* ) */
- };
- static struct KEYMAPE(1+IMAPEXT) blinkmap = {
- 1,
- 1+IMAPEXT,
- rescan,
- {
- {')', ')', blink_rp, (KEYMAP *)NULL},
- }
- };
-
- #ifdef NOTAB
- static PF notab_tab[] = {
- space_to_tabstop, /* ^I */
- };
- static struct KEYMAPE(1+IMAPEXT) notabmap = {
- 1,
- 1+IMAPEXT,
- rescan,
- {
- {CCHR('I'),CCHR('I'), notab_tab, (KEYMAP *)NULL},
- }
- };
- #endif
-
- static struct KEYMAPE(1+IMAPEXT) overwmap = {
- 0,
- 1+IMAPEXT, /* 1 to avoid 0 sized array */
- rescan,
- {
- /* unused dummy entry for VMS C */
- {(KCHAR)0, (KCHAR)0, (PF *)NULL, (KEYMAP *)NULL},
- }
- };
-
- #ifndef NO_DIRED
- static PF dirednul[] = {
- setmark, /* ^@ */
- gotobol, /* ^A */
- backchar, /* ^B */
- rescan, /* ^C */
- d_del, /* ^D */
- gotoeol, /* ^E */
- forwchar, /* ^F */
- ctrlg, /* ^G */
- #ifndef NO_HELP
- prefix, /* ^H */
- #endif
- };
- static PF diredcl[] = {
- reposition, /* ^L */
- forwline, /* ^M */
- forwline, /* ^N */
- rescan, /* ^O */
- backline, /* ^P */
- rescan, /* ^Q */
- backisearch, /* ^R */
- forwisearch, /* ^S */
- rescan, /* ^T */
- universal_argument, /* ^U */
- forwpage, /* ^V */
- rescan, /* ^W */
- prefix, /* ^X */
- };
- static PF diredcz[] = {
- #ifndef VMS
- spawncli, /* ^Z */
- #else
- attachtoparent, /* ^Z */
- #endif
- prefix, /* esc */
- rescan, /* ^\ */
- rescan, /* ^] */
- rescan, /* ^^ */
- rescan, /* ^_ */
- forwline, /* SP */
- };
- static PF diredc[] = {
- d_copy, /* c */
- d_del, /* d */
- d_findfile, /* e */
- d_findfile, /* f */
- };
- static PF diredn[] = {
- forwline, /* n */
- d_ffotherwindow,/* o */
- backline, /* p */
- rescan, /* q */
- d_rename, /* r */
- rescan, /* s */
- rescan, /* t */
- d_undel, /* u */
- rescan, /* v */
- rescan, /* w */
- d_expunge, /* x */
- };
- static PF direddl[] = {
- d_undelbak, /* del */
- };
-
- #ifndef DIRED_XMAPS
- #define NDIRED_XMAPS 0 /* number of extra map sections */
- #endif
-
- static struct KEYMAPE(6 + NDIRED_XMAPS + IMAPEXT) diredmap = {
- 6 + NDIRED_XMAPS,
- 6 + NDIRED_XMAPS + IMAPEXT,
- rescan,
- {
- #ifndef NO_HELP
- {CCHR('@'), CCHR('H'), dirednul, (KEYMAP *)&helpmap},
- #else
- {CCHR('@'), CCHR('G'), dirednul, (KEYMAP *)NULL},
- #endif
- {CCHR('L'), CCHR('X'), diredcl, (KEYMAP *)&cXmap},
- {CCHR('Z'), ' ', diredcz, (KEYMAP *)&metamap},
- {'c', 'f', diredc, (KEYMAP *)NULL},
- {'n', 'x', diredn, (KEYMAP *)NULL},
- {CCHR('?'), CCHR('?'), direddl, (KEYMAP *)NULL},
- #ifdef DIRED_XMAPS
- DIRED_XMAPS, /* map sections for dired mode keys */
- #endif
- }
- };
- #endif
-
- /* give names to the maps, for use by help etc.
- * If the map is to be bindable, it must also be listed in the
- * function name table below with the same name.
- * Maps created dynamicly currently don't get added here, thus are unnamed.
- * Modes are just named keymaps with functions to add/subtract them from
- * a buffer's list of modes. If you change a mode name, change it in
- * modes.c also.
- */
-
- MAPS map_table[] = {
- /* fundamental map MUST be first entry */
- {(KEYMAP *)&fundmap, "fundamental"},
- {(KEYMAP *)&fillmap, "fill"},
- {(KEYMAP *)&indntmap, "indent"},
- {(KEYMAP *)&blinkmap, "blink"},
- #ifdef NOTAB
- {(KEYMAP *)¬abmap, "notab"},
- #endif
- {(KEYMAP *)&overwmap, "overwrite"},
- {(KEYMAP *)&metamap, "esc prefix"},
- {(KEYMAP *)&cXmap, "c-x prefix"},
- {(KEYMAP *)&cX4map, "c-x 4 prefix"},
- #ifndef NO_HELP
- {(KEYMAP *)&helpmap, "help"},
- #endif
- #ifndef NO_DIRED
- {(KEYMAP *)&diredmap, "dired"},
- #endif
- };
-
- #define NMAPS (sizeof map_table/sizeof(MAPS))
- int nmaps = NMAPS; /* for use by rebind in extend.c */
-
- char *map_name(map)
- KEYMAP *map;
- {
- MAPS *mp = &map_table[0];
-
- do {
- if(mp->p_map == map) return mp->p_name;
- } while(++mp < &map_table[NMAPS]);
- return (char *)NULL;
- }
-
- MAPS *name_mode(name)
- char *name;
- {
- MAPS *mp = &map_table[0];
-
- do {
- if(strcmp(mp->p_name,name)==0) return mp;
- } while(++mp < &map_table[NMAPS]);
- return (MAPS *)NULL;
- }
-
- KEYMAP *name_map(name)
- char *name;
- {
- MAPS *mp;
- return (mp=name_mode(name))==NULL ? (KEYMAP *)NULL : mp->p_map;
- }
-
- /* Warning: functnames MUST be in alphabetical order! (due to binary
- * search in name_function.) If the function is prefix, it must be listed
- * with the same name in the map_table above.
- */
-
- FUNCTNAMES functnames[] = {
- #ifdef AMIGA
- #ifdef DO_ICONIFY
- {tticon, "amiga-iconify"},
- #endif
- #ifdef DO_MENU
- {amigamenu, "amiga-menu"},
- #endif
- #ifdef CHANGE_COLOR
- {modebackground,"amiga-mode-background"},
- {modeforeground,"amiga-mode-foreground"},
- {ttmode, "amiga-mode-rendition"},
- #endif
- #ifdef CHANGE_FONT
- {setfont, "amiga-set-font"},
- #endif
- #ifdef CHANGE_COLOR
- {textbackground,"amiga-text-background"},
- {textforeground,"amiga-text-foreground"},
- {tttext, "amiga-text-rendition"},
- #endif
- {togglewindow, "amiga-toggle-border"},
- {togglezooms, "amiga-zoom-mode"},
- #endif /* AMIGA */
- #ifndef NO_HELP
- {apropos_command, "apropos"},
- #endif
- {fillmode, "auto-fill-mode"},
- {indentmode, "auto-indent-mode"},
- {backchar, "backward-char"},
- {delbword, "backward-kill-word"},
- {gotobop, "backward-paragraph"},
- {backword, "backward-word"},
- {gotobob, "beginning-of-buffer"},
- {gotobol, "beginning-of-line"},
- {blinkparen, "blink-matching-paren"},
- {showmatch, "blink-matching-paren-hack"},
- #ifdef BSMAP
- {bsmap, "bsmap-mode"},
- #endif
- {prefix, "c-x 4 prefix"},
- {prefix, "c-x prefix"},
- #ifndef NO_MACRO
- {executemacro, "call-last-kbd-macro"},
- #endif
- {capword, "capitalize-word"},
- #ifndef NO_DIR
- {changedir, "cd"},
- #endif
- {copyregion, "copy-region-as-kill"},
- #ifdef REGEX
- {cntmatchlines, "count-matches"},
- {cntnonmatchlines,"count-non-matches"},
- #endif
- {define_key, "define-key"},
- {backdel, "delete-backward-char"},
- {deblank, "delete-blank-lines"},
- {forwdel, "delete-char"},
- {delwhite, "delete-horizontal-space"},
- #ifdef REGEX
- {delmatchlines, "delete-matching-lines"},
- {delnonmatchlines,"delete-non-matching-lines"},
- #endif
- {onlywind, "delete-other-windows"},
- {delwind, "delete-window"},
- #ifndef NO_HELP
- {wallchart, "describe-bindings"},
- {desckey, "describe-key-briefly"},
- #endif
- {digit_argument,"digit-argument"},
- #ifndef NO_DIRED
- {dired, "dired"},
- {d_undelbak, "dired-backup-unflag"},
- {d_copy, "dired-copy-file"},
- {d_expunge, "dired-do-deletions"},
- {d_findfile, "dired-find-file"},
- {d_ffotherwindow, "dired-find-file-other-window"},
- {d_del, "dired-flag-file-deleted"},
- {d_otherwindow, "dired-other-window"},
- {d_rename, "dired-rename-file"},
- {d_undel, "dired-unflag"},
- #endif
- {lowerregion, "downcase-region"},
- {lowerword, "downcase-word"},
- {showversion, "emacs-version"},
- #ifndef NO_MACRO
- {finishmacro, "end-kbd-macro"},
- #endif
- {gotoeob, "end-of-buffer"},
- {gotoeol, "end-of-line"},
- {enlargewind, "enlarge-window"},
- {prefix, "esc prefix"},
- #ifndef NO_STARTUP
- {evalbuffer, "eval-current-buffer"},
- {evalexpr, "eval-expression"},
- #endif
- {swapmark, "exchange-point-and-mark"},
- {extend, "execute-extended-command"},
- {fillpara, "fill-paragraph"},
- {filevisit, "find-file"},
- {poptofile, "find-file-other-window"},
- {forwchar, "forward-char"},
- {gotoeop, "forward-paragraph"},
- {forwword, "forward-word"},
- {bindtokey, "global-set-key"},
- {unbindtokey, "global-unset-key"},
- {gotoline, "goto-line"},
- #ifndef NO_HELP
- {prefix, "help"},
- {help_help, "help-help"},
- #endif
- {insert, "insert"},
- {bufferinsert, "insert-buffer"},
- {fileinsert, "insert-file"},
- {fillword, "insert-with-wrap"},
- {backisearch, "isearch-backward"},
- {forwisearch, "isearch-forward"},
- {justone, "just-one-space"},
- {ctrlg, "keyboard-quit"},
- {killbuffer, "kill-buffer"},
- {killline, "kill-line"},
- {killpara, "kill-paragraph"},
- {killregion, "kill-region"},
- {delfword, "kill-word"},
- {listbuffers, "list-buffers"},
- #ifndef NO_STARTUP
- {evalfile, "load"},
- #endif
- {localbind, "local-set-key"},
- {localunbind, "local-unset-key"},
- #ifndef NO_BACKUP
- {makebkfile, "make-backup-files"},
- #endif
- #ifdef DO_METAKEY
- {do_meta, "meta-key-mode"}, /* better name, anyone? */
- #endif
- #ifdef AMIGA
- #ifdef MOUSE
- {mgotobob, "mouse-beginning-of-buffer"},
- {mforwdel, "mouse-delete-char"},
- {mdelwhite, "mouse-delete-horizontal-space"},
- {mdelwind, "mouse-delete-window"},
- {mgotoeob, "mouse-end-of-buffer"},
- {menlargewind, "mouse-enlarge-window"},
- {mkillline, "mouse-kill-line"},
- {mkillregion, "mouse-kill-region"},
- {mdelfword, "mouse-kill-word"},
- {mreposition, "mouse-recenter"},
- {mbackpage, "mouse-scroll-down"},
- {mforwpage, "mouse-scroll-up"},
- {amigamouse, "mouse-set-point"},
- {mshrinkwind, "mouse-shrink-window"},
- {msplitwind, "mouse-split-window-vertically"},
- {myank, "mouse-yank"},
- #endif
- #endif
- {negative_argument, "negative-argument"},
- {newline, "newline"},
- {indent, "newline-and-indent"},
- {forwline, "next-line"},
- #ifdef NOTAB
- {notabmode, "no-tab-mode"},
- #endif
- {notmodified, "not-modified"},
- {openline, "open-line"},
- {nextwind, "other-window"},
- {overwrite, "overwrite-mode"},
- #ifdef PREFIXREGION
- {prefixregion, "prefix-region"},
- #endif
- {backline, "previous-line"},
- #ifdef GOSMACS
- {prevwind, "previous-window"},
- #endif
- #ifdef VMS
- {spawncli, "push-to-dcl"},
- #endif
- #ifndef NO_DIR
- {showcwdir, "pwd"},
- #endif
- {queryrepl, "query-replace"},
- #ifdef REGEX
- {re_queryrepl, "query-replace-regexp"},
- #endif
- {quote, "quoted-insert"},
- #ifdef REGEX
- {re_searchagain,"re-search-again"},
- {re_backsearch, "re-search-backward"},
- {re_forwsearch, "re-search-forward"},
- #endif
- {reposition, "recenter"},
- {refresh, "redraw-display"},
- {filesave, "save-buffer"},
- {quit, "save-buffers-kill-emacs"},
- {savebuffers, "save-some-buffers"},
- {backpage, "scroll-down"},
- #ifdef GOSMACS
- {back1page, "scroll-one-line-down"},
- {forw1page, "scroll-one-line-up"},
- #endif
- {pagenext, "scroll-other-window"},
- {forwpage, "scroll-up"},
- {searchagain, "search-again"},
- {backsearch, "search-backward"},
- {forwsearch, "search-forward"},
- {selfinsert, "self-insert-command"},
- #ifdef REGEX
- {setcasefold, "set-case-fold-search"},
- #endif
- {set_default_mode, "set-default-mode"},
- {setfillcol, "set-fill-column"},
- {setmark, "set-mark-command"},
- #ifdef PREFIXREGION
- {setprefix, "set-prefix-string"},
- #endif
- {shrinkwind, "shrink-window"},
- #ifdef NOTAB
- {space_to_tabstop, "space-to-tabstop"},
- #endif
- {splitwind, "split-window-vertically"},
- #ifndef NO_MACRO
- {definemacro, "start-kbd-macro"},
- #endif
- #ifdef VMS
- {attachtoparent,"suspend-emacs"},
- #else
- {spawncli, "suspend-emacs"},
- #endif
- {usebuffer, "switch-to-buffer"},
- {poptobuffer, "switch-to-buffer-other-window"},
- {twiddle, "transpose-chars"},
- {universal_argument, "universal-argument"},
- {upperregion, "upcase-region"},
- {upperword, "upcase-word"},
- {showcpos, "what-cursor-position"},
- {filewrite, "write-file"},
- {yank, "yank"},
- };
-
- #define NFUNCT (sizeof(functnames)/sizeof(FUNCTNAMES))
-
- int nfunct = NFUNCT; /* used by help.c */
-
- /*
- * The general-purpose version of ROUND2 blows osk C (2.0) out of the water.
- * (reboot required) If you need to build a version of mg with less than 32
- * or more than 511 functions, something better must be done.
- * The version that should work, but doesn't is:
- * #define ROUND2(x) (1+((x>>1)|(x>>2)|(x>>3)|(x>>4)|(x>>5)|(x>>6)|(x>>7)|\
- * (x>>8)|(x>>9)|(x>>10)|(x>>11)|(x>>12)|(x>>13)|(x>>14)|(x>>15)))
- */
- #define ROUND2(x) (x<128?(x<64?32:64):(x<256?128:256))
-
- static name_fent(fname, flag)
- register char *fname;
- int flag;
- {
- register int try;
- register int x = ROUND2(NFUNCT);
- register int base = 0;
- register int notit;
-
- do {
- /* + can be used instead of | here if more efficent. */
- if((try = base | x) < NFUNCT) {
- if((notit = strcmp(fname, functnames[try].n_name)) >= 0) {
- if(!notit) return try;
- base = try;
- }
- }
- } while((x>>=1) || (try==1 && base==0)); /* try 0 once if needed */
- return flag ? base : -1;
- }
-
- /*
- * Translate from function name to function pointer, using binary search.
- */
-
- PF name_function(fname)
- char *fname;
- {
- int i;
- if((i = name_fent(fname, FALSE)) >= 0) return functnames[i].n_funct;
- return (PF)NULL;
- }
-
- /* complete function name */
-
- complete_function(fname, c)
- register char *fname;
- {
- register int i, j, k, l;
- int oj;
-
- i = name_fent(fname, TRUE);
- for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}
- if(fname[j]!='\0') {
- if(++i >= NFUNCT) return -2; /* no match */
- for(j=0; (l=fname[j]) && functnames[i].n_name[j]==l; j++) {}
- if(fname[j]!='\0') return -2; /* no match */
- }
- if(c==CCHR('M') && functnames[i].n_name[j]=='\0') return -1;
- for(k=i+1; k<NFUNCT; k++) { /* find last match */
- for(l=0; functnames[k].n_name[l]==fname[l]; l++) {}
- if(l<j) break;
- }
- k--;
- oj = j;
- if(k>i) { /* multiple matches */
- while((l = functnames[i].n_name[j]) == functnames[k].n_name[j]) {
- fname[j++] = l;
- if(l=='-' && c==' ') break;
- }
- if(j==oj) return -3; /* ambiguous */
- } else { /* single match */
- while(l = functnames[i].n_name[j]) {
- fname[j++] = l;
- if(l=='-' && c==' ') break;
- }
- }
- fname[j] = '\0';
- return j - oj;
- }
-
- /* translate from function pointer to function name. */
-
- char *function_name(fpoint)
- register PF fpoint;
- {
- register FUNCTNAMES *fnp = &functnames[0];
-
- if(fpoint == prefix) return (char *)NULL; /* ambiguous */
- do {
- if(fnp->n_funct == fpoint) return fnp->n_name;
- } while(++fnp < &functnames[NFUNCT]);
- return (char *)NULL;
- }
-