add option validation
[vis-parkour.git] / keys-emacs.lua
blob79b0a3bf2fe69073d0a69732de57f55960d787d8
1 return function(B, H)
2 return {
3 imap = {
4 -- Structured motions:
5 ['<M-C-f>'] = B.M.forward,
6 ['<M-C-b>'] = B.M.backward,
7 ['<M-C-d>'] = B.M.forward_down,
8 ['<M-C-u>'] = B.M.backward_up,
9 ['<M-C-n>'] = B.M.forward_up,
10 ['<M-C-p>'] = B.M.backward_down,
11 ['<M-C-e>'] = B.M.next_beginning_of_defun,
12 ['<M-C-a>'] = B.M.prev_beginning_of_defun,
13 ['<M-e>'] = B.M.end_of_sentence,
14 ['<M-a>'] = B.M.beginning_of_sentence,
15 ['<M-f>'] = B.M.next_finish_float,
16 ['<M-b>'] = B.M.prev_start_float,
17 ['<C-x>]'] = B.M.next_section,
18 ['<C-x>['] = B.M.prev_section,
19 -- Structured selections:
20 ['<M-C- >'] = H.I.mark_sexp,
21 ['<M-C-h>'] = H.I.mark_defun,
22 ['<M-h>'] = H.I.mark_defun,
23 ['<M-=>'] = H.I.expand_region,
24 -- Structured deletions:
25 ['<M-C-k>'] = H.I.kill_sexp,
26 ['<C-w>'] = H.I.backward_kill_sexp, -- kill-region, if there is a selection
27 ['<M-k>'] = H.I.kill_sentence,
28 ['<C-x><Backspace>'] = H.I.backward_kill_sentence,
29 ['<M-d>'] = H.I.forward_kill_word,
30 ['<M-Backspace>'] = H.I.backward_kill_word,
31 ['<C-k>'] = H.I.kill,
32 ['<M-0><C-k>'] = H.I.backward_kill_line,
33 -- Structured operators:
34 ['<M-S>'] = B.O.split_sexp,
35 ['<M-J>'] = B.O.join_sexps,
36 ['<C-Left>'] = B.O.forward_barf,
37 ['<C-Right>'] = B.O.forward_slurp,
38 ['<M-C-Right>'] = B.O.backward_barf,
39 ['<M-C-Left>'] = B.O.backward_slurp,
40 ['<M-r>'] = B.O.raise_sexp,
41 ['<M-?>'] = B.O.convolute_sexp,
42 ['<M-s>'] = B.O.splice_sexp,
43 ['<M-(>'] = B.O.wrap_round,
44 ['<M-">'] = B.O.meta_doublequote,
45 ['<M-;>'] = B.O.wrap_comment,
46 ['<M-C-t>'] = B.O.transpose_sexps,
47 ['<M-t>'] = B.O.transpose_words,
48 ['<M-Down>'] = H.I.splice_sexp_killing_forward,
49 ['<M-Up>'] = H.I.splice_sexp_killing_backward,
50 -- General operators:
51 ['<C-d>'] = H.I.forward_delete,
52 ['<Delete>'] = H.I.forward_delete,
53 ['<Backspace>'] = H.I.backward_delete,
54 ['<M-w>'] = B.O.yank, -- kill-ring-save
55 ['<C-y>'] = B.O.put_after, -- yank
56 ['<C- >'] = H.I.set_mark_command,
57 ['<C-x><C-x>'] = H.I.exchange_point_and_mark,
58 ['<C-_>'] = H.A.undo,
59 ['<C-g><C-_>'] = H.A.redo,
60 ['<M-q>'] = B.O.format, -- reindent-defun
61 ['<C-t>'] = B.O.transpose_chars,
62 ['<M-Enter>'] = B.O.open_next_line,
63 ['<M-)>'] = B.O.close_and_newline,
64 ['<M-]>'] = B.O.close_and_newline,
65 ['<M-}>'] = B.O.close_and_newline,
66 ['<C-x><C-e>'] = H.I.eval_last_sexp,
67 ['<M-C-x>'] = B.O.eval_defun,
69 raw = function(win)
70 local vis = vis
71 local function local_set_key(key, binding)
72 win:map(vis.modes.INSERT, key, binding)
73 end
74 local_set_key('<C-f>', '<vis-motion-char-next>')
75 local_set_key('<C-b>', '<vis-motion-char-prev>')
76 local_set_key('<C-n>', '<vis-motion-line-down>') -- this disables completion
77 local_set_key('<C-p>', '<vis-motion-line-up>')
78 local_set_key('<C-e>', '<vis-motion-line-end>')
79 local_set_key('<C-a>', '<vis-motion-line-begin>')
80 local_set_key('<M-m>', '<vis-motion-line-start>')
81 local_set_key('<M->>', '<vis-motion-line-last><vis-append-line-end>')
82 local_set_key('<M-<>', '<vis-motion-line-first>')
83 local_set_key('<C-x><C-s>', '<vis-prompt-show>:w<Enter><vis-mode-insert>') -- XXX: upstream vis can't handle C-s and C-q
84 local_set_key('<C-x><C-c>', function() vis:exit(0) end)
85 end
87 end