Skip to content

Commit 7014fda

Browse files
committed
feat: Configurable keymaps. (closes #9)
1 parent efd53de commit 7014fda

File tree

4 files changed

+85
-22
lines changed

4 files changed

+85
-22
lines changed

README.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ or vertically respectively.
1818

1919
## Requirements
2020

21-
- Neovim >=0.5.0
21+
- Neovim 0.5.0
2222

2323
## Installation
2424

@@ -49,6 +49,27 @@ require("winshift").setup({
4949
cursorcolumn = false,
5050
colorcolumn = "",
5151
},
52+
keymaps = {
53+
disable_defaults = false, -- Disable the default keymaps
54+
win_move_mode = {
55+
["h"] = "left",
56+
["j"] = "down",
57+
["k"] = "up",
58+
["l"] = "right",
59+
["H"] = "far_left",
60+
["J"] = "far_down",
61+
["K"] = "far_up",
62+
["L"] = "far_right",
63+
["<left>"] = "left",
64+
["<down>"] = "down",
65+
["<up>"] = "up",
66+
["<right>"] = "right",
67+
["<S-left>"] = "far_left",
68+
["<S-down>"] = "far_down",
69+
["<S-up>"] = "far_up",
70+
["<S-right>"] = "far_right",
71+
},
72+
},
5273
-- The window picker is used to select a window while swapping windows with
5374
-- ':WinShift swap'.
5475
-- A string of chars used as identifiers by the window picker.

doc/winshift.txt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,28 @@ Example configuration with default settings:
3434
cursorline = false,
3535
cursorcolumn = false,
3636
colorcolumn = "",
37-
}
37+
},
38+
keymaps = {
39+
disable_defaults = false, -- Disable the default keymaps
40+
win_move_mode = {
41+
["h"] = "left",
42+
["j"] = "down",
43+
["k"] = "up",
44+
["l"] = "right",
45+
["H"] = "far_left",
46+
["J"] = "far_down",
47+
["K"] = "far_up",
48+
["L"] = "far_right",
49+
["<left>"] = "left",
50+
["<down>"] = "down",
51+
["<up>"] = "up",
52+
["<right>"] = "right",
53+
["<S-left>"] = "far_left",
54+
["<S-down>"] = "far_down",
55+
["<S-up>"] = "far_up",
56+
["<S-right>"] = "far_right",
57+
},
58+
},
3859
})
3960
<
4061

lua/winshift/config.lua

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,27 @@ M.defaults = {
1111
cursorcolumn = false,
1212
colorcolumn = "",
1313
},
14+
keymaps = {
15+
disable_defaults = false,
16+
win_move_mode = {
17+
["h"] = "left",
18+
["j"] = "down",
19+
["k"] = "up",
20+
["l"] = "right",
21+
["H"] = "far_left",
22+
["J"] = "far_down",
23+
["K"] = "far_up",
24+
["L"] = "far_right",
25+
["<left>"] = "left",
26+
["<down>"] = "down",
27+
["<up>"] = "up",
28+
["<right>"] = "right",
29+
["<S-left>"] = "far_left",
30+
["<S-down>"] = "far_down",
31+
["<S-up>"] = "far_up",
32+
["<S-right>"] = "far_right",
33+
},
34+
},
1435
window_picker_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
1536
window_picker_ignore = {
1637
filetype = {},
@@ -22,6 +43,16 @@ M.defaults = {
2243

2344
M._config = M.defaults
2445

46+
function M.get_key_dir_map()
47+
local t = {}
48+
49+
for lhs, rhs in pairs(M._config.keymaps.win_move_mode) do
50+
t[utils.raw_key(lhs)] = rhs
51+
end
52+
53+
return t
54+
end
55+
2556
function M.get_config()
2657
return M._config
2758
end
@@ -34,6 +65,14 @@ function M.setup(user_config)
3465

3566
M._config.moving_win_options = user_config.moving_win_options or M._config.moving_win_options
3667

68+
if M._config.keymaps.disable_defaults then
69+
for name, _ in pairs(M._config.keymaps) do
70+
if name ~= "disable_defaults" then
71+
M._config.keymaps[name] = vim.tbl_get(user_config, "keymaps", name) or {}
72+
end
73+
end
74+
end
75+
3776
require("winshift.colors").setup()
3877
end
3978

lua/winshift/lib.lua

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,6 @@ local win_option_store = {}
1717
---@alias VDirection '"up"'|'"down"'
1818
---@alias Direction HDirection|VDirection|'"far_left"'|'"far_right"'|'"far_up"'|'"far_down"'
1919

20-
M.key_dir_map = {
21-
h = "left",
22-
j = "down",
23-
k = "up",
24-
l = "right",
25-
H = "far_left",
26-
J = "far_down",
27-
K = "far_up",
28-
L = "far_right",
29-
[utils.raw_key("<left>")] = "left",
30-
[utils.raw_key("<down>")] = "down",
31-
[utils.raw_key("<up>")] = "up",
32-
[utils.raw_key("<right>")] = "right",
33-
[utils.raw_key("<S-left>")] = "far_left",
34-
[utils.raw_key("<S-down>")] = "far_down",
35-
[utils.raw_key("<S-up>")] = "far_up",
36-
[utils.raw_key("<S-right>")] = "far_right",
37-
}
38-
3920
M.dir_move_map = {
4021
far_left = "H",
4122
far_down = "J",
@@ -540,6 +521,7 @@ function M.start_move_mode()
540521
local cur_win = api.nvim_get_current_win()
541522
local lasthl = vim.wo[cur_win].winhl
542523
local conf = config.get_config()
524+
local key_dir_map = config.get_key_dir_map()
543525
M.save_win_options(cur_win)
544526

545527
if conf.highlight_moving_win then
@@ -552,7 +534,7 @@ function M.start_move_mode()
552534
while not (char == "q" or raw == esc) do
553535
api.nvim_echo({ { "-- WIN MOVE MODE -- press 'q' to exit", "ModeMsg" } }, false, {})
554536
char, raw = utils.input_char(nil, { clear_prompt = false, allow_non_ascii = true })
555-
local dir = M.key_dir_map[char or raw]
537+
local dir = key_dir_map[char or raw]
556538
if dir then
557539
M.move_win(cur_win, dir)
558540
end

0 commit comments

Comments
 (0)