ex_getln: add secret charm

Opt in to this secret world using

    set wildchar=0
    " already the default, but remove if non-zero existing config:
    set wildcharm=0

now you can map 'wildmode' just like any mode:

    cnoremap <tab> <c-z>
    function! Spacey()
      return getcmdline()[-1:] == "/" ? "\<bs>" : ""
    endfunc
    cnoremap <expr> / wildmenumode() ? Spacey()."/<c-z>" : "/"

Possibly asked questions:

What about backwards compatibility?
====

Just do nothing and your existing 'wildchar' and 'wildcharm' will keep working.

Doesn't `<c-z>` mean suspend?
====

Not in cmdline mode. If it would then the recommended wildcharm would not
have been `<c-z>` to start with.

My config relies on `:<c-z>` being a synonym to `:<nop>`!
====
just no.
This commit is contained in:
Björn Linse
2020-12-01 00:15:12 +01:00
parent aec61074a9
commit bed9839f46
4 changed files with 66 additions and 2 deletions

View File

@@ -442,6 +442,7 @@ function module.new_argv(...)
'NVIM_LOG_FILE',
'NVIM_RPLUGIN_MANIFEST',
'GCOV_ERROR_FILE',
'XDG_DATA_DIRS',
'TMPDIR',
}) do
if not env_tbl[k] then

View File

@@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen')
local clear, feed, command = helpers.clear, helpers.feed, helpers.command
local iswin = helpers.iswin
local funcs = helpers.funcs
local meths = helpers.meths
local eq = helpers.eq
local eval = helpers.eval
local retry = helpers.retry
@@ -396,6 +397,64 @@ describe("'wildmenu'", function()
|
]])
end)
it('works with c_CTRL_Z standard mapping', function()
screen:set_default_attr_ids {
[1] = {bold = true, foreground = Screen.colors.Blue1};
[2] = {foreground = Screen.colors.Grey0, background = Screen.colors.Yellow};
[3] = {bold = true, reverse = true};
}
-- Wildcharm? where we are going we aint't no need no wildcharm.
eq(0, meths.get_option'wildcharm')
-- Don't mess the defaults yet (neovim is about backwards compatibility)
eq(9, meths.get_option'wildchar')
-- Lol what is cnoremap? Some say it can define mappings.
command 'set wildchar=0'
eq(0, meths.get_option'wildchar')
command 'cnoremap <f2> <c-z>'
feed(':syntax <f2>')
screen:expect{grid=[[
|
{1:~ }|
{1:~ }|
{2:case}{3: clear cluster > }|
:syntax case^ |
]]}
feed '<esc>'
command 'set wildmode=longest:full,full'
-- this will get cleaner once we have native lua expr mappings:
command [[cnoremap <expr> <tab> luaeval("not rawset(_G, 'coin', not coin).coin") ? "<c-z>" : "c"]]
feed ':syntax <tab>'
screen:expect{grid=[[
|
{1:~ }|
{1:~ }|
{1:~ }|
:syntax c^ |
]]}
feed '<tab>'
screen:expect{grid=[[
|
{1:~ }|
{1:~ }|
{3:case clear cluster > }|
:syntax c^ |
]]}
feed '<tab>'
screen:expect{grid=[[
|
{1:~ }|
{1:~ }|
{1:~ }|
:syntax cc^ |
]]}
end)
end)
describe('command line completion', function()