home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / p2demo21.exe / PEL / NATIVE.PEL < prev    next >
Text File  |  1995-03-21  |  14KB  |  383 lines

  1. # $Header:   P:\source\wmacros\native.pev   1.42   21 Mar 1995 09:02:50   WALKER  $
  2. ## $Tabs:4 7$
  3.  
  4. ##############################################################################
  5. #
  6. #       Compuware Corporation
  7. #         31440 Northwestern Highway
  8. #           Farmington Hills, Michigan 48334-2564
  9. #
  10. #   This source code listing contains information that is
  11. #   proprietary to Compuware Corporation and may not be copied
  12. #   duplicated, translated, transmitted, stored, retrieved
  13. #   or in any manner or by any method conveyed or disclosed
  14. #   to a third party or parties without express written
  15. #   permission from Compuware Corporation.
  16. #
  17. #  
  18. ##############################################################################
  19.  
  20. #### $Workfile:   native.pel  $: Sage Professional Editor native mode
  21.  
  22. local native_keymap = -1;
  23.  
  24.  
  25. ### Establish Sage Professional Editor native mode
  26.  
  27. function native()
  28. {
  29.    local prevPauseOnError
  30.  
  31.    if (emulation_mode == "native")
  32.       return;
  33.  
  34.    emulation_mode = "native"
  35.    execute_event_handler( EVENT.EMULATION_CHANGED );
  36.  
  37.    attach_event_handler(EVENT.EMULATION_CHANGED, function_id("native_exit"))
  38.  
  39.    # pause if an error or warning occurs during initialization
  40.    prevPauseOnError = pause_on_error
  41.    pause_on_error   = 1
  42.  
  43.    create_native_keymap()
  44.    native_menu()
  45.  
  46.    if ( !and(window_flags, WINDOW_SYSTEM ))
  47.       window_flags = default_window_flags
  48.  
  49.    search_flags = SEARCH_MAXIMAL_MATCH             \
  50.                 + SEARCH_FORWARD                   \
  51.                 + SEARCH_REGEX                     \
  52.                 + SEARCH_ADVANCE                   \
  53. #               + SEARCH_WRAPS                     \
  54. #               + SEARCH_HIGHLIGHT                 \
  55.                           
  56.    toggle_auto_indent( 1 )
  57.    toggle_electric( 1 )
  58.    pause_on_error = prevPauseOnError
  59. }
  60.  
  61. global function create_native_keymap()
  62. {
  63.    # Enable the keymap.  Subsequent mods to the keymap will persist
  64.    #       through the end of the session.
  65.    # Only one-time initialization should follow this point.
  66.  
  67.    if( native_keymap >= 0 )
  68.    {
  69.       current_keymap = native_keymap
  70.       return
  71.    }
  72.    else
  73.    {
  74.       current_keymap = native_keymap = create_keymap( ascii_keymap )
  75.       native_menu()
  76.    
  77.       assign_native_keys()
  78.       assign_native_f_keys()
  79.       assign_native_misc_keys()
  80. #     assign_mouse_buttons()
  81.  
  82.       optional_function("local_keys")
  83.    }
  84. }
  85.  
  86. global function assign_native_keys()
  87. {
  88.    #--------------------------------------------------------------
  89.    # Alt key combinations on the main keyboard:
  90.    #--------------------------------------------------------------
  91.    assign_key( "<Alt-A>",          "set_exclusive_mark" )
  92.    assign_key( "<Alt-B>",          "buffer_list" )
  93.    assign_key( "<Alt-C>",          "copy_to_scrap_key" )
  94.    assign_key( "<Alt-D>",          "native_delete" )
  95. #   assign_key( "<Alt-E>",          "edit_file_key" )
  96.    assign_key( "<Alt-E>",          "create_buf_and_win_key" )
  97.    assign_key( "<Alt-F>",          "display_filename 1" )
  98.    assign_key( "<Alt-G>",          "goto_line_or_mark" )
  99.    assign_key( "<Alt-H>",          "display_help_item" )
  100.    assign_key( "<Alt-I>",  function_id("toggle_buffer_flags", BUFFER_OVERTYPE_MODE) )
  101.    assign_key( "<Alt-K>",          "delete_to_eol" )
  102.    assign_key( "<Alt-J>",          "goto_bookmark" )
  103.    assign_key( "<Alt-L>",          "set_line_mark" )
  104.    assign_key( "<Alt-M>",          "mark_matching" )
  105.    assign_key( "<Alt-N>",          "next_buffer_mask" )
  106.    assign_key( "<Alt-O>",          "write_buffer_key" )
  107.    assign_key( "<Alt-P>",          "wrap_paragraph" )
  108.    assign_key( "<Alt-Q>",          "done" )
  109.    assign_key( "<Alt-R>",          "read_file_key" )
  110.    assign_key( "<Alt-S>",          "search_forward" )
  111.    assign_key( "<Alt-T>",          "replace_forward" )
  112.    assign_key( "<Alt-U>",          "undo" )
  113.    assign_key( "<Alt-V>",          "print_version" )
  114.    assign_key( "<Alt-W>",          "write_buffer_key" )
  115.    assign_key( "<Alt-X>",          "done" )
  116.    assign_key( "<Alt-Y>",          "redo" )
  117.    assign_key( "<Alt-Z>",          "system" )
  118.    assign_key( "<Alt-Space>",      "outdent_space_maybe" )
  119.  
  120.    #--------------------------------------------------------------
  121.    # Ctrl key combinations on the main keyboard:
  122.    #--------------------------------------------------------------
  123.    assign_key( "<Ctrl-A>",         "optional_function display_ascii_table" )
  124.    assign_key( "<Ctrl-B>",         "scroll_window_bottom" )
  125.    assign_key( "<Ctrl-C>",         "scroll_window_middle" )
  126.    assign_key( "<Ctrl-D>",         "scroll_down_1" )
  127.    assign_key( "<Ctrl-E>",         "beep" )
  128.    assign_key( "<Ctrl-F>",         "beep" )
  129.    assign_key( "<Ctrl-G>",         "beep" )
  130.    assign_key( "<Ctrl-J>",         "join_lines" )
  131.    assign_key( "<Ctrl-K>",         "beep" )
  132.    assign_key( "<Ctrl-L>",         "scroll_left_1" )
  133.    assign_key( "<Ctrl-N>",         "beep" )
  134.    assign_key( "<Ctrl-O>",         "beep" )
  135.    assign_key( "<Ctrl-P>",         "gui_print" )
  136.    assign_key( "<Ctrl-Q>",         "insert_quoted_key" )
  137.    assign_key( "<Ctrl-R>",         "scroll_right_1" )
  138.    assign_key( "<Ctrl-S>",         "beep" )
  139.    assign_key( "<Ctrl-T>",         "scroll_window_top" )
  140.    assign_key( "<Ctrl-U>",         "scroll_up_1" )
  141.    assign_key( "<Ctrl-V>",         "beep" )
  142.    assign_key( "<Ctrl-W>",         "beep" )
  143.    assign_key( "<Ctrl-X>",         "beep" )
  144.    assign_key( "<Ctrl-Y>",         "beep" )
  145.    assign_key( "<Ctrl-Z>",         "beep" )
  146.    assign_key( "<Ctrl-\\>",        "beep" )
  147.    assign_key( "<Ctrl-]>",         "beep" )
  148.    assign_key( "<Ctrl-^>",         "beep" )
  149.    assign_key( "<Ctrl-_>",         "beep" )
  150. }
  151.  
  152. global function assign_native_f_keys()
  153. {
  154.    #--------------------------------------------------------------
  155.    # Function Key bindings
  156.    #--------------------------------------------------------------
  157. #  assign_key( "<F1>",             "prev_window" )
  158. #  assign_key( "<F2>",             "next_window" )
  159.    assign_key( "<F3>",             "prev_buffer_mask" )
  160.    assign_key( "<F4>",             "next_buffer_mask" )
  161.    assign_key( "<F5>",             "search_backward" )
  162.    assign_key( "<F6>",             "search_forward" )
  163. #  assign_key( "<F7>",             "record_key" )
  164. #  assign_key( "<F8>",             "playback_macro" )
  165.    assign_key( "<F9>",             "system_key" )
  166.    assign_key( "<F10>",            "invoke_function" )
  167.  
  168.    assign_key( "<Alt-F1>",         "split_window_horizontal" )
  169.    assign_key( "<Alt-F2>",         "split_window_vertical" )
  170. #  assign_key( "<Alt-F3>",         "make_window" )
  171.    assign_key( "<Alt-F4>",         "done2" )
  172.    assign_key( "<Alt-F5>",         "search_again_backward" )
  173.    assign_key( "<Alt-F6>",         "search_again_forward" )
  174. #  assign_key( "<Alt-F7>",         "learn_key" )
  175.    assign_key( "<Alt-F10>",        "compile_buffer" )
  176.  
  177. #  assign_key( "<Shift-F1>",       "smaller_window" ) 
  178. #  assign_key( "<Shift-F2>",       "larger_window" )
  179. #  assign_key( "<Shift-F3>",       "organize_windows" )
  180. #  assign_key( "<Shift-F4>",       "organize_buffers" )
  181.    assign_key( "<Shift-F8>",       "goto_next_error" )
  182.  
  183.    assign_key( "<Ctrl-F1>",        "display_help_item" )
  184. }
  185.  
  186. global function assign_native_misc_keys()
  187. {
  188.    #--------------------------------------------------------------
  189.    # Alt-digit codes:
  190.    #--------------------------------------------------------------
  191.    assign_key( "<Alt-1>",          "place_bookmark 1" )
  192.    assign_key( "<Alt-2>",          "place_bookmark 2" )
  193.    assign_key( "<Alt-3>",          "place_bookmark 3" )
  194.    assign_key( "<Alt-4>",          "place_bookmark 4" )
  195.    assign_key( "<Alt-5>",          "place_bookmark 5" )
  196.    assign_key( "<Alt-6>",          "place_bookmark 6" )
  197.    assign_key( "<Alt-7>",          "place_bookmark 7" )
  198.    assign_key( "<Alt-8>",          "place_bookmark 8" )
  199.    assign_key( "<Alt-9>",          "place_bookmark 9" )
  200.    assign_key( "<Alt-0>",          "place_bookmark 10" )
  201.  
  202.    #--------------------------------------------------------------
  203.    # Numpad keys
  204.    #--------------------------------------------------------------
  205.    assign_key( "<Num-1>",          "goto_eol" )
  206.    assign_key( "<Num-2>",          "down" )
  207.    assign_key( "<Num-3>",          "page_down" )
  208.    assign_key( "<Num-4>",          "left" )
  209.    assign_key( "<Num-6>",          "right" )
  210.    assign_key( "<Num-7>",          "goto_bol" )
  211.    assign_key( "<Num-8>",          "up" )
  212.    assign_key( "<Num-9>",          "page_up" )
  213.  
  214.    assign_key( "<Num-0>",          "paste_lines" )
  215.    assign_key( "<Num-.>",          "native_cut_lines" )
  216.  
  217.    assign_key( "<Num-*>",          "prev_line" )
  218.    assign_key( "<Num-->",          "prev_line" )
  219.    assign_key( "<Alt-Num-->",      "delete_buffer_key" )
  220.  
  221.    assign_key( "<Num-+>",          "next_line" )
  222.  
  223.    #--------------------------------------------------------------
  224.    # non-ASCII keys on main keyboard:
  225.    #--------------------------------------------------------------
  226.    assign_key( "<Ctrl-Backspace>", "outdent_space_maybe" )
  227.    assign_key( "<Backspace>",      "outdent_space_maybe" ) # Bksp or Ctrl-H
  228.    assign_key( "<Shift-Backspace>","outdent_space_maybe" ) # Bksp or Ctrl-H
  229.  
  230.    assign_key( "<Shift-Space>", "insert_key 32");
  231.    assign_key( "<Ctrl-Space>",  "insert_key 32");
  232.  
  233.    assign_key( "<Tab>",            "indent_tab_maybe" )    # Tab or Ctrl-I
  234.    assign_key( "<Ctrl-Enter>",     "auto_indent_nl" )      # Ctrl-Enter or Ctrl-J
  235.    assign_key( "<Enter>",          "auto_indent_cr" )      # Enter or Ctrl-M
  236.    assign_key( "<Esc>",            "expand_template_key" )     # Ctrl-[ or Esc
  237.  
  238.    # use BackTab for OS2 and Shift-Tab for windows
  239.    assign_key( "<BackTab>",        "outdent_tab_maybe" )
  240.  
  241.    assign_key( "<Alt-Tab>",        "outdent_tab_maybe" )
  242.    assign_key( "<Ctrl-@>",         "beep" )
  243.    assign_key( "<Alt-->",          "delete_buffer_key" )
  244.    assign_key( "<Alt-=>",          "beep" )
  245.  
  246.    assign_key( "<Space>",          "indent_space_maybe" ) # SP and Alt-SP
  247.  
  248.    #--------------------------------------------------------------
  249.    # keypad keys:
  250.    #--------------------------------------------------------------
  251.    assign_key( "<Insert>",         "insert_scrap" )
  252.    assign_key( "<Delete>",         "native_delete" )
  253.    assign_key( "<Shift-Delete>",   "delete_to_scrap")
  254.  
  255.    assign_key( "<Home>",           "goto_bol" )
  256.    assign_key( "<End>",            "goto_eol" )
  257.    assign_key( "<PageUp>",         "page_up" )
  258.    assign_key( "<PageDown>",       "page_down" )
  259.    assign_key( "<Left>",           "native_left" )
  260.    assign_key( "<Right>",          "native_right" )
  261.    assign_key( "<Shift-Left>",     "native_left" )
  262.    assign_key( "<Shift-Right>",    "native_right" )
  263.    assign_key( "<Up>",             "native_up" )
  264.    assign_key( "<Down>",           "native_down" )
  265.  
  266.    assign_key( "<Ctrl-Home>",      "goto_window_top" )
  267.    assign_key( "<Ctrl-End>",       "goto_window_bottom" )
  268.    assign_key( "<Ctrl-PageUp>",    "goto_buffer_top" )
  269.    assign_key( "<Ctrl-PageDown>",  "goto_buffer_bottom" )
  270.    assign_key( "<Ctrl-Left>",      "prev_word" )
  271.    assign_key( "<Ctrl-Right>",     "next_word" )
  272. }
  273.  
  274. # this function is used to customize the menu so that the keys you have
  275. # assigned to do the same thing as the menuitem will show on the menu
  276. # It should be global and start with the string inside emulation_mode
  277. function native_menu()
  278. {
  279.    # first, do a global fix
  280.    optional_function( "fix_menu_text" )
  281.  
  282.    # add keys to menu that contain non-special-dialog box functions
  283.    optional_function( "fix_menu_text", IDM_ADDFILE, "create_buf_and_win_key" )
  284.    optional_function( "fix_menu_text", IDM_SAVE,    "write_buffer_key" )
  285.    optional_function( "fix_menu_text", IDM_CLOSE,    "delete_buffer_key" )
  286.    optional_function( "fix_menu_text", IDM_SAVEAS,  "write_buffer_key" )
  287.    optional_function( "fix_menu_text", IDM_FIND,    "search_forward" )
  288.    optional_function( "fix_menu_text", IDM_FINDAGAIN, "search_again_forward" )
  289.    optional_function( "fix_menu_text", IDM_CHANGE,  "replace_forward" )
  290.    optional_function( "fix_menu_text", IDM_COMMAND, "invoke_function" )
  291.    optional_function( "fix_menu_text", IDM_INSERTFILE, "read_file_key" )
  292.    optional_function( "fix_menu_text", IDM_CUT, "native_delete" )
  293. }
  294.  
  295. function native_exit()
  296. {
  297.    # delete event handlers
  298.    delete_event(EVENT.EMULATION_CHANGED, function_id("native_exit"))
  299. }
  300.  
  301. ## native arrow keys; they're multiplexed depending on the ScrollLock button
  302. #
  303. function native_left()         # Left-Arrow
  304. {
  305.    if( and( keyboard_flags, 0x10 ))
  306.       scroll_left_1()
  307.    else
  308.       prev_char()
  309. }
  310.  
  311. function native_right()        # Right-Arrow
  312. {
  313.    if( and( keyboard_flags, 0x10 ))
  314.       scroll_right_1()
  315.    else
  316.       next_char()
  317. }
  318.  
  319. function native_up()           # Up-Arrow
  320. {
  321.    if( and( keyboard_flags, 0x10 ))
  322.       scroll_up_1()
  323.    else
  324.       up()
  325. }
  326.  
  327. function native_down()         # Down-Arrow
  328. {
  329.    if( and( keyboard_flags, 0x10 ))
  330.       scroll_down_1()
  331.    else
  332.       down()
  333. }
  334.  
  335. function join_lines()
  336. {
  337.    local ins
  338.    
  339.    goto_eol()
  340.    while( read_buffer( -1 ) ~ /[ \t]/ )
  341.       prev_char()
  342.    
  343.    ins = ( read_buffer( -1 ) == "." ) ? "  " : " "
  344.    
  345.    drop_anchor()
  346.    next_line()
  347.    delete_to_scrap()
  348.    
  349.    if( read_buffer( 1 ) != "(" )
  350.       insert_string( ins )
  351. }
  352.  
  353. # delete_to_scrap() even if single character
  354.  
  355. function native_delete()
  356. {
  357.    if( !selection_type())
  358.       drop_anchor( INCLUSIVE_SELECTION )
  359.  
  360.    delete_to_scrap()
  361. }
  362.  
  363.  
  364. # cut or append lines to scrap
  365. #       Cut on the first invocation, append on subsequent, contiguous calls
  366. #       !! This works properly only when the function is invoked via a
  367. #       !!      single-key keymap function.
  368.  
  369.  
  370. function native_cut_lines()
  371. {
  372.    if( selection_type() != LINE_SELECTION )
  373.       drop_anchor( LINE_SELECTION )
  374.  
  375.    if( current_key == prev_key )
  376.    {
  377.       append_to_scrap()
  378.       delete_chars()
  379.    }
  380.    else
  381.       delete_to_scrap()
  382. }
  383.