(import-macros {: foreach : foreachMulti} :macros)
(local map vim.keymap.set)
(local submode (require :submode))
(tset vim :g :mapleader " ")
(fn smart-gf []
(let [fpath (vim.fn.expand "<cfile>")]
(if (not= "https://" (fpath:sub 1 8))
(vim.cmd.normal "gF")
(do
(vim.cmd.term (.. "w3m " fpath))
(vim.cmd.startinsert)))))
(fn smart-i []
(if (: (vim.fn.getline ".") :match "^ *$")
(vim.api.nvim_input "\"_cc")
(vim.cmd.startinsert)))
(foreachMulti (partial map :n)
[[:<BS> :<c-b>]
[:<delete> :<c-f>]
[:<c-s-e> :5<c-e>]
[:<c-s-y> :5<c-y>]
[:i smart-i]
[:S :c^]
[:Q :ZZ { :noremap true }]
[:ZZ #(do (vim.cmd.mksession (.. vim.env.HOME "/.cache/nvim/session.nvim")) (vim.cmd.wqa))]
[:gk :25k]
[:gj :25j]
[:gf smart-gf]
[:gb vim.cmd.bnext]
[:gB vim.cmd.bprev]
[:^n #(tset vim :o :number (not vim.o.number))]
[:^r #(tset vim :o :relativenumber (not vim.o.relativenumber))]
[:^s #(tset vim :o :spell (not vim.o.spell))]
[:<c-z> :<cmd>w<CR><c-z>]
[:zS vim.show_pos]
])
(foreachMulti (partial map [:n :v])
[["q;" :q:]
])
(foreachMulti (partial map [:n :v :o])
[[:K :5k]
[:J :5j]
[:gl :$l]
[:gh :^]
["]b" "])"]
["[b" "[("]
["]B" "]}"]
["[B" "[{"]
])
(foreachMulti (partial map "i")
[[:<esc> :<right><esc>]
])
(foreachMulti (partial map "v")
[[:v :<c-v>]
[:aa :VggoG]
])
(foreachMulti (partial map "o")
[[:. :i>]
[:iq "i'"]
[:iQ "i\""]
[:aq "a'"]
[:aQ "a\""]
[:i<space> :iW]
[:a<space> :aW]
])
(foreachMulti (partial map "t")
[[:<c-\\> :<c-\\><c-n>]
])
(submode.set-submode-keymap "n" "g"
[{ :key "t" }
{ :key "T" }
{ :key "e" }
{ :key "E" }
{ :key "J" }
])
(submode.set-submode-keymap "n" "d"
[{ :key "h" }
{ :key "l" }
])
(submode.set-submode-keymap "n" "<c-w>"
[{ :key ">" }
{ :key "<" }
{ :key "+" }
{ :key "-" }
{ :key "h" }
{ :key "j" }
{ :key "k" }
{ :key "l" }
])
(submode.set-submode-keymap "n" "z"
[{ :key "<space>" :run-when { :entering "<c-f>" :repeating "<c-f>" } }
{ :key "b" :run-when { :entering "<c-b>" :repeating "<c-b>" } }
])
(submode.set-submode-keymap "n" "*"
[{ :key "*" :run-when { :entering "#*" :repeating "*" } }
{ :key "#" :run-when { :entering "*#" :repeating "#" } }
])
(foreach (partial submode.acceleration-key :n)
[:h
:j
:k
:l
])
(fn safe-cabbr [lhs rhs]
(vim.cmd (.. "cabbrev <expr>" lhs " (getcmdtype() ==# ':' && getcmdline() ==# '" lhs "') ? '" rhs "' : '" lhs "'")))
(safe-cabbr "r" "lua require")
(safe-cabbr "l" "lua")
nil