home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / DEMO / RIM22 / MACROS / PWB.RM < prev    next >
Text File  |  1993-11-12  |  14KB  |  471 lines

  1. /*
  2. ** Macro module: pwb.rm - Programmer's WorkBench(R) keyboard map
  3. **
  4. ** Programmmer's WorkBench is a registered trademark of Microsoft Corporation
  5. **
  6. ** Copyright (C) 1993 Brian L. Smith
  7. ** Copyright (C) 1993 RimStar Technology, Inc.
  8. ** All rights reserved internationally.
  9. ** Unlicensed use is a violation of applicable laws.
  10. **
  11. ** This source code is provided to licensed users of RimStar's products
  12. ** for the purpose of allowing the user to customize and/or enhance RimStar's
  13. ** products. The source code remains the property of the copyright holders
  14. ** with all rights reserved internationally.
  15. ** Any modifications to the source code are considered derivative works and
  16. ** all rights thereto are reserved to the copyright holders except
  17. ** that the purchaser may use the derivitive work in the same manner
  18. ** as permitted by the license governing the unmodified product.
  19. ** Distribution in any manner of any part of the original source code,
  20. ** whether in source or object form, is expressly prohibited without the
  21. ** express written permission of the copyright holders.
  22. **
  23. */
  24.  
  25. #include "macro.h"
  26.  
  27.     /*
  28.     ** This sets up the editor for a PWB keyboard mapping.
  29.     ** To have the editor use this - copy or rename pwb.obm
  30.     ** to keyboard.obm.
  31.     */
  32.  
  33. void
  34. _init(void) {
  35.     LibAutoload("misc",         "quote", "next_word", "prev_word", "tospace",
  36.                                     "delete_next_word", "delete_prev_word", "toupper", "tolower");
  37.     LibAutoload("c_smart",    "find_matching_delim");
  38.     LibAutoload("Search",    "SearchSel");
  39.     LibAutoload("Buffer",    "EditFile");
  40.     LibAutoload("KbdCUA",    "KbdBindAsciiKeys", "CUACopy", "CUAMov", "CUAInsert",
  41.                                     "CUASel" );
  42. } /* end _init() */
  43.  
  44.  
  45.  
  46. void
  47. KbdBindDefault() {
  48.     char  *self_insert = "SelfInsert";
  49.     char  *p;
  50.  
  51.     /* call function for cua mapping */
  52.     KbdBindAsciiKeys();
  53.  
  54.     /*
  55.     ** bookmarks
  56.     */
  57.     KbdBind("Alt+1",                 "BookmarkSet 1");
  58.     KbdBind("Alt+2",                 "BookmarkSet 2");
  59.     KbdBind("Alt+3",                 "BookmarkSet 3");
  60.     KbdBind("Alt+4",                 "BookmarkSet 4");
  61.     KbdBind("Alt+5",                 "BookmarkSet 5");
  62.     KbdBind("Alt+6",                 "BookmarkSet 6");
  63.     KbdBind("Alt+7",                 "BookmarkSet 7");
  64.     KbdBind("Alt+8",                 "BookmarkSet 8");
  65.     KbdBind("Alt+9",                 "BookmarkSet 9");
  66.     KbdBind("Alt+0",                 "BookmarkSet 10");
  67.  
  68.     KbdBind("Alt+J+1",            "BookmarkGoto 1");
  69.     KbdBind("Alt+J+2",            "BookmarkGoto 2");
  70.     KbdBind("Alt+J+3",            "BookmarkGoto 3");
  71.     KbdBind("Alt+J+4",            "BookmarkGoto 4");
  72.     KbdBind("Alt+J+5",            "BookmarkGoto 5");
  73.     KbdBind("Alt+J+6",            "BookmarkGoto 6");
  74.     KbdBind("Alt+J+7",            "BookmarkGoto 7");
  75.     KbdBind("Alt+J+8",            "BookmarkGoto 8");
  76.     KbdBind("Alt+J+9",            "BookmarkGoto 9");
  77.     KbdBind("Alt+J+0",            "BookmarkGoto 10");
  78.  
  79.     /* 
  80.     ** help
  81.     */
  82.  
  83.     /* 
  84.     ** Deletions
  85.     */
  86.  
  87.     KbdBind("Alt+Y",                "BufDeleteLine");
  88.     KbdBind("Shift+DELETE",        p="BufDeleteToScrap");
  89.       KbdBind("Shift+KP_DELETE",    p);
  90.     KbdBind("Shift+KP_MINUS",    p);
  91.     KbdBind("Alt+K",                 "BufDeleteToEOL");
  92.     KbdBind("BACKSPACE",            p="CUAMov BufDeletePrevChar");
  93.     KbdBind("Shift+BACKSPACE",    p);
  94.     KbdBind("Ctrl+G",                p);
  95.       KbdBind("Ctrl+Y",                "DeleteLineOrSelection");
  96. //    KbdBind("Alt+BACKSPACE",    "delete_next_word");    /* in misc.rm */
  97.     KbdBind("Ctrl+BACKSPACE",    "delete_prev_word");    /* in misc.rm */
  98.     KbdBind("Alt+|",                 "BufDeleteWhitespace");
  99.     KbdBind("DELETE",                p="BufDeleteCharOrSelection");
  100.     KbdBind("KP_DELETE",            p);
  101.     KbdBind("Shift+KP_SLASH",    p);
  102.     KbdBind("Ctrl+-",                  "BufDeleteCurrentBuffer");
  103.  
  104.     /*
  105.     ** Dialogs
  106.     */
  107.     KbdBind("Alt+B",                "DlgBufferList");
  108.     KbdBind("Alt+V",                 "DlgVersion");
  109.     KbdBind("Alt+O",                 "DlgRenameBuffer");
  110.     KbdBind("Alt+W",                 "SaveBuffer");
  111.     KbdBind("Alt+E",                "DlgOpenFile");
  112.     KbdBind("Alt+G",                "DlgGotoLine");
  113.  
  114.     /* search & replace */
  115.     KbdBind("F3",                    "SearchSel 1");
  116.     KbdBind("F4",                    "SearchSel 0");
  117. //    KbdBind("Alt+F5",                "SearchBackward");
  118. //    KbdBind("Shift + F5",        "Search Again");
  119.     KbdBind("Ctrl+|",                p="ReplaceForward");
  120.     KbdBind("Ctrl+L",                p);
  121. //    KbdBind("Alt+F6",                "ReplaceBackward");
  122. //    KbdBind("Shift+F6",            "ReplaceAgain");
  123.  
  124.  
  125.     /*
  126.     ** Keystroke macros
  127.     */
  128.     KbdBind("Shift+Ctrl+R",        "KbdMacroRecord");      /* starts/stops keystroke macro recording */
  129.     KbdBind("Alt+F7",                "KbdMacroLoad");      /* load keystroke macro from disk */
  130. //    KbdBind("Shift+F7",            "KbdMacroPause");        /* pause keystroke macro recording */
  131.     KbdBind("Shift+Ctrl+P",        "KbdMacroPlay");        /* plays a recorded keystroke macro */
  132.     KbdBind("Alt+F8",                "KbdMacroSave");          /* saves last recorded macro to disk */
  133.  
  134.     /*
  135.     ** cursor Movement
  136.     */
  137.     KbdBind("Shift+ENTER",         p="CUAMov MovNextline");
  138.     KbdBind("Shift+KP_ENTER",     p);
  139.     KbdBind("PGUP",                p="CUAMov MovPageUp");
  140.     KbdBind("Ctrl+R",                p);
  141.     KbdBind("KP_PGUP",            p);
  142.     KbdBind("Ctrl+HOME",            p="CUAMov MovSOF");
  143.     KbdBind("Ctrl+KP_HOME",        p);
  144.     KbdBind("HOME",                p="CUAMov MovSOT");
  145.     KbdBind("KP_HOME",            p);
  146.     KbdBind("Ctrl+C",                p="CUAMov MovPageDown");
  147.     KbdBind("PGDN",                p);
  148.     KbdBind("KP_PGDN",            p);
  149.     KbdBind("Ctrl+END",            p="CUAMov MovEOF");
  150.     KbdBind("Ctrl+KP_END",        p);
  151.     KbdBind("END",                    p="CUAMov MovEOL");
  152.     KbdBind("KP_END",                p);
  153.     KbdBind("UP",                    p="CUAMov MovUp");
  154.     KbdBind("KP_UP",                p);
  155.     KbdBind("Ctrl+E",                p);
  156.     KbdBind("DOWN",                p="CUAMov MovDown");
  157.     KbdBind("KP_DOWN",            p);
  158.     KbdBind("Ctrl+X",                p);
  159.     KbdBind("KP_LEFT",            p="CUAMov MovLeft");
  160.     KbdBind("LEFT",                p);
  161.     KbdBind("Ctrl+S",                p);
  162.     KbdBind("Ctrl+LEFT",            p="CUAMov prev_word");    /* in misc.rm */
  163.     KbdBind("Ctrl+KP_LEFT",        p);
  164.     KbdBind("Ctrl+A",                p);
  165.     KbdBind("RIGHT",                "MovRight");
  166.     KbdBind("KP_RIGHT",            p="CUAMov MovRight"); 
  167.     KbdBind("RIGHT",                p); 
  168.     KbdBind("Ctrl+D",                p); 
  169.     KbdBind("Ctrl+F",                p="CUAMov next_word");    /* in misc.rm */
  170.     KbdBind("Ctrl+RIGHT",        p);
  171.     KbdBind("Ctrl+KP_RIGHT",    p);
  172.     KbdBind("Shift+TAB",              "CUAMov MovPrevTabPos");
  173.     KbdBind("Ctrl+Enter",         "BufInsertNewline");
  174.     KbdBind("Ctrl+N",                 "PWBInsertNewline");
  175.     KbdBind("Enter",                 "PWB BufInsertNewline");
  176.     KbdBind("TAB",                    "PWBTab");
  177.  
  178.  
  179.     /*
  180.     ** selection operations
  181.     */
  182.     KbdBind("Alt+A",                    "MarkExclusive");
  183.     KbdBind("Alt+C",                    "MarkColumn");
  184.     KbdBind("Shift+HOME",             p="CUASel MovSOT");
  185.     KbdBind("Shift+KP_HOME",         p);
  186.     KbdBind("Shift+Ctrl+LEFT",         p="CUASel MovWordLeft");
  187.     KbdBind("Shift+Ctrl+KP_LEFT", p);
  188.     KbdBind("Shift+Ctrl+RIGHT",    p="CUASel MovWordRight");
  189.       KbdBind("Shift+Ctrl+KP_RIGHT",p);
  190.     KbdBind("Shift+END",                p="CUASel MovEOL");
  191.     KbdBind("Shift+KP_END",            p);
  192.     KbdBind("Shift+Ctrl+END",        p="CUASel MovEOF");
  193.     KbdBind("Shift+Ctrl+KP_END",    p);
  194.     KbdBind("Shift+Ctrl+HOME",        p="CUASel MovSOF");
  195.     KbdBind("Shift+Ctrl+KP_HOME", p);
  196.     KbdBind("Shift+PGUP",            p="CUASel MovPageUp");
  197.     KbdBind("Shift+KP_PGUP",        p);
  198.     KbdBind("Shift+PGDN",            p="CUASel MovPageDown");
  199.     KbdBind("Shift+KP_PGDN",        p);
  200.     KbdBind("Shift+LEFT",            p="CUASel MovLeft");
  201.     KbdBind("Shift+KP_LEFT",        p);
  202.     KbdBind("Shift+RIGHT",            p="CUASel MovRight");
  203.     KbdBind("Shift+KP_RIGHT",        p);
  204.     KbdBind("Shift+UP",                p="CUASel MovUp");
  205.      KbdBind("Shift+KP_UP",            p);
  206.     KbdBind("Shift+DOWN",             p="CUASel MovDown");
  207.      KbdBind("Shift+KP_DOWN",         p);
  208.     KbdBind("Alt+L",                     "MarkLine");
  209.     KbdBind("Alt+M",                     "MarkNormal");
  210. //    KbdBind("Ctrl+A",                      "MarkSwapSel");
  211.  
  212.     KbdBind("Alt+H",                "HelpQueryInfHelp");
  213.     /*
  214.     ** NOTE: To use QueryInfHelp you must add the following environment variable
  215.     **         to your config.sys:
  216.     **     SET RSE_INF=GUIREF20.INF+PMFUN.INF+PMGPI.INF+PMHOK.INF+PMMSG.INF+PMREL.INF+PMWIN.INF+PMWKP.INF
  217.     ** The setting is taken from the combination of the  PROGREF20 and PMREF environment variables
  218.     ** You may add additional .INF files or remove some.
  219.     */
  220.   #if 0
  221.     KbdBind("Alt+H",                "HelpQueryQuickHelp");    /* invokes Microsoft Quick Help program */
  222.   #endif
  223.  
  224.     /* 
  225.     ** toggles
  226.     */
  227. //    KbdBind("Ctrl+W",                  "ToggleBackups");
  228.     KbdBind("Ctrl+V",                p="CUAMov ToggleInsert");
  229.     KbdBind("INSERT",             p);
  230.     KbdBind("KP_INSERT",            p);
  231.     KbdBind("Alt+T",                 "ToggleTabs");
  232.     KbdBind("Alt+N",                 "BufNextBuffer");
  233.     KbdBind("Alt+P",                 "Print");
  234.     KbdBind("Ctrl+P",             "quote");        /* in misc.rm */
  235.     KbdBind("Alt+R",                 "BufInsertFile");
  236.     KbdBind("Alt+-",                 "BufPrevBuffer");
  237.  
  238.     /* 
  239.     ** undo & redo operations
  240.     */
  241.     KbdBind("Alt+U",                         p="Undo");
  242.     KbdBind("Alt+BACKSPACE",             p);
  243.     KbdBind("Shift+Ctrl+BACKSPACE",     p);
  244.     KbdBind("KP_STAR",                      "UndoModification");
  245.     KbdBind("Alt+Y",                         "Redo");
  246.     KbdBind("Shift+KP_STAR",              "RedoModification");
  247.     KbdBind("Shift+Ctrl+KP_STAR",        "UndoAll");
  248.     KbdBind("Shift+Alt +KP_STAR",        "RedoAll");
  249.     KbdBind("Ctrl+[",                      "find_matching_delim");    /* in c_smart.rm */
  250.     KbdBind("Alt+X",                         "ExitEditor");
  251.  
  252.     /*
  253.     **  KP  stands for the Key Pad keys.
  254.     **
  255.     **  Alt+ ESCAPE, Alt+TAB and Ctrl+ESCAPE are reserved for OS/2's use
  256.     **  do not define these as they will be ignored.
  257.     */
  258.     KbdBind("Shift+F7",                "PWBRefresh");
  259.       KbdBind("Shift+F2",                "BufWrite");
  260.      KbdBind("Ctrl+J",                 "tospace");
  261.     /* 
  262.     ** window operations
  263.     */
  264.     KbdBind("Ctrl+F10",                   "WinMaximize");
  265.     KbdBind("F6",                          "WinNextWindow");
  266.     KbdBind("Shift+F6",                "WinPrevWindow");
  267.     KbdBind("F2",                        "WinTileWindows");
  268. //    KbdBind("Shift+F2",                "WinCascade");
  269. //    KbdBind("F3",                        "WinNewWindow");
  270.     KbdBind("Ctrl+F4",                 "WinDeleteCurrentWindow");
  271.     KbdBind("Ctrl+B",                      "WinScrollBottom");
  272.     KbdBind("Ctrl+C",                      "WinScrollCenter");
  273.     KbdBind("Ctrl+W",                       p="CUAMov WinScrollDown");
  274.     KbdBind("Ctrl+UP",                   p);
  275.     KbdBind("Ctrl+KP_UP",               p);
  276.     KbdBind("Ctrl+Z",                      p="CUAMov WinScrollUp");
  277.     KbdBind("Ctrl+DOWN",                p);
  278.     KbdBind("Ctrl+KP_Down",            p);
  279.     KbdBind("Ctrl+T",                      "WinScrollTop");
  280.  
  281.     /* 
  282.     ** macro operations
  283.     */
  284.     KbdBind("F9",                        "LibLoadMacro");  
  285.     KbdBind("F10",                        "LibExecFunction");
  286.     KbdBind("Ctrl+F3",                "ExecAssoc");
  287.  
  288.     /*
  289.     ** For use in error output buffer - place cursor on error line
  290.     ** ALT+F9 jumps to file & line in error,  loading the file if needed
  291.     */
  292.     KbdBind("Alt+F9",                "ErrJumpToError");
  293.     KbdBind("Shift+F4",             "ErrPrevError");
  294.       KbdBind("Shift+F3",             "ErrNextError");
  295.  
  296.     /* 
  297.     ** cut/copy/paste
  298.     */
  299.     KbdBind("KP_MINUS",            "BufCutToScrap");
  300.     KbdBind("Ctrl+INSERT",         "CUACopy BufCopyToScrap");
  301.     KbdBind("Ctrl+KP_INSERT",  "CUACopy BufCopyToScrap");
  302.     KbdBind("Shift+KP_STAR",    "CUACopy BufCopyToScrap");
  303.     KbdBind("Shift+KP_MINUS",    "BufCutToScrap 1");        /* append to current scrap */
  304. //    KbdBind("Shift+KP_PLUS",    "BufCopyToScrap 1");        /* append to current scrap */
  305.     KbdBind("Shift+INSERT",          "BufPasteScrap");
  306.     KbdBind("Shift+KP_INSERT",    "BufPasteScrap");
  307.     KbdBind("Shift+KP_PLUS",    "BufPasteScrap");
  308. //    KbdBind("Shift+INSERT",        "ImportClipboard");
  309. //    KbdBind("Ctrl+INSERT",        "ExportClipboard");
  310.   #if 0
  311.     KbdBind("KP_5", "");
  312.   #endif
  313.  
  314.     KbdBind("Shift+Ctrl+-",          "WinDeleteWindowAndBuffer");
  315.     KbdBind("Ctrl+K",                  "ExecKillProcess");        /* Kills a program executed on buffer */
  316.     KbdBind("F8",                      "SysSaveAndExit");
  317.     KbdBind("Alt+F4",                  "SysSaveAndExit");
  318.  
  319.     /* Source browser bindings */
  320.     KbdBind("Ctrl+Alt+F12",        p="SbJumpBack");
  321.     KbdBind("Alt+J+B",            p);
  322.  
  323.     KbdBind("Alt+S+Alt+S",        p="SbBrowseSymbolAtCursor");
  324.     KbdBind("Alt+S+S",              p);
  325.     KbdBind("F11",                    p);
  326.     
  327.     KbdBind("Alt+S+Alt+D",         p="SbBrowseDefs");
  328.     KbdBind("Alt+S+D",              p);
  329.     KbdBind("Shift+F11",            p);
  330.  
  331.     KbdBind("Alt+S+Alt+M",         p="SbBrowseSymbolsDefinedInModule");
  332.     KbdBind("Alt+S+M",              p);
  333.     KbdBind("Alt+F11",            p);
  334.  
  335.     KbdBind("Alt+S+Alt+R",         p="SbBrowseRefs");
  336.     KbdBind("Alt+S+R",              p);
  337.     KbdBind("Ctrl+F11",            p);
  338.  
  339.     KbdBind("Alt+S+Alt+F",         p="SbFindNext");
  340.     KbdBind("Alt+S+F",              p);
  341.     KbdBind("F12",                    p);
  342.  
  343.     KbdBind("Alt+S+Alt+B",         p="SbFindPrev");
  344.     KbdBind("Alt+S+B",              p);
  345.     KbdBind("Shift+F12",            p);
  346.  
  347.     KbdBind("Alt+F12",            "SbGotoDef");
  348.  
  349. } /* end KbdBindDefault() - PWB keyboard map */
  350.  
  351.  
  352. void
  353. MarkToSOT(void) {
  354.     SELECTION sel;
  355.     LONG line, column;
  356.     LONG sot_line, sot_column;
  357.  
  358.     BufQueryPosition( &line, &column);
  359.     PosSOT();
  360.     BufQueryPosition( &sot_line, &sot_column);
  361.     sel.type      = SELECT_NORMAL;
  362.     sel.s_line    = sel.e_line = line;
  363.     sel.s_column = sot_column;
  364.     sel.e_column = column;
  365.     MarkCreateSel(&sel);
  366. } /* end MarkToSOT() */
  367.  
  368.  
  369. void
  370. BookmarkSet(USHORT number) {
  371.     HMARK        hMark;
  372.     USHORT    reply;
  373.     char        szTitle[32];
  374.  
  375.     hMark = MarkQueryGlobalFromID(number);
  376.     if ( !hMark )
  377.         hMark = MarkAllocGlobal(number);
  378.     else {
  379.         sprintf(szTitle, "Set bookmark %d", number);
  380.         reply = PopupMsgBox(    "This bookmark is already set. Overwrite?", szTitle,
  381.                                     MB_YESNO | MB_ICONQUESTION |
  382.                                     MB_MOVEABLE | MB_APPLMODAL);
  383.         if ( reply == MBID_YES )
  384.             MarkResetMark(hMark);
  385.     }
  386. } /* end BookmarkSet() */
  387.  
  388.  
  389. void
  390. BookmarkGoto(USHORT number) {
  391.     HMARK    hMark;
  392.     char    szTitle[32];
  393.  
  394.     hMark = MarkQueryGlobalFromID(number);
  395.     if ( hMark )
  396.         MarkGoto(hMark);
  397.     else {
  398.         sprintf(szTitle, "Jump to bookmark %d", number);
  399.         PopupMsg("That bookmark is not set", szTitle);
  400.     }
  401. } /* end BookmarkGoto() */
  402.  
  403.  
  404. void
  405. PWBInsertNewline() {
  406.     SELECTION sel;
  407.  
  408.     if ( MarkQuerySel( &sel, 1) )
  409.         MovAbs( sel.s_line, sel.s_column );
  410.     MovSOL();
  411.     BufInsertNewline();
  412. } /* end PWBInsertNewline() */
  413.  
  414.  
  415. void
  416. MovNextline( void ) {
  417.     MarkRemoveSel();
  418.     MovDown();
  419.     MovSOT();
  420. } /* end MovNextline() */
  421.  
  422.  
  423. void
  424. DeleteLineOrSelection( void ) {
  425.     if ( !MarkQuerySelType() )
  426.         BufDeleteLine();
  427.     else 
  428.         BufDeleteCharOrSelection();
  429. } /* end DeleteLineOrSelection() */
  430.  
  431.  
  432. void
  433. PWB(char *func) {
  434.     SELECTION sel;
  435.  
  436.     if ( !MarkQuerySelType() ) {
  437.         ExecFunction( func );
  438.     } else {
  439.         MarkQuerySel( &sel, 1);
  440.         MarkRemoveSel();
  441.         PosAbs( sel.s_line, sel.s_column );
  442.     }
  443. } /* end PWB() */
  444.  
  445.  
  446. void
  447. BufDeleteToScrap( void ) {
  448.  
  449.     if ( MarkQuerySelType() ) 
  450.         BufCutToScrap();
  451.     else if ( BufQueryChar() != '\n' )
  452.         BufDeleteChar();
  453. } /* end PWBDelToScrap() */
  454.  
  455.  
  456. void
  457. PWBRefresh() {
  458.     EditFile( BufQueryFilename(), 0L );
  459. } /* end PWBRefresh() */
  460.  
  461.  
  462. void
  463. PWBTab() {
  464.     MovAbs(0L, BufQueryNextTab(BufQueryColumn()));
  465. } /* end PWBTab() */
  466.  
  467.  
  468. /*
  469. ** End module: pwb.rm 
  470. */
  471.