aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/edit_globalmap.erl
blob: 8751f95bf56119ffa1e4a85f9275acc6fabd071d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%%%----------------------------------------------------------------------
%%% File    : edit_globalmap.erl
%%% Author  : Luke Gorrie <luke@bluetail.com>
%%% Purpose : Global keymap
%%% Created : 23 Sep 2000 by Luke Gorrie <luke@bluetail.com>
%%%----------------------------------------------------------------------

-module(edit_globalmap).
-author('luke@bluetail.com').

-export([init/0]).

%% Initialise global keymap
init() ->
    Map = edit_keymap:new(global_map),
    edit_keymap:bind_each(Map, bindings()),
    edit_keymap:new(global_cx_map),
    edit_keymap:bind_each(global_cx_map, cx_bindings()),
    edit_keymap:new(minibuffer_map),
    edit_keymap:bind_each(minibuffer_map, minibuffer_bindings()),
    edit_keymap:new(term_escape_map),
    edit_keymap:bind_each(term_escape_map, term_escape_bindings()),
    edit_keymap:new(help_map),
    edit_keymap:bind_each(help_map, help_bindings()),
    edit_keymap:new(empty_keymap),
    global_map.

bindings() ->
    [
     %% Motion
     {"C-a", {edit_lib, beginning_of_line, []}},
     {"C-b", {edit_lib, backward_char, []}},
     {"C-e", {edit_lib, end_of_line, []}},
     {"C-f", {edit_lib, forward_char, []}},
     {"M-b", {edit_lib, backward_word, []}},
     {"M-f", {edit_lib, forward_word, []}},
     {"M-<", {edit_lib, start_of_buffer, []}},
     {"M->", {edit_lib, end_of_buffer, []}},
     {"C-n", {edit_lib, next_line, []}},
     {"C-p", {edit_lib, previous_line, []}},
     {"C-M-a", {edit_erlang, beginning_of_function, []}},
     {"C-v", {edit_lib, scroll_down, []}},
     {"M-v", {edit_lib, scroll_up, []}},
     {"C-l", {edit_lib, recenter, []}},
     %% Editing
     {"C-h", {edit_lib, delete_char_backward, []}},
     {"C-?", {edit_lib, delete_char_backward, []}},
     {"C-d", {edit_lib, delete_char_forward, []}},
     {"M-d", {edit_lib, delete_word_forward, []}},
     {"C-k", {edit_lib, kill_line, []}},
     {"C-w", {edit_lib, kill_region, [true]}},
     {"M-w", {edit_lib, kill_region, [false]}},
     {"C-y", {edit_lib, yank, []}},
     {"C-o", {edit_lib, open_line, []}},
     {"C-_", {edit_lib, undo, []}},
     {"C-/", {edit_lib, undo, []}},
     {"C-u", {edit_lib, undo, []}},
     %% Searching
     {"C-s", {edit_lib, search, [forward]}},
     {"C-r", {edit_lib, search, [backward]}},
     {"C-M-s", {edit_lib, regexp_search, [forward]}},
     {"C-M-r", {edit_lib, regexp_search, [backward]}},
     %% Misc
     {"C-@", {edit_lib, set_mark, []}},
     {"M-!", {edit_lib, unix_command, []}},
     {"C-t", {edit_lib, printf, []}},
     {"M-:", {edit_eval, eval_expression, []}},
     {"M-x", {edit_extended, execute_extended_command, []}},
     {"C-g", {edit_lib, abort, []}},
     %% Keymaps
     {"M-[", {keymap, term_escape_map}},
     {"C-x", {keymap, global_cx_map}},
     %% Help
     {"M-h", {keymap, help_map}},
     %% self insert commands (\r becomes \n)
     {$\r,   {edit_lib, self_insert_command, [$\n]}}
     | [{Ch, {edit_lib, self_insert_command, [Ch]}} || Ch <- self_inserts()]
    ].

%% ESC [ <key> - for arrows etc
term_escape_bindings() ->
    [{"A", {edit_lib, previous_line, []}},
     {"B", {edit_lib, next_line, []}},
     {"C", {edit_lib, forward_char, []}},
     {"D", {edit_lib, backward_char, []}}].

%% Bindings after C-x prefix
cx_bindings() ->
    [{"C-x", {edit_lib, exchange_point_and_mark, []}},
     {"C-c", {edit_lib, quit, []}},
     {"C-f", {edit_file, find_file, []}},
     {"C-s", {edit_file, save_file, []}},
     {"C-m", {edit_eval, interactive_eval, []}},
     {"i",   {edit_eval, erlang_interaction_mode, []}},
     {"f",   {edit_lib, fundamental_mode, []}},
     {"r",   {edit_eval, back_to_start, []}},
     {"b",   {edit_lib, switch_to_buffer, []}},
     {"k",   {edit_lib, kill_buffer, []}},
     {"h",   {edit_lib, mark_whole_buffer, []}},
     {"o",   {edit_lib, next_window, []}},
     {"0",   {edit_lib, delete_window, []}},
     {"1",   {edit_lib, delete_other_windows, []}},
     {"2",   {edit_lib, split_window_vertically, []}},
%      {"e",   {edit_erlang, erlang_mode, []}},
     {"d",   {edit_lib, buffer_cord_info, []}}
    ].

minibuffer_bindings() ->
    [{"C-m", {edit_extended, take_argument, []}},
     {"C-g", {edit_extended, abort, []}},
     {"C-i", {edit_complete, complete, []}},
     %% generic history
     {"M-p", {edit_extended, history_move, [up]}},
     {"M-n", {edit_extended, history_move, [down]}},
     {"M-r", {edit_extended, history_search, []}}
    ].

help_bindings() ->
    [{"k", {edit_help, describe_key, []}},
     {"s", {edit_help, find_source, []}}].

self_inserts() ->
    %% HACK
    "\n\t" ++ lists:seq(32, 126).
    %%"\r\n\t" ++ (lists:seq(32, 126) -- [127]).