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]).
|