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

  1. # $Header:   P:\source\wmacros\cua.pev   1.62   21 Mar 1995 09:02:58   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:   cua.pel  $: Key bindings for CUA 91 compatibility
  21.  
  22. global cua_selection = FALSE
  23. local  cua_keymap    = -1
  24. local  old_paste_tfunc
  25. local  old_paste_mfunc
  26.  
  27. global function cua()
  28. {
  29.    local tbhand
  30.    local mhand
  31.    local prevPauseOnError
  32.  
  33.    if (emulation_mode == "cua")
  34.       return;
  35.  
  36.    emulation_mode = "cua"
  37.    cua_selection  = TRUE
  38.  
  39.    execute_event_handler( EVENT.EMULATION_CHANGED )
  40.    
  41.    attach_event_handler(EVENT.EMULATION_CHANGED, function_id("cua_exit"))
  42.    
  43.    # pause if an error or warning occurs during initialization
  44.    prevPauseOnError = pause_on_error
  45.    pause_on_error   = 1
  46.    
  47.    # set up cua menu and keymap
  48.    create_cua_keymap()
  49.    cua_menu()
  50.    
  51.    # set up default search characteristics
  52. #   search_flags = SEARCH_MAXIMAL_MATCH                  \
  53. #                + SEARCH_FORWARD                        \
  54. #                + SEARCH_BLOCK                          \
  55. #                + SEARCH_REGEX                          \
  56. #                + SEARCH_WRAPS                          \
  57. #                + SEARCH_HIGHLIGHT                      \
  58.                            
  59.    # misc defaults
  60.    toggle_auto_indent( 0 )
  61.    pause_on_error = prevPauseOnError
  62.  
  63.    tbhand = toolbar_info( 0 )
  64.    if ( tbhand )
  65.    {
  66.       old_paste_tfunc = toolbar_info( tbhand, TI_FUNCTIONID, IDM_PASTE )
  67.       modify_toolbaritem( tbhand, IDM_PASTE, TI_FUNCTIONID, function_id("cua_insert_scrap") )
  68.    }
  69.  
  70.    old_paste_mfunc           = menu_functions[IDM_PASTE]
  71.    menu_functions[IDM_PASTE] = "cua_insert_scrap"
  72. }
  73.  
  74. global function create_cua_keymap()
  75. {
  76.    # Enable the keymap.  Subsequent mods to the keymap will persist
  77.    #       through the end of the session.
  78.    # Only one-time initialization should follow this point.
  79.  
  80.    if ( cua_keymap >= 0 )
  81.    {
  82.       current_keymap = cua_keymap
  83.       return
  84.    }
  85.    else
  86.    {
  87.       current_keymap = cua_keymap = create_keymap( factory_keymap )
  88.  
  89.       assign_cua_keys()
  90.       assign_cua_f_keys()
  91.       assign_cua_misc_keys()
  92. #     assign_mouse_buttons()
  93.  
  94.       optional_function("local_keys")
  95.    }
  96. }
  97.  
  98. global function assign_cua_keys()
  99. {
  100.    #--------------------------------------------------------------
  101.    # Ctrl + Alt key combinations on the main keyboard:
  102.    #--------------------------------------------------------------
  103.    assign_key( "<Esc>",                 "expand_template_key" )
  104.    assign_key( "<Alt-E>",  "")
  105.    assign_key( "<Alt-W>",  "")
  106.  
  107.    #--------------------------------------------------------------
  108.    # Cursor Movement
  109.    #--------------------------------------------------------------
  110.    assign_key( "<Ctrl-G>",                 "optional_function routines" )
  111.    assign_key( "<Ctrl-L>",                 "goto_line_key" )
  112.    
  113.    #--------------------------------------------------------------
  114.    # Marked Blocks
  115.    #--------------------------------------------------------------
  116.    assign_key( "<Ctrl-M>",                 "set_inclusive_mark" )
  117.    assign_key( "<Ctrl-F>",                 "set_line_mark" )
  118.    assign_key( "<Ctrl-C>",                 "set_column_mark" )
  119. #   assign_key( "<Ctrl-A>",                 "set_exclusive_mark" )
  120.  
  121.    #--------------------------------------------------------------
  122.    # Command Dialog
  123.    #--------------------------------------------------------------
  124.    assign_key( "<Ctrl-A>",                 "gui_command" )
  125.  
  126.    #--------------------------------------------------------------
  127.    # Basic Text commands
  128.    #--------------------------------------------------------------
  129.    assign_key( "<Ctrl-D>",                 "delete_line" )
  130.    assign_key( "<Ctrl-K>",                 "delete_to_eol" )
  131.  
  132.    #--------------------------------------------------------------
  133.    # Manipulating Buffers
  134.    #--------------------------------------------------------------
  135.    assign_key( "<Ctrl-O>",                "gui_open" )
  136.    assign_key( "<Ctrl-R>",                "gui_insert_file" )
  137.    assign_key( "<Ctrl-W>",                "gui_save" )
  138.    assign_key( "<Ctrl-N>",                "next_buffer_mask" )
  139.    assign_key( "<Ctrl-Shift-N>",          "prev_buffer_mask" )
  140.    assign_key( "<Ctrl-B>",                "buffer_list" )
  141.    assign_key( "<Ctrl-X>",                "write_and_exit" )
  142.    assign_key( "<Ctrl-P>",                "gui_print" )
  143.    assign_key( "<Ctrl-I>",                "gui_saveas" )
  144.  
  145.    #--------------------------------------------------------------
  146.    # Searching and translating
  147.    #--------------------------------------------------------------
  148.  
  149.    assign_key( "<Ctrl-S>",                 "gui_find" )
  150.    assign_key( "<Ctrl-E>",                 "gui_search_again" )
  151.    assign_key( "<Ctrl-T>",                 "gui_change" )
  152.    assign_key( "<Alt-Shift-S>",     function_id("toggle_search_flags", SEARCH_CASE))
  153.    assign_key( "<Alt-Shift-R>",     function_id("toggle_search_flags", SEARCH_REGEX))
  154.  
  155.    #--------------------------------------------------------------
  156.    # Bookmarks
  157.    #--------------------------------------------------------------
  158.    assign_key( "<Ctrl-J>",                 "goto_bookmark" )
  159.  
  160.    #--------------------------------------------------------------
  161.    # Miscellaneous
  162.    #--------------------------------------------------------------
  163.    assign_key( "<Alt-X>",                  "done" )
  164.    assign_key( "<Ctrl-V>",                 "print_version" )
  165.    assign_key( "<Ctrl-Q>",                 "insert_quoted_key" )
  166. }                 
  167.  
  168. global function assign_cua_f_keys()
  169. {
  170.    #--------------------------------------------------------------
  171.    # Function Key bindings
  172.    #--------------------------------------------------------------
  173. #  assign_key( "<F1>",                     "help" )                     #CUA
  174.    assign_key( "<Shift-F1>",               "display_filename" )
  175.    assign_key( "<Ctrl-F1>",                "display_help_item" )
  176.    assign_key( "<Alt-F1>",                 "toggle_borders" )
  177.  
  178. #  assign_key( "<F2>",                     "extended_help" )    #nImp   #CUA
  179. #  assign_key( "<Shift-F2>",               "tutorial" )         #nImp   #CUA
  180. ## assign_key( "<Ctrl-F2>",                "" )
  181. #  assign_key( "<Alt-F2>",                 "toggle_window_zoom" )
  182.  
  183. #  assign_key( "<F3>",                     "" )
  184. #  assign_key( "<Shift-F3>",               "" )
  185. #  assign_key( "<Ctrl-F3>",                "gui_create_window" )
  186. #  assign_key( "<Alt-F3>",                 "" )
  187.  
  188.    assign_key( "<F4>",                     "gui_delete_buffer" )
  189. #  assign_key( "<Shift-F4>",               "" )
  190. #  assign_key( "<Ctrl-F4>",                "delete_tiled_window" )
  191.    assign_key( "<Alt-F4>",                 "done2" )                     #CUA
  192.  
  193. #  assign_key( "<F5>",                     "refresh_window" )   #nImp   #CUA
  194. #  assign_key( "<Shift-F5>",               "" )
  195. #  assign_key( "<Ctrl-F5>",                "restore_window" )
  196. ## assign_key( "<Alt-F5>",                 "restore_frame_window" )
  197.  
  198. #  assign_key( "<F6>",                     "switch_tiled_window" ) #nImp #CUA
  199. #  assign_key( "<Shift-F6>",               "prev_window" )
  200. #  assign_key( "<Ctrl-F6>",                "next_window" )              #CUA
  201. #  assign_key( "<Alt-F6>",                 "next_window" )              #CUA
  202.  
  203. ## assign_key( "<F7>",                     "" ) # (see Macros below)
  204. ## assign_key( "<Shift-F7>",               "" ) # (see Macros below)
  205. #  assign_key( "<Ctrl-F7>",                "adjust_window 1" )     # Move
  206. ## assign_key( "<Alt-F7>",                 "move frame window" )
  207.  
  208. ## assign_key( "<F8>",                     "" ) # (see Macros below)
  209. ## assign_key( "<Shift-F8>",               "" )
  210. #  assign_key( "<Ctrl-F8>",                "adjust_window" )       # Size
  211. ## assign_key( "<Alt-F8>",                 "size frame window" )
  212.  
  213. #  assign_key( "<F9>",                     "keys_help" )        #nImp   #CUA
  214. ## assign_key( "<Shift-F9>",               "" )
  215. #  assign_key( "<Ctrl-F9>",                "collapse_window" )     # Minimize
  216. ## assign_key( "<Alt-F9>",                 "iconize frame window" )
  217.  
  218.    assign_key( "<F10>",                    "select_menuitem" )          #CUA
  219. #  assign_key( "<Shift-F10>",              "help_for_help" )    #nImp   #CUA
  220.    if ( popupmenu )
  221.       assign_key( "<Shift-F10>",              "gui_show_popup" )
  222. #  assign_key( "<Ctrl-F10>",               "expand_window" )       # Maximize
  223. ## assign_key( "<Alt-F10>",                "maximize frame window" )
  224.  
  225.    #--------------------------------------------------------------
  226.    # Macros and keystroke recordings
  227.    #--------------------------------------------------------------
  228. #commented out for version 1
  229.  
  230.   assign_key( "<Alt-F7>",                 "load_key_file" )
  231.   assign_key( "<Alt-F8>",                 "write_key_file" )
  232.  
  233.   assign_key( "<F7>",                     "record_macro" )
  234.   assign_key( "<F8>",                     "playback_macro" )
  235.   assign_key( "<Shift-F7>",               "pause_recording" )
  236.  
  237. }
  238.  
  239. global function assign_cua_misc_keys()
  240. {
  241.    #--------------------------------------------------------------
  242.    # Alt-digit codes, Numpad keys, keypad keys &
  243.    # non-ASCII keys on main keyboard:
  244.    #--------------------------------------------------------------
  245.  
  246.    #--------------------------------------------------------------
  247.    # Cursor Movement
  248.    #--------------------------------------------------------------
  249.    assign_key( "<Left>",                   "left" )                     #CUA
  250.    assign_key( "<Right>",                  "right" )                    #CUA
  251.    assign_key( "<Down>",                   "down" )                     #CUA
  252.    assign_key( "<Up>",                     "up" )                       #CUA
  253.    assign_key( "<Home>",                   "goto_bol" )                 #CUA
  254.    assign_key( "<End>",                    "goto_eol" )                 #CUA
  255.    assign_key( "<PageDown>",               "page_down" )                #CUA
  256.    assign_key( "<PageUp>",                 "page_up" )                  #CUA
  257.    assign_key( "<Num-5>",                  "center_cursor" )
  258.    
  259.    assign_key( "<Ctrl-Left>",              "prev_word" )                #CUA
  260.    assign_key( "<Ctrl-Right>",             "next_word" )                #CUA
  261.    assign_key( "<Ctrl-Down>",              "down_whitespace" )
  262.    assign_key( "<Ctrl-Up>",                "up_whitespace" )
  263.    assign_key( "<Ctrl-Home>",              "goto_buffer_top" )          #CUA
  264.    assign_key( "<Ctrl-End>",               "goto_buffer_bottom" )       #CUA
  265.    assign_key( "<Ctrl-PageDown>",          "right_half_page" )          #CUA
  266.    assign_key( "<Ctrl-PageUp>",            "left_half_page" )           #CUA
  267.    
  268.    assign_key( "<Ctrl-Num-Left>",          "prev_word" )                #CUA
  269.    assign_key( "<Ctrl-Num-Right>",         "next_word" )                #CUA
  270.    assign_key( "<Ctrl-Num-Down>",          "down_whitespace" )
  271.    assign_key( "<Ctrl-Num-Up>",            "up_whitespace" )
  272.    assign_key( "<Ctrl-Num-Home>",          "goto_buffer_top" )          #CUA
  273.    assign_key( "<Ctrl-Num-End>",           "goto_buffer_bottom" )       #CUA
  274.    assign_key( "<Ctrl-Num-PageDown>",      "right_half_page" )          #CUA
  275.    assign_key( "<Ctrl-Num-PageUp>",        "left_half_page" )           #CUA
  276.    
  277. #   assign_key( "<Ctrl-Num-Left>",          "scroll_left_1" )
  278. #   assign_key( "<Ctrl-Num-Right>",         "scroll_right_1" )
  279. #   assign_key( "<Ctrl-Num-Down>",          "scroll_down_1" )
  280. #   assign_key( "<Ctrl-Num-Up>",            "scroll_up_1" )
  281. #   assign_key( "<Ctrl-Num-Home>",          "goto_window_left" )
  282. #   assign_key( "<Ctrl-Num-End>",           "goto_window_right" )
  283. #   assign_key( "<Ctrl-Num-PageDown>",      "goto_window_bottom" )
  284. #   assign_key( "<Ctrl-Num-PageUp>",        "goto_window_top" )
  285.    
  286.    #--------------------------------------------------------------
  287.    # Marked Blocks
  288.    #--------------------------------------------------------------
  289.    assign_key( "<Shift-Delete>",           "gui_delete_to_scrap" )      #CUA
  290.    assign_key( "<Shift-Insert>",           "cua_insert_scrap" )         #CUA
  291.    assign_key( "<Ctrl-Insert>",            "copy_to_scrap_key" )        #CUA
  292.    
  293.    assign_key( "<Shift-Left>",             "cua_extend " )              #CUA
  294.    assign_key( "<Shift-Right>",            "cua_extend " )              #CUA
  295.    assign_key( "<Shift-Down>",             "cua_extend " )              #CUA
  296.    assign_key( "<Shift-Up>",               "cua_extend " )              #CUA
  297.  
  298.    assign_key( "<Shift-Home>",             "cua_extend " )              #CUA
  299.    assign_key( "<Shift-End>",              "cua_extend " )              #CUA
  300.    assign_key( "<Shift-PageDown>",         "cua_extend " )              #CUA
  301.    assign_key( "<Shift-PageUp>",           "cua_extend " )              #CUA
  302.  
  303.    assign_key( "<Shift-Num-Left>",         "cua_extend " )              #CUA
  304.    assign_key( "<Shift-Num-Right>",        "cua_extend " )              #CUA
  305.    assign_key( "<Shift-Num-Down>",         "cua_extend " )              #CUA
  306.    assign_key( "<Shift-Num-Up>",           "cua_extend " )              #CUA
  307.  
  308.    assign_key( "<Shift-Num-Home>",         "cua_extend " )              #CUA
  309.    assign_key( "<Shift-Num-End>",          "cua_extend " )              #CUA
  310.    assign_key( "<Shift-Num-PageDown>",     "cua_extend " )              #CUA
  311.    assign_key( "<Shift-Num-PageUp>",       "cua_extend " )              #CUA
  312.    
  313.    assign_key( "<Ctrl-Shift-Left>",        "cua_extend " )              #CUA
  314.    assign_key( "<Ctrl-Shift-Right>",       "cua_extend " )              #CUA
  315.    assign_key( "<Ctrl-Shift-Down>",        "cua_extend " )
  316.    assign_key( "<Ctrl-Shift-Up>",          "cua_extend " )
  317.    assign_key( "<Ctrl-Shift-Home>",        "cua_extend " )              #CUA
  318.    assign_key( "<Ctrl-Shift-End>",         "cua_extend " )              #CUA
  319.    assign_key( "<Ctrl-Shift-PageDown>",    "cua_extend " )              #CUA
  320.    assign_key( "<Ctrl-Shift-PageUp>",      "cua_extend " )              #CUA
  321.  
  322.    assign_key( "<Ctrl-Shift-Num-Left>",    "cua_extend " )              #CUA
  323.    assign_key( "<Ctrl-Shift-Num-Right>",   "cua_extend " )              #CUA
  324.    assign_key( "<Ctrl-Shift-Num-Down>",    "cua_extend " )
  325.    assign_key( "<Ctrl-Shift-Num-Up>",      "cua_extend " )
  326.    assign_key( "<Ctrl-Shift-Num-Home>",    "cua_extend " )              #CUA
  327.    assign_key( "<Ctrl-Shift-Num-End>",     "cua_extend " )              #CUA
  328.    assign_key( "<Ctrl-Shift-Num-PageDown>","cua_extend " )              #CUA
  329.    assign_key( "<Ctrl-Shift-Num-PageUp>",  "cua_extend " )              #CUA
  330.  
  331.  
  332.    #--------------------------------------------------------------
  333.    # Other Windows commands
  334.    #--------------------------------------------------------------
  335. #  assign_key( "<Alt-Left>",               "w_window" )
  336. #  assign_key( "<Alt-Right>",              "e_window" )
  337. #  assign_key( "<Alt-Down>",               "s_window" )
  338. #  assign_key( "<Alt-Up>",                 "n_window" )
  339.  
  340.    #--------------------------------------------------------------
  341.    # Basic Text commands
  342.    #--------------------------------------------------------------
  343.    assign_key( "<Delete>",                 "delete_chars" )             #CUA
  344.    assign_key( "<Insert>",     function_id("toggle_buffer_flags", BUFFER_OVERTYPE_MODE))       #CUA
  345.  
  346.    assign_key( "<Enter>",                  "cua_enter" )
  347.    assign_key( "<Num-Enter>",              "cua_enter" )
  348.  
  349.    assign_key( "<Ctrl-Enter>",             "auto_indent_nl" )
  350.    assign_key( "<Tab>",                    "cua_tab" )
  351.  
  352.    # use BackTab for OS2 and Shift-Tab for windows
  353.    assign_key( "<BackTab>",                "outdent_tab_maybe" )
  354.  
  355.    assign_key( "<Space>",                  "indent_space_maybe" )
  356.    assign_key( "<Shift-Space>",            "indent_space_maybe" )
  357.    assign_key( "<Ctrl-Space>",             "indent_space_maybe" )
  358.  
  359.    assign_key( "<Backspace>",              "cua_backspace" )
  360.    assign_key( "<Ctrl-Backspace>",         "delete_prev_word" )
  361.    assign_key( "<Shift-Backspace>",        "delete_word" )
  362.  
  363.    #--------------------------------------------------------------
  364.    # Bookmarks
  365.    #--------------------------------------------------------------
  366.    assign_key( "<Alt-1>",                  "place_bookmark 1" )
  367.    assign_key( "<Alt-2>",                  "place_bookmark 2" )
  368.    assign_key( "<Alt-3>",                  "place_bookmark 3" )
  369.    assign_key( "<Alt-4>",                  "place_bookmark 4" )
  370.    assign_key( "<Alt-5>",                  "place_bookmark 5" )
  371.    assign_key( "<Alt-6>",                  "place_bookmark 6" )
  372.    assign_key( "<Alt-7>",                  "place_bookmark 7" )
  373.    assign_key( "<Alt-8>",                  "place_bookmark 8" )
  374.    assign_key( "<Alt-9>",                  "place_bookmark 9" )
  375.    assign_key( "<Alt-0>",                  "place_bookmark 10" )
  376.  
  377.    #--------------------------------------------------------------
  378.    # Undo / Redo
  379.    #--------------------------------------------------------------
  380.    assign_key( "<Alt-Backspace>",          "gui_undo" )                     #CUA
  381.    assign_key( "<Alt-Shift-Backspace>",    "gui_redo" )
  382.  
  383.    #--------------------------------------------------------------
  384.    # Toggle keys used alone
  385.    #--------------------------------------------------------------
  386.  
  387. #   assign_key( "<Alt>",                    "select_menuitem" )          #CUA
  388.  
  389.    #--------------------------------------------------------------
  390.    # Miscellaneous
  391.    #--------------------------------------------------------------
  392. ## assign_key( "<>",                       "display_ascii_table" )
  393. ## assign_key( "<>",                       "toggle_file_backup" )
  394. ## assign_key( "<>",                       "repeat_key_action" )
  395. ## assign_key( "<>",                       "insert_keys" )
  396. ## assign_key( "<>",                       "compile_buffer" )
  397. ## assign_key( "<>",                       "goto_next_error" )
  398. ## assign_key( "<>",                       "display_errors" )
  399. ## assign_key( "<>",                       "system" )
  400. ## assign_key( "<>",                       "system_key" )
  401. }
  402.  
  403. # this function is used to customize the menu so that the keys you have
  404. # assigned to do the same thing as the menuitem will show on the menu
  405. # It should be global and start with the string inside emulation_mode
  406. global function cua_menu(noFKeys)
  407. {
  408.    local menu = menu_info(0, MI_MENUHANDLE);
  409.  
  410.    if ( menu )
  411.    {
  412.       # first, do a global fix
  413.       optional_function( "fix_menu_text" )
  414.    
  415.       # add keys to menu that contain non-special-dialog box functions
  416.       optional_function( "fix_menu_text", IDM_UNDO, "gui_undo" )
  417.       optional_function( "fix_menu_text", IDM_REDO, "gui_redo" )
  418.       optional_function( "fix_menu_text", IDM_FINDAGAIN, "gui_search_again" )
  419.       optional_function( "fix_menu_text", IDM_CUT, "gui_delete_to_scrap" )
  420.       optional_function( "fix_menu_text", IDM_PASTE, "cua_insert_scrap" )
  421.  
  422.       if (noFKeys)
  423.          modify_menuitem( menu, IDM_CLOSE, MI_KEYSTEXT, "")
  424.       else
  425.          modify_menuitem( menu, IDM_CLOSE, MI_KEYSTEXT, "F4")
  426.    }
  427. }
  428.  
  429. #
  430. # EVENT.EMULATION_CHANGED Occured - CUA Emulation is no longer active.
  431. #
  432. global function cua_exit()
  433. {
  434.    local tbhand
  435.  
  436.    # delete event handlers
  437.    delete_event(EVENT.EMULATION_CHANGED, function_id("cua_exit"))
  438.  
  439.    cua_selection = FALSE
  440.  
  441.    tbhand = toolbar_info( 0 )
  442.    if ( tbhand )
  443.       modify_toolbaritem( tbhand, IDM_PASTE, TI_FUNCTIONID, old_paste_tfunc )
  444.  
  445.    menu_functions[IDM_PASTE] = old_paste_mfunc
  446. }
  447.  
  448. ##########################################################################
  449. #
  450. # CUA extend selection key processing
  451. #
  452. # DWM  updated 5/26/94
  453. #
  454. ##########################################################################
  455. local extend_buffers[]
  456. local extend_keys[]
  457.  
  458. global function initialize_mouse_cua_selection()
  459. {
  460.    extend_buffers[ current_buffer ] = TRUE
  461. }
  462.  
  463. local function initialize_extend_keys()
  464. {
  465.    if ( !extend_keys )
  466.    {
  467.       extend_keys[   "<Shift-Up>"                  ] = function_id("up")
  468.       extend_keys[   "<Shift-Down>"                ] = function_id("down")
  469.       extend_keys[   "<Shift-Left>"                ] = function_id("left")
  470.       extend_keys[   "<Shift-Right>"               ] = function_id("right")
  471.       extend_keys[   "<Shift-Home>"                ] = function_id("goto_bol")
  472.       extend_keys[   "<Shift-End>"                 ] = function_id("goto_eol")
  473.       extend_keys[   "<Shift-PageUp>"              ] = function_id("page_up")
  474.       extend_keys[   "<Shift-PageDown>"            ] = function_id("page_down")
  475.       extend_keys[   "<Ctrl-Shift-Up>"             ] = function_id("up_whitespace")
  476.       extend_keys[   "<Ctrl-Shift-Down>"           ] = function_id("down_whitespace")
  477.       extend_keys[   "<Ctrl-Shift-Left>"           ] = function_id("cua_prev_word")
  478.       extend_keys[   "<Ctrl-Shift-Right>"          ] = function_id("cua_next_word")
  479.       extend_keys[   "<Ctrl-Shift-Home>"           ] = function_id("goto_buffer_top")
  480.       extend_keys[   "<Ctrl-Shift-End>"            ] = function_id("goto_buffer_bottom")
  481.       extend_keys[   "<Ctrl-Shift-PageUp>"         ] = function_id("right_half_page")
  482.       extend_keys[   "<Ctrl-Shift-PageDown>"       ] = function_id("left_half_page")
  483.       extend_keys[   "<Shift-Num-Up>"              ] = function_id("up")
  484.       extend_keys[   "<Shift-Num-Down>"            ] = function_id("down")
  485.       extend_keys[   "<Shift-Num-Left>"            ] = function_id("left")
  486.       extend_keys[   "<Shift-Num-Right>"           ] = function_id("right")
  487.       extend_keys[   "<Shift-Num-Home>"            ] = function_id("goto_bol")
  488.       extend_keys[   "<Shift-Num-End>"             ] = function_id("goto_eol")
  489.       extend_keys[   "<Shift-Num-PageUp>"          ] = function_id("page_up")
  490.       extend_keys[   "<Shift-Num-PageDown>"        ] = function_id("page_down")
  491.       extend_keys[   "<Ctrl-Shift-Num-Up>"         ] = function_id("up_whitespace")
  492.       extend_keys[   "<Ctrl-Shift-Num-Down>"       ] = function_id("down_whitespace")
  493.       extend_keys[   "<Ctrl-Shift-Num-Left>"       ] = function_id("cua_prev_word")
  494.       extend_keys[   "<Ctrl-Shift-Num-Right>"      ] = function_id("cua_next_word")
  495.       extend_keys[   "<Ctrl-Shift-Num-Home>"       ] = function_id("goto_buffer_top")
  496.       extend_keys[   "<Ctrl-Shift-Num-End>"        ] = function_id("goto_buffer_bottom")
  497.       extend_keys[   "<Ctrl-Shift-Num-PageUp>"     ] = function_id("right_half_page")
  498.       extend_keys[   "<Ctrl-Shift-Num-PageDown>"   ] = function_id("left_half_page")
  499.    }
  500.  
  501. }
  502.  
  503. global function cua_backspace()
  504. {
  505.    if ( selection_type() )
  506.       delete_chars()
  507.    else
  508.       gui_backspace()
  509. }
  510.  
  511. global function cua_enter()
  512. {
  513.    if ( selection_type() )
  514.       delete_chars()
  515.  
  516.    auto_indent_cr()
  517. }
  518.  
  519. global function cua_tab()
  520. {
  521.    indent_tab_maybe()
  522. }
  523.  
  524. # These versions of next and previous word stop at the end and
  525. # beginning of lines
  526. global function cua_next_word()
  527. {
  528.    next_word(0, "<|$")
  529. }
  530.  
  531. global function cua_prev_word()
  532. {
  533.    prev_word(0, ">|^")
  534. }
  535.  
  536. global function cua_extend(mouse_sel)
  537. {
  538.    local key         = int_to_key(current_key)
  539.    local selection   = selection_type()
  540.  
  541.    initialize_extend_keys()
  542.  
  543.    if ( !selection )
  544.       begin_selection(NORMAL_SELECTION)
  545.  
  546.    if ( !mouse_sel )
  547.       execute_function( extend_keys[key] )
  548.    
  549.    if ( !selection )
  550.    {
  551.       if ( !extend_buffers )
  552.       {
  553.          attach_event_handler( EVENT.KEYPRESS, function_id( "cua_extend_arrows" ) )
  554.          attach_event_handler( EVENT.KEYPRESS_AFTER, function_id( "cua_remove_selection" ) )
  555.       }
  556.  
  557.       extend_buffers[ current_buffer ] = TRUE
  558.    }
  559. }
  560.  
  561. # this function is used by the mouse processing code
  562. # to process when a mouse selection is made in CUA
  563. # mode.
  564. global function cua_process_selection()
  565. {
  566.    local keyName = int_to_key(current_key)
  567.    local charKey = int_to_ascii(current_key)
  568.  
  569.    charKey = ( charKey >= 32 && charKey <= 128 )
  570.  
  571.    initialize_extend_keys()
  572.  
  573.    if ( current_buffer in extend_buffers && !(keyName in extend_keys) )
  574.    {
  575.       if ( charKey )
  576.          delete_chars()
  577.       else if ( selection_type() )
  578.          delete_chars()
  579.       else
  580.          cua_remove_selection() 
  581.    
  582.       delete extend_buffers[ current_buffer ]
  583.    }
  584.  
  585. }
  586.  
  587. global function cua_remove_selection()
  588. {
  589.    local keyName = int_to_key(current_key)
  590.  
  591.    if ( current_buffer in extend_buffers && !(keyName in extend_keys) )
  592.    {
  593.       if ( keyName != "<Tab>" && keyName != "<BackTab>")
  594.       {
  595.          delete extend_buffers[ current_buffer ]
  596.          remove_selection()
  597.          update_current_view()
  598.          if ( !extend_buffers )
  599.             delete_event(EVENT.KEYPRESS_AFTER, function_id( "cua_remove_selection" ) )
  600.       }
  601.    }
  602. }
  603.  
  604. global function cua_extend_arrows()
  605. {
  606.    local keyName = int_to_key(current_key)
  607.    local charKey = int_to_ascii(current_key)
  608.  
  609.    charKey = ( charKey >= 32 && charKey <= 128 )
  610.  
  611.    if ( current_buffer in extend_buffers && !(keyName in extend_keys) )
  612.    {
  613.       if ( !charKey ) 
  614.       {
  615.          delete extend_buffers[ current_buffer ]
  616.  
  617.          if ( !extend_buffers )
  618.             delete_event(EVENT.KEYPRESS, function_id( "cua_extend_arrows" ) )
  619.  
  620.          # must re-add current_buffer in list so the EVENT.KEYPRESS after
  621.          # can execute.  We must wait otherwise command is not executed
  622.          # on the correct block
  623.          extend_buffers[ current_buffer ] = TRUE
  624.       }
  625.       else
  626.       {
  627.          delete extend_buffers[ current_buffer ]
  628.  
  629.          if ( !extend_buffers )
  630.             delete_event(EVENT.KEYPRESS, function_id( "cua_extend_arrows" ) )
  631.  
  632.          # must re-add current_buffer in list so the EVENT.KEYPRESS after
  633.          # can execute.  We must wait otherwise command is not executed
  634.          # on the correct block
  635.          extend_buffers[ current_buffer ] = TRUE
  636.  
  637.          if ( selection_type() && emulation_mode != "vi")
  638.             delete_chars()
  639.       }
  640.    }
  641. }
  642.  
  643. global function cua_insert_scrap()
  644. {
  645.    local type = selection_type()
  646.    local top_mark
  647.    local bottom_mark
  648.    local start_line
  649.    local start_column
  650.  
  651.    if ( type )
  652.       {
  653.       if ( type != COLUMN_SELECTION )
  654.          delete_chars()
  655.       else
  656.          {
  657.          top_mark = selection_mark_top()
  658.          bottom_mark = selection_mark_bottom()
  659.  
  660.          start_line = mark_line( top_mark )
  661.  
  662.          if ( mark_column(bottom_mark) > mark_column(top_mark) )
  663.             start_column = mark_column( top_mark )
  664.          else
  665.             start_column = mark_column( bottom_mark )
  666.  
  667.          delete_chars()
  668.  
  669.          goto_pos( start_line, start_column )
  670.          }
  671.       }
  672.    insert_scrap()
  673. }