mirror of
https://github.com/NotAShelf/nvf.git
synced 2024-12-03 09:57:17 +00:00
Compare commits
34 commits
78203a1bce
...
43e6e673af
Author | SHA1 | Date | |
---|---|---|---|
|
43e6e673af | ||
|
1b82b13dc7 | ||
|
f5850432a8 | ||
|
f672689023 | ||
|
669088244d | ||
|
769e07e7cc | ||
|
0b9f69a20f | ||
|
9dd2a11e4d | ||
|
09e83a6cec | ||
|
c027a87527 | ||
|
abd76db843 | ||
|
85c0839105 | ||
|
6fc691a7c3 | ||
|
14bc100a5e | ||
|
290de58ae9 | ||
|
1ee0a513cc | ||
|
346f536737 | ||
|
ee5a157894 | ||
|
805dd05b39 | ||
|
d3e39d10b0 | ||
|
14061c6db5 | ||
|
5c105b8182 | ||
|
b10c525ffe | ||
|
9b4332ed77 | ||
|
f632fa1a92 | ||
|
0faf4b923b | ||
|
205582135d | ||
|
1988203073 | ||
|
d1d91ff8a5 | ||
|
b552b33077 | ||
|
920e0bad5e | ||
|
f3ce59ed40 | ||
|
50efc3b557 | ||
|
2fc7dc798b |
4 changed files with 123 additions and 71 deletions
|
@ -4,7 +4,7 @@ Release notes for release 0.7
|
||||||
|
|
||||||
## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7}
|
## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7}
|
||||||
|
|
||||||
### `vim.configRC` removed
|
### `vim.configRC` removed {#sec-vim-configrc-removed}
|
||||||
|
|
||||||
In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the
|
In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the
|
||||||
top-level DAG, and thereby making the entire configuration Lua based. This
|
top-level DAG, and thereby making the entire configuration Lua based. This
|
||||||
|
@ -26,7 +26,7 @@ making good use of its extensive Lua API. Additionally, Vimscript is slow and
|
||||||
brings unnecessary performance overhead while working with different
|
brings unnecessary performance overhead while working with different
|
||||||
configuration formats.
|
configuration formats.
|
||||||
|
|
||||||
### `vim.maps` rewrite
|
### `vim.maps` rewrite {#sec-vim-maps-rewrite}
|
||||||
|
|
||||||
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new
|
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new
|
||||||
`mode` option has mode has been introduced. It can be either a string, or a list
|
`mode` option has mode has been introduced. It can be either a string, or a list
|
||||||
|
|
|
@ -5,29 +5,30 @@
|
||||||
inherit (lib.attrsets) isAttrs mapAttrs;
|
inherit (lib.attrsets) isAttrs mapAttrs;
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.generators) mkLuaInline;
|
||||||
|
|
||||||
mkLuaBinding = mode: key: action: desc:
|
binds = rec {
|
||||||
|
mkLuaBinding = key: action: desc:
|
||||||
mkIf (key != null) {
|
mkIf (key != null) {
|
||||||
${key} = {
|
"${key}" = {
|
||||||
inherit mode action desc;
|
inherit action desc;
|
||||||
lua = true;
|
lua = true;
|
||||||
silent = true;
|
silent = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
mkExprBinding = mode: key: action: desc:
|
mkExprBinding = key: action: desc:
|
||||||
mkIf (key != null) {
|
mkIf (key != null) {
|
||||||
${key} = {
|
"${key}" = {
|
||||||
inherit mode action desc;
|
inherit action desc;
|
||||||
lua = true;
|
lua = true;
|
||||||
silent = true;
|
silent = true;
|
||||||
expr = true;
|
expr = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
mkBinding = mode: key: action: desc:
|
mkBinding = key: action: desc:
|
||||||
mkIf (key != null) {
|
mkIf (key != null) {
|
||||||
${key} = {
|
"${key}" = {
|
||||||
inherit mode action desc;
|
inherit action desc;
|
||||||
silent = true;
|
silent = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -38,34 +39,6 @@
|
||||||
inherit default description;
|
inherit default description;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Utility function that takes two attrsets:
|
|
||||||
# { someKey = "some_value" } and
|
|
||||||
# { someKey = { description = "Some Description"; }; }
|
|
||||||
# and merges them into
|
|
||||||
# { someKey = { value = "some_value"; description = "Some Description"; }; }
|
|
||||||
addDescriptionsToMappings = actualMappings: mappingDefinitions:
|
|
||||||
mapAttrs (name: value: let
|
|
||||||
isNested = isAttrs value;
|
|
||||||
returnedValue =
|
|
||||||
if isNested
|
|
||||||
then addDescriptionsToMappings actualMappings.${name} mappingDefinitions.${name}
|
|
||||||
else {
|
|
||||||
inherit value;
|
|
||||||
inherit (mappingDefinitions.${name}) description;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
returnedValue)
|
|
||||||
actualMappings;
|
|
||||||
|
|
||||||
mkSetBinding = mode: binding: action:
|
|
||||||
mkBinding mode binding.value action binding.description;
|
|
||||||
|
|
||||||
mkSetExprBinding = mode: binding: action:
|
|
||||||
mkExprBinding mode binding.value action binding.description;
|
|
||||||
|
|
||||||
mkSetLuaBinding = mode: binding: action:
|
|
||||||
mkLuaBinding mode binding.value action binding.description;
|
|
||||||
|
|
||||||
# Utility function that takes two attrsets:
|
# Utility function that takes two attrsets:
|
||||||
# { someKey = "some_value" } and
|
# { someKey = "some_value" } and
|
||||||
# { someKey = { description = "Some Description"; }; }
|
# { someKey = { description = "Some Description"; }; }
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkOption;
|
inherit (lib.options) mkOption;
|
||||||
inherit (lib.types) either str listOf attrsOf nullOr submodule;
|
inherit (lib.types) either str listOf attrsOf nullOr submodule bool;
|
||||||
inherit (lib.nvim.config) mkBool;
|
inherit (lib.nvim.config) mkBool;
|
||||||
|
|
||||||
mapType = submodule {
|
mapConfigOptions = {
|
||||||
mode = mkOption {
|
|
||||||
type = either str (listOf str);
|
|
||||||
description = ''
|
|
||||||
The short-name of the mode to set the keymapping for. Passing an empty string is the equivalent of `:map`.
|
|
||||||
|
|
||||||
See `:help map-modes` for a list of modes.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
desc = mkOption {
|
desc = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -34,10 +26,69 @@
|
||||||
unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
|
unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
|
||||||
noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
|
noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mapType = submodule {
|
||||||
|
options =
|
||||||
|
mapConfigOptions
|
||||||
|
// {
|
||||||
|
mode = mkOption {
|
||||||
|
type = either str (listOf str);
|
||||||
|
description = ''
|
||||||
|
The short-name of the mode to set the keymapping for. Passing an empty string is the equivalent of `:map`.
|
||||||
|
|
||||||
|
See `:help map-modes` for a list of modes.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# legacy stuff
|
||||||
|
mapOption = submodule {
|
||||||
|
options =
|
||||||
|
mapConfigOptions
|
||||||
|
// {
|
||||||
|
action = mkOption {
|
||||||
|
type = str;
|
||||||
|
description = "The action to execute.";
|
||||||
|
};
|
||||||
|
|
||||||
|
lua = mkOption {
|
||||||
|
type = bool;
|
||||||
|
description = ''
|
||||||
|
If true, `action` is considered to be lua code.
|
||||||
|
Thus, it will not be wrapped in `""`.
|
||||||
|
'';
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mapOptions = mode:
|
||||||
|
mkOption {
|
||||||
|
description = "Mappings for ${mode} mode";
|
||||||
|
type = attrsOf mapOption;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
in {
|
in {
|
||||||
options.vim = {
|
options.vim = {
|
||||||
maps = mkOption {
|
maps = mkOption {
|
||||||
type = attrsOf mapType;
|
type = submodule {
|
||||||
|
freeformType = attrsOf mapType;
|
||||||
|
options = {
|
||||||
|
normal = mapOptions "normal";
|
||||||
|
insert = mapOptions "insert";
|
||||||
|
select = mapOptions "select";
|
||||||
|
visual = mapOptions "visual and select";
|
||||||
|
terminal = mapOptions "terminal";
|
||||||
|
normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')";
|
||||||
|
|
||||||
|
visualOnly = mapOptions "visual only";
|
||||||
|
operator = mapOptions "operator-pending";
|
||||||
|
insertCommand = mapOptions "insert and command-line";
|
||||||
|
lang = mapOptions "insert, command-line and lang-arg";
|
||||||
|
command = mapOptions "command-line";
|
||||||
|
};
|
||||||
|
};
|
||||||
default = {};
|
default = {};
|
||||||
description = "Custom keybindings.";
|
description = "Custom keybindings.";
|
||||||
example = ''
|
example = ''
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) map mapAttrs filter;
|
inherit (builtins) map mapAttrs filter removeAttrs attrNames;
|
||||||
inherit (lib.attrsets) mapAttrsToList filterAttrs attrsToList;
|
inherit (lib.attrsets) mapAttrsToList filterAttrs attrsToList;
|
||||||
inherit (lib.strings) concatLines concatMapStringsSep optionalString;
|
inherit (lib.strings) concatLines concatMapStringsSep optionalString;
|
||||||
inherit (lib.trivial) showWarnings;
|
inherit (lib.trivial) showWarnings;
|
||||||
|
@ -45,7 +45,35 @@ in {
|
||||||
value,
|
value,
|
||||||
}: "vim.keymap.set(${toLuaObject value.mode}, ${toLuaObject name}, ${toLuaObject (getAction value)}, ${toLuaObject (getOpts value)})";
|
}: "vim.keymap.set(${toLuaObject value.mode}, ${toLuaObject name}, ${toLuaObject (getAction value)}, ${toLuaObject (getOpts value)})";
|
||||||
|
|
||||||
keymaps = concatLines (map toLuaKeymap (attrsToList (filterNonNull config.maps)));
|
namedModes = {
|
||||||
|
"normal" = ["n"];
|
||||||
|
"insert" = ["i"];
|
||||||
|
"select" = ["s"];
|
||||||
|
"visual" = ["v"];
|
||||||
|
"terminal" = ["t"];
|
||||||
|
"normalVisualOp" = ["n" "v" "o"];
|
||||||
|
"visualOnly" = ["n" "x"];
|
||||||
|
"operator" = ["o"];
|
||||||
|
"insertCommand" = ["i" "c"];
|
||||||
|
"lang" = ["l"];
|
||||||
|
"command" = ["c"];
|
||||||
|
};
|
||||||
|
|
||||||
|
maps =
|
||||||
|
removeAttrs cfg.maps (attrNames namedModes)
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.normal;}) cfg.maps.normal
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.insert;}) cfg.maps.insert
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.select;}) cfg.maps.select
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.visual;}) cfg.maps.visual
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.terminal;}) cfg.maps.terminal
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.normalVisualOp;}) cfg.maps.normalVisualOp
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.visualOnly;}) cfg.maps.visualOnly
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.operator;}) cfg.maps.operator
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.insertCommand;}) cfg.maps.insertCommand
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.lang;}) cfg.maps.lang
|
||||||
|
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.command;}) cfg.maps.command;
|
||||||
|
|
||||||
|
keymaps = concatLines (map toLuaKeymap (attrsToList (filterNonNull maps)));
|
||||||
in {
|
in {
|
||||||
vim = {
|
vim = {
|
||||||
luaConfigRC = {
|
luaConfigRC = {
|
||||||
|
|
Loading…
Reference in a new issue