From feedd30c4d821b3dd4bafde5ad083f5f7a6155f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Fr=C3=B3es=20Franco?= Date: Sun, 31 May 2026 19:18:06 +0000 Subject: [PATCH] feat(keymaps): configurable map_prefix for the wiki command family (P2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror vimwiki's g:vimwiki_map_prefix. The whole w* family was hardcoded across the map layer; it is now built from a configurable prefix: - Neovim: `map_prefix` setup() option (default 'w'), read by lua/nuwiki/keymaps.lua (buffer-local) and lua/nuwiki/init.lua (global entry points). - Vim: g:nuwiki_map_prefix, applied via :exe in plugin/nuwiki.vim (global) and ftplugin/vimwiki.vim (buffer-local). Setting a custom prefix relocates {w,t,s,i,n,d,r,c,h,hh,ha} and {w,y,t,m,i}, leaving nothing under the old w*. Non-prefix maps (, gl*, headers, …) are untouched. Tests: new test-keymaps-vim-prefix.vim harness (21 cases, wired into test-keymaps-vim.sh) + map_prefix.relocates_wiki_family in test-keymaps.lua. Docs: README, doc/nuwiki.txt, lua config comment, vimwiki-gap.md ticked. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 2 + development/tests/test-keymaps-vim-prefix.vim | 65 +++++++++++++++++++ development/tests/test-keymaps-vim.sh | 36 +++++++++- development/tests/test-keymaps.lua | 30 +++++++++ development/vimwiki-gap.md | 14 +++- doc/nuwiki.txt | 16 +++++ ftplugin/vimwiki.vim | 40 +++++++----- lua/nuwiki/config.lua | 5 ++ lua/nuwiki/init.lua | 18 ++--- lua/nuwiki/keymaps.lua | 41 +++++++----- plugin/nuwiki.vim | 22 ++++--- 11 files changed, 234 insertions(+), 55 deletions(-) create mode 100644 development/tests/test-keymaps-vim-prefix.vim diff --git a/README.md b/README.md index 373e454..84096dc 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,7 @@ let g:nuwiki_file_extension = '.wiki' let g:nuwiki_log_level = 'warn' let g:nuwiki_link_severity = 'warn' " 'off'|'hint'|'warn'|'error' let g:nuwiki_no_default_mappings = 0 " set to 1 to skip the keymap layer +let g:nuwiki_map_prefix = 'w' " wiki command prefix let g:nuwiki_no_folding = 0 " set to 1 to skip foldexpr setup let g:nuwiki_mouse_mappings = 0 " set to 1 to enable mouse maps " Drop individual keymap subgroups (mirror the Lua `mappings.` toggles): @@ -297,6 +298,7 @@ let g:nuwiki_mouse_mappings = 0 " set to 1 to enable mouse maps | `file_extension` | string | `'.wiki'` | any extension, leading `.` | | `syntax` | string | `'vimwiki'` | `'vimwiki'` (`'markdown'` planned) | | `log_level` | string | `'warn'` | `'error'` \| `'warn'` \| `'info'` \| `'debug'` | +| `map_prefix` | string | `'w'` | prefix for the wiki command family (`w`, `t`, `w`, …); mirrors vimwiki's `g:vimwiki_map_prefix`. Vim users set `g:nuwiki_map_prefix` | | `folding` | string | `'lsp'` | `'lsp'` \| `'expr'` \| `'off'` | | `wikis` | list of tables | `nil` | per-wiki tables (see below); wins over the single-wiki shorthand | | `mappings` | table | all on | keymap subgroups (see below) | diff --git a/development/tests/test-keymaps-vim-prefix.vim b/development/tests/test-keymaps-vim-prefix.vim new file mode 100644 index 0000000..3a8a08f --- /dev/null +++ b/development/tests/test-keymaps-vim-prefix.vim @@ -0,0 +1,65 @@ +" development/tests/test-keymaps-vim-prefix.vim — driven by +" development/tests/test-keymaps-vim.sh. +" +" Custom-prefix regression. The shell driver sets +" `g:nuwiki_map_prefix = 'n'` *before* the ftplugin loads, so this +" harness asserts the whole wiki command family relocates under `n*` +" while nothing remains under the default `w*`. Mirrors vimwiki's +" `g:vimwiki_map_prefix` and the Lua-side `map_prefix` option. + +let s:results = [] +let s:pass = 0 +let s:fail = 0 +let s:out = $NUWIKI_KEYMAP_RESULTS + +function! s:record(ok, name, detail) abort + let l:line = (a:ok ? 'PASS' : 'FAIL') . ' ' . a:name + if a:detail !=# '' + let l:line .= ' — ' . a:detail + endif + call add(s:results, l:line) + if a:ok + let s:pass += 1 + else + let s:fail += 1 + endif +endfunction + +function! s:has_map(lhs, mode) abort + let l:d = maparg(a:lhs, a:mode, 0, 1) + return !empty(l:d) && get(l:d, 'buffer', 0) +endfunction + +" Every * mapping must now live under n (prefix = n). +let s:relocated = [ + \ ['nw', 'n'], ['nt', 'n'], ['ns', 'n'], ['ni', 'n'], + \ ['nw', 'n'], ['ny', 'n'], ['nt', 'n'], + \ ['nm', 'n'], ['ni', 'n'], + \ ['nn', 'n'], ['nd', 'n'], ['nr', 'n'], ['nc', 'n'], + \ ['nh', 'n'], ['nhh', 'n'], ['nha', 'n'], + \ ] +for s:e in s:relocated + let s:ok = s:has_map(s:e[0], s:e[1]) + call s:record(s:ok ? 1 : 0, 'prefix.relocated.' . s:e[1] . '.' . s:e[0], + \ s:ok ? '' : s:e[0] . ' not bound under custom prefix') +endfor + +" The default w* family must be GONE (relocated, not duplicated). +let s:gone = [ + \ ['ww', 'n'], ['wr', 'n'], ['wh', 'n'], + \ ['ww', 'n'], + \ ] +for s:e in s:gone + let s:ok = !s:has_map(s:e[0], s:e[1]) + call s:record(s:ok ? 1 : 0, 'prefix.default_gone.' . s:e[1] . '.' . s:e[0], + \ s:ok ? '' : s:e[0] . ' still mapped despite custom prefix') +endfor + +" Non-prefix maps (links group) are unaffected by the prefix change. +let s:cr = s:has_map('', 'n') +call s:record(s:cr ? 1 : 0, 'prefix.cr_unaffected', s:cr ? '' : ' lost') + +call add(s:results, '') +call add(s:results, printf('SUMMARY: %d passed, %d failed', s:pass, s:fail)) +call writefile(s:results, s:out) +execute (s:fail == 0 ? 'qall!' : 'cquit!') diff --git a/development/tests/test-keymaps-vim.sh b/development/tests/test-keymaps-vim.sh index ec8f5da..2e12f69 100755 --- a/development/tests/test-keymaps-vim.sh +++ b/development/tests/test-keymaps-vim.sh @@ -96,7 +96,41 @@ fi cat "$RESULTS_OPTOUT" -if grep -qE '^SUMMARY: [0-9]+ passed, 0 failed' "$RESULTS_OPTOUT"; then +if ! grep -qE '^SUMMARY: [0-9]+ passed, 0 failed' "$RESULTS_OPTOUT"; then + exit 1 +fi + +# ===== Custom map_prefix run ===== +# Fresh Vim instance with g:nuwiki_map_prefix set *before* the ftplugin +# loads, so we can assert the whole wiki command family relocates under the +# custom prefix and nothing remains under the default w*. + +VIMRC_PREFIX="$TMP/vimrc-prefix" +cat > "$VIMRC_PREFIX" <"$TMP/vim-prefix.log" 2>&1 || true + +if [[ ! -f "$RESULTS_PREFIX" ]]; then + echo 'keymap custom-prefix harness produced no output' >&2 + echo '--- vim log ---' >&2 + cat "$TMP/vim-prefix.log" >&2 || true + exit 1 +fi + +cat "$RESULTS_PREFIX" + +if grep -qE '^SUMMARY: [0-9]+ passed, 0 failed' "$RESULTS_PREFIX"; then exit 0 fi exit 1 diff --git a/development/tests/test-keymaps.lua b/development/tests/test-keymaps.lua index 03de89c..1d3cb00 100644 --- a/development/tests/test-keymaps.lua +++ b/development/tests/test-keymaps.lua @@ -820,6 +820,36 @@ vim.defer_fn(function() end end) + -- ===== Configurable map_prefix (vimwiki g:vimwiki_map_prefix) ===== + -- Overriding map_prefix must relocate the whole * family. We attach + -- to a throwaway scratch buffer with a custom prefix and assert the new + -- bindings exist there while the default w* ones do not. + tobj_case('map_prefix.relocates_wiki_family', function() + local config = require('nuwiki.config') + local keymaps = require('nuwiki.keymaps') + local saved = config.options.map_prefix + config.options.map_prefix = 'n' + local buf = vim.api.nvim_create_buf(false, true) + vim.api.nvim_set_current_buf(buf) + local ok, err = pcall(function() + keymaps.attach(buf, { enabled = true, wiki_prefix = true, links = true, html_export = true }) + local function bmap(lhs) + local d = vim.fn.maparg(lhs, 'n', false, true) + return not vim.tbl_isempty(d) and d.buffer == 1 + end + for _, lhs in ipairs({ + 'nw', 'nt', 'nw', 'nr', 'nh', 'nha', + }) do + if not bmap(lhs) then error('relocated map missing: ' .. lhs) end + end + if bmap('ww') then error('ww still bound under custom prefix') end + end) + -- Always restore global state so later cases see the default prefix. + config.options.map_prefix = saved + vim.api.nvim_buf_delete(buf, { force = true }) + if not ok then error(err) end + end) + -- ===== Wiki picker (config-driven, no LSP) ===== -- The picker must build its list from config so it works from any buffer -- before the server attaches. diff --git a/development/vimwiki-gap.md b/development/vimwiki-gap.md index 583a180..709489a 100644 --- a/development/vimwiki-gap.md +++ b/development/vimwiki-gap.md @@ -134,8 +134,18 @@ fix site. `write_page_invokes_custom_wiki2html_converter`, `write_rss_uses_base_url_for_public_links` (`html_export.rs`), config round-trip + defaults (`index_and_config.rs`). -- [ ] **`map_prefix`** — `w` hardcoded across the map layer. - _Fix:_ `plugin/nuwiki.vim`, `lua/nuwiki/keymaps.lua`, `ftplugin/vimwiki.vim`. +- [x] **`map_prefix`** — `w` was hardcoded across the map layer. + _Fix:_ mirror vimwiki's `g:vimwiki_map_prefix` with a configurable prefix + (Neovim `map_prefix` setup option, default `'w'`; Vim + `g:nuwiki_map_prefix`). The whole wiki command family is now built from the + prefix — both entry-point globals (`lua/nuwiki/init.lua`, + `plugin/nuwiki.vim`, via `:exe`) and buffer-local maps + (`lua/nuwiki/keymaps.lua`, `ftplugin/vimwiki.vim`). Setting a custom prefix + relocates `{w,t,s,i,n,d,r,c,h,hh,ha}` and `{w,y,t,m, + i}` and leaves nothing under the old `w*`. Tests: new + `test-keymaps-vim-prefix.vim` harness (21 cases, driven by + `test-keymaps-vim.sh`) + `map_prefix.relocates_wiki_family` + (`test-keymaps.lua`). Docs: README, `doc/nuwiki.txt`, lua config comment. - [x] **`` badd-link** — was mouse-only (``) / command-only (`:VimwikiBaddLink`); upstream binds `` → `VimwikiBaddLink` (confirmed against upstream `ftplugin/vimwiki.vim`). _Fix:_ added normal-mode `` → diff --git a/doc/nuwiki.txt b/doc/nuwiki.txt index 2028ab9..488a743 100644 --- a/doc/nuwiki.txt +++ b/doc/nuwiki.txt @@ -103,6 +103,7 @@ default): > file_extension = '.wiki', syntax = 'vimwiki', log_level = 'warn', + map_prefix = 'w', }) @@ -132,6 +133,7 @@ plugin: > let g:nuwiki_wiki_root = '~/vimwiki' let g:nuwiki_file_extension = '.wiki' let g:nuwiki_log_level = 'warn' + let g:nuwiki_map_prefix = 'w' `log_level` warn `error` | `warn` | `info` | `debug`. Forwarded to the language server. + *nuwiki-config-map-prefix* +`map_prefix` 'w' + Prefix for the wiki command family (`w`, `t`, + `w`, …). Mirrors vimwiki's `g:vimwiki_map_prefix`. Vim + users set |g:nuwiki_map_prefix| instead. + *nuwiki-config-folding* `folding` 'lsp' `lsp` uses the server's `foldingRange` provider (Neovim 0.11+ wires @@ -253,6 +261,14 @@ Vim-specific globals ~ `html_export` `wh`, `whh`, `wha` `text_objects` `ah`, `ih`, `al`, `il`, `a\`, `i\`, `ac`, `ic` + *g:nuwiki_map_prefix* +`g:nuwiki_map_prefix` `'w'` + Prefix for the wiki command family — both the global entry-point maps + (`w`, `t`, `s`, `i`, `{w,y, + t,m,i}`) and the buffer-local ones (`{n,d,r,c,h,hh,ha}`). Mirrors + vimwiki's `g:vimwiki_map_prefix`. Set it before the plugin loads. Neovim + users set the `map_prefix` option in `setup()` instead. + *g:nuwiki_no_folding* `g:nuwiki_no_folding` 0 When 1, the Vim path skips `foldexpr` / `foldmethod` setup. diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index 96b57e4..5161d60 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -198,17 +198,21 @@ if !has('nvim') " toggles in lua/nuwiki/keymaps.lua. if !get(g:, 'nuwiki_no_default_mappings', 0) + " Configurable wiki command prefix (vimwiki's g:vimwiki_map_prefix, + " default w). Built with :exe so a custom prefix relocates the + " whole * family below. + let s:prefix = get(g:, 'nuwiki_map_prefix', 'w') " Wiki prefix if !get(g:, 'nuwiki_no_wiki_prefix_mappings', 0) - nnoremap ww :call nuwiki#commands#wiki_index(0) - nnoremap wt :call nuwiki#commands#wiki_tab_index(0) - nnoremap ws :call nuwiki#commands#wiki_ui_select() - nnoremap wi :call nuwiki#commands#diary_index() - nnoremap ww :call nuwiki#commands#diary_today() - nnoremap wy :call nuwiki#commands#diary_yesterday() - nnoremap wt :call nuwiki#commands#diary_today_tab() - nnoremap wm :call nuwiki#commands#diary_tomorrow() - nnoremap wi :call nuwiki#commands#diary_generate_index() + exe 'nnoremap ' . s:prefix . 'w :call nuwiki#commands#wiki_index(0)' + exe 'nnoremap ' . s:prefix . 't :call nuwiki#commands#wiki_tab_index(0)' + exe 'nnoremap ' . s:prefix . 's :call nuwiki#commands#wiki_ui_select()' + exe 'nnoremap ' . s:prefix . 'i :call nuwiki#commands#diary_index()' + exe 'nnoremap ' . s:prefix . 'w :call nuwiki#commands#diary_today()' + exe 'nnoremap ' . s:prefix . 'y :call nuwiki#commands#diary_yesterday()' + exe 'nnoremap ' . s:prefix . 't :call nuwiki#commands#diary_today_tab()' + exe 'nnoremap ' . s:prefix . 'm :call nuwiki#commands#diary_tomorrow()' + exe 'nnoremap ' . s:prefix . 'i :call nuwiki#commands#diary_generate_index()' endif " Links @@ -224,11 +228,11 @@ if !has('nvim') nnoremap ?\[\[:nohlsearch nnoremap + :call nuwiki#commands#normalize_link() xnoremap + :call nuwiki#commands#normalize_link(1) - nnoremap wn :call nuwiki#commands#wiki_goto_page('') - nnoremap wd :call nuwiki#commands#delete_file() - nnoremap wr :call nuwiki#commands#rename_file() - nnoremap wc :call nuwiki#commands#colorize('') - xnoremap wc :call nuwiki#commands#colorize('', 2) + exe 'nnoremap ' . s:prefix . 'n :call nuwiki#commands#wiki_goto_page('''')' + exe 'nnoremap ' . s:prefix . 'd :call nuwiki#commands#delete_file()' + exe 'nnoremap ' . s:prefix . 'r :call nuwiki#commands#rename_file()' + exe 'nnoremap ' . s:prefix . 'c :call nuwiki#commands#colorize('''')' + exe 'xnoremap ' . s:prefix . 'c :call nuwiki#commands#colorize('''', 2)' endif " Diary nav @@ -308,9 +312,9 @@ if !has('nvim') " HTML export if !get(g:, 'nuwiki_no_html_export_mappings', 0) - nnoremap wh :call nuwiki#commands#export_current() - nnoremap whh :call nuwiki#commands#export_browse() - nnoremap wha :call nuwiki#commands#export_all() + exe 'nnoremap ' . s:prefix . 'h :call nuwiki#commands#export_current()' + exe 'nnoremap ' . s:prefix . 'hh :call nuwiki#commands#export_browse()' + exe 'nnoremap ' . s:prefix . 'ha :call nuwiki#commands#export_all()' endif " Mouse (opt-in via g:nuwiki_mouse_mappings = 1). @@ -373,6 +377,8 @@ if !has('nvim') xnoremap ic :call nuwiki#textobjects#table_column(1) onoremap ic :call nuwiki#textobjects#table_column(1) endif + + unlet s:prefix endif finish diff --git a/lua/nuwiki/config.lua b/lua/nuwiki/config.lua index 5dfcb97..6672ee5 100644 --- a/lua/nuwiki/config.lua +++ b/lua/nuwiki/config.lua @@ -13,6 +13,11 @@ M.defaults = { syntax = 'vimwiki', log_level = 'warn', + -- Prefix for the global/buffer wiki command family (`w`, + -- `t`, `w`, …). Mirrors vimwiki's + -- `g:vimwiki_map_prefix`. Vim users set `g:nuwiki_map_prefix` instead. + map_prefix = 'w', + -- Multi-wiki shape. Each entry honours every per-wiki key the -- server understands. Leave nil to fall through to the shorthand -- above. diff --git a/lua/nuwiki/init.lua b/lua/nuwiki/init.lua index b37a471..a4aee2f 100644 --- a/lua/nuwiki/init.lua +++ b/lua/nuwiki/init.lua @@ -48,15 +48,17 @@ local function _setup_global_mappings() if vim.g.nuwiki_no_default_mappings then return end local kmap = vim.keymap.set local function o(d) return { silent = true, desc = 'nuwiki: ' .. d } end + -- Same configurable prefix as the buffer-local maps (vimwiki map_prefix). + local p = config.options.map_prefix or 'w' - kmap('n', 'ww', function() _open(_wiki_index_path(0)) end, o('wiki index')) - kmap('n', 'wt', function() _open(_wiki_index_path(0), 'tabedit') end, o('wiki index (tab)')) - kmap('n', 'ws', function() require('nuwiki.commands').wiki_ui_select() end, o('pick wiki')) - kmap('n', 'wi', function() _open(_diary_path(nil)) end, o('diary index')) - kmap('n', 'ww', function() _open(_diary_path(0)) end, o('today diary')) - kmap('n', 'wy', function() _open(_diary_path(-1)) end, o('yesterday diary')) - kmap('n', 'wt', function() _open(_diary_path(1)) end, o('tomorrow diary')) - kmap('n', 'wi', function() require('nuwiki.commands').diary_generate_index() end, o('rebuild diary index')) + kmap('n', p .. 'w', function() _open(_wiki_index_path(0)) end, o('wiki index')) + kmap('n', p .. 't', function() _open(_wiki_index_path(0), 'tabedit') end, o('wiki index (tab)')) + kmap('n', p .. 's', function() require('nuwiki.commands').wiki_ui_select() end, o('pick wiki')) + kmap('n', p .. 'i', function() _open(_diary_path(nil)) end, o('diary index')) + kmap('n', p .. 'w', function() _open(_diary_path(0)) end, o('today diary')) + kmap('n', p .. 'y', function() _open(_diary_path(-1)) end, o('yesterday diary')) + kmap('n', p .. 't', function() _open(_diary_path(1)) end, o('tomorrow diary')) + kmap('n', p .. 'i', function() require('nuwiki.commands').diary_generate_index() end, o('rebuild diary index')) end -- Global wiki-picker commands so a wiki can be chosen from any buffer before diff --git a/lua/nuwiki/keymaps.lua b/lua/nuwiki/keymaps.lua index 7084ab5..fd72159 100644 --- a/lua/nuwiki/keymaps.lua +++ b/lua/nuwiki/keymaps.lua @@ -143,17 +143,22 @@ function M.attach(bufnr, mappings) return mappings[group] ~= false end - -- ===== Wiki prefix (`w*`) ===== + -- Configurable wiki command prefix (vimwiki's `g:vimwiki_map_prefix`). + -- Every `…` mapping below is built from this so users can relocate + -- the whole family by setting `map_prefix` in setup(). + local p = require('nuwiki.config').options.map_prefix or 'w' + + -- ===== Wiki prefix (`*`, default `w*`) ===== if on('wiki_prefix') then - map('n', 'ww', function() cmd.wiki_index(0) end, { desc = 'nuwiki: open wiki index' }, bufnr) - map('n', 'wt', function() cmd.wiki_tab_index(0) end, { desc = 'nuwiki: open wiki index (tab)' }, bufnr) - map('n', 'ws', cmd.wiki_ui_select, { desc = 'nuwiki: pick wiki' }, bufnr) - map('n', 'wi', cmd.diary_index, { desc = 'nuwiki: open diary index' }, bufnr) - map('n', 'ww', cmd.diary_today, { desc = 'nuwiki: today' }, bufnr) - map('n', 'wy', cmd.diary_yesterday, { desc = 'nuwiki: yesterday' }, bufnr) - map('n', 'wt', cmd.diary_today_tab, { desc = 'nuwiki: today in a new tab' }, bufnr) - map('n', 'wm', cmd.diary_tomorrow, { desc = 'nuwiki: tomorrow (vimwiki wm)' }, bufnr) - map('n', 'wi', cmd.diary_generate_index, { desc = 'nuwiki: rebuild diary index' }, bufnr) + map('n', p .. 'w', function() cmd.wiki_index(0) end, { desc = 'nuwiki: open wiki index' }, bufnr) + map('n', p .. 't', function() cmd.wiki_tab_index(0) end, { desc = 'nuwiki: open wiki index (tab)' }, bufnr) + map('n', p .. 's', cmd.wiki_ui_select, { desc = 'nuwiki: pick wiki' }, bufnr) + map('n', p .. 'i', cmd.diary_index, { desc = 'nuwiki: open diary index' }, bufnr) + map('n', p .. 'w', cmd.diary_today, { desc = 'nuwiki: today' }, bufnr) + map('n', p .. 'y', cmd.diary_yesterday, { desc = 'nuwiki: yesterday' }, bufnr) + map('n', p .. 't', cmd.diary_today_tab, { desc = 'nuwiki: today in a new tab' }, bufnr) + map('n', p .. 'm', cmd.diary_tomorrow, { desc = 'nuwiki: tomorrow (vimwiki m)' }, bufnr) + map('n', p .. 'i', cmd.diary_generate_index, { desc = 'nuwiki: rebuild diary index' }, bufnr) end -- ===== Links ===== @@ -176,12 +181,12 @@ function M.attach(bufnr, mappings) map('n', '+', cmd.normalize_link, { desc = 'nuwiki: wrap word as wikilink' }, bufnr) map('x', '+', function() cmd.normalize_link(true) end, { desc = 'nuwiki: wrap selection as wikilink' }, bufnr) - map('n', 'wn', cmd.wiki_goto_page, { desc = 'nuwiki: goto page' }, bufnr) - map('n', 'wd', cmd.delete_file, { desc = 'nuwiki: delete page' }, bufnr) - map('n', 'wr', cmd.rename_file, { desc = 'nuwiki: rename page' }, bufnr) - map('n', 'wc', function() cmd.colorize() end, + map('n', p .. 'n', cmd.wiki_goto_page, { desc = 'nuwiki: goto page' }, bufnr) + map('n', p .. 'd', cmd.delete_file, { desc = 'nuwiki: delete page' }, bufnr) + map('n', p .. 'r', cmd.rename_file, { desc = 'nuwiki: rename page' }, bufnr) + map('n', p .. 'c', function() cmd.colorize() end, { desc = 'nuwiki: wrap word in colour span' }, bufnr) - map('x', 'wc', function() cmd.colorize(nil, true) end, + map('x', p .. 'c', function() cmd.colorize(nil, true) end, { desc = 'nuwiki: wrap selection in colour span' }, bufnr) end @@ -301,9 +306,9 @@ function M.attach(bufnr, mappings) -- ===== HTML ===== if on('html_export') then - map('n', 'wh', cmd.export_current, { desc = 'nuwiki: export to HTML' }, bufnr) - map('n', 'whh', cmd.export_browse, { desc = 'nuwiki: export + browse' }, bufnr) - map('n', 'wha', cmd.export_all, { desc = 'nuwiki: export all' }, bufnr) + map('n', p .. 'h', cmd.export_current, { desc = 'nuwiki: export to HTML' }, bufnr) + map('n', p .. 'hh', cmd.export_browse, { desc = 'nuwiki: export + browse' }, bufnr) + map('n', p .. 'ha', cmd.export_all, { desc = 'nuwiki: export all' }, bufnr) end -- ===== Mouse (opt-in via `mappings.mouse = true`) ===== diff --git a/plugin/nuwiki.vim b/plugin/nuwiki.vim index 2b61496..b5b638c 100644 --- a/plugin/nuwiki.vim +++ b/plugin/nuwiki.vim @@ -51,13 +51,17 @@ command! -nargs=0 NuwikiUISelect call nuwiki#commands#wiki_ui_select() " Files are opened directly from config (no LSP required); the server " auto-starts via the FileType autocmd once the vimwiki buffer loads. if !get(g:, 'nuwiki_no_default_mappings', 0) - nnoremap ww :call nuwiki#commands#open_wiki_path(0) - nnoremap wt :call nuwiki#commands#open_wiki_path(1) - nnoremap ws :call nuwiki#commands#wiki_ui_select() - nnoremap wi :call nuwiki#commands#open_diary_index_path() - nnoremap ww :call nuwiki#commands#open_diary_path(0) - nnoremap wy :call nuwiki#commands#open_diary_path(-1) - nnoremap wt :tabnew:call nuwiki#commands#open_diary_path(0) - nnoremap wm :call nuwiki#commands#open_diary_path(1) - nnoremap wi :call nuwiki#commands#diary_generate_index() + " Prefix mirrors vimwiki's g:vimwiki_map_prefix (default w). Built + " with :exe so a custom prefix relocates the whole entry-point family. + let s:prefix = get(g:, 'nuwiki_map_prefix', 'w') + exe 'nnoremap ' . s:prefix . 'w :call nuwiki#commands#open_wiki_path(0)' + exe 'nnoremap ' . s:prefix . 't :call nuwiki#commands#open_wiki_path(1)' + exe 'nnoremap ' . s:prefix . 's :call nuwiki#commands#wiki_ui_select()' + exe 'nnoremap ' . s:prefix . 'i :call nuwiki#commands#open_diary_index_path()' + exe 'nnoremap ' . s:prefix . 'w :call nuwiki#commands#open_diary_path(0)' + exe 'nnoremap ' . s:prefix . 'y :call nuwiki#commands#open_diary_path(-1)' + exe 'nnoremap ' . s:prefix . 't :tabnew:call nuwiki#commands#open_diary_path(0)' + exe 'nnoremap ' . s:prefix . 'm :call nuwiki#commands#open_diary_path(1)' + exe 'nnoremap ' . s:prefix . 'i :call nuwiki#commands#diary_generate_index()' + unlet s:prefix endif