From f6e07c56597ab24b9ae7b5986206091756038c29 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 31 Mar 2024 22:49:58 +0800 Subject: [PATCH] feat(recordkey): support nvim 0.10.0 --- autoload/SpaceVim/autocmds.vim | 2 + autoload/SpaceVim/layers/telescope.vim | 3 +- lua/spacevim/plugin/record-key.lua | 197 ++++++++++++++----------- 3 files changed, 112 insertions(+), 90 deletions(-) diff --git a/autoload/SpaceVim/autocmds.vim b/autoload/SpaceVim/autocmds.vim index 9531c760f..e0751b51f 100644 --- a/autoload/SpaceVim/autocmds.vim +++ b/autoload/SpaceVim/autocmds.vim @@ -122,6 +122,8 @@ function! s:fix_colorschem_in_SpaceVim() abort hi VertSplit guibg=#282828 guifg=#181A1F elseif g:colors_name ==# 'one' hi VertSplit guibg=#282c34 guifg=#181A1F + hi SPCFloatBorder guibg=#282c34 guifg=#181A1F + hi SPCNormalFloat guifg=#abb2bf guibg=#282c34 elseif g:colors_name ==# 'jellybeans' hi VertSplit guibg=#151515 guifg=#080808 elseif g:colors_name ==# 'nord' diff --git a/autoload/SpaceVim/layers/telescope.vim b/autoload/SpaceVim/layers/telescope.vim index d497b3668..dc95795f9 100644 --- a/autoload/SpaceVim/layers/telescope.vim +++ b/autoload/SpaceVim/layers/telescope.vim @@ -185,7 +185,8 @@ function! SpaceVim#layers#telescope#config() abort " https://github.com/nvim-telescope/telescope.nvim/issues/161 autocmd FileType TelescopePrompt call deoplete#custom#buffer_option('auto_complete', v:false) endif - autocmd FileType TelescopePrompt iunmap jk + " @fixme 无法移除 jk 映射 + " autocmd FileType TelescopePrompt iunmap jk augroup END endfunction diff --git a/lua/spacevim/plugin/record-key.lua b/lua/spacevim/plugin/record-key.lua index e4522bce4..21e96fcc2 100644 --- a/lua/spacevim/plugin/record-key.lua +++ b/lua/spacevim/plugin/record-key.lua @@ -1,89 +1,108 @@ ---============================================================================= --- record-key.lua --- record key for nvim --- Copyright (c) 2016-2022 Wang Shidong & Contributors --- Author: Wang Shidong < wsdjeg@outlook.com > --- URL: https://spacevim.org --- License: GPLv3 ---============================================================================= - -local M = {} - -local timeout = 3000 - -local max_count = 5 - -local keys = {} - -local pos = 0 - -local enabled = false -local ns_is = vim.api.nvim_create_namespace('record-key') - -local function show_key(key) - local save_ei = vim.o.eventignore - vim.o.eventignore = 'all' - local buf = vim.api.nvim_create_buf(false, true) - vim.api.nvim_buf_set_lines(buf, 0, -1, false, { string.format('%8s', key) }) - - local winid = vim.api.nvim_open_win(buf, false, { - relative = 'editor', - width = 8, - height = 1, - row = vim.o.lines - 10 - pos * 3, - col = vim.o.columns - 25, - focusable = false, - noautocmd = true, - border = "single" - }) - vim.fn.setbufvar(buf, '&number', 0) - vim.fn.setbufvar(buf, '&relativenumber', 0) - vim.fn.setbufvar(buf, '&cursorline', 0) - vim.fn.setbufvar(buf, '&bufhidden', 'wipe') - vim.api.nvim_win_set_option(winid, 'winhighlight', 'NormalFloat:Normal') - vim.fn.timer_start(timeout, function() - local ei = vim.o.eventignore - vim.o.eventignore = 'all' - if vim.api.nvim_win_is_valid(winid) then - vim.api.nvim_win_close(winid, true) - end - vim.o.eventignore = ei - end, { ['repeat'] = 1 }) - vim.o.eventignore = save_ei -end - -local function display() - pos = 0 - if #keys > max_count then - for i = 1, max_count, 1 do - show_key(keys[#keys - i + 1]) - pos = pos + 1 - end - else - for i = 1, #keys, 1 do - show_key(keys[#keys - i + 1]) - pos = pos + 1 - end - end -end - -local function on_key(key) - table.insert(keys, vim.fn.keytrans(key)) - vim.fn.timer_start(timeout, function() - if #keys > 0 then - table.remove(keys, 1) - end - end, { ['repeat'] = 1 }) - display() -end - -function M.toggle() - if enabled then - vim.on_key(nil, ns_is) - enabled = false - else - vim.on_key(on_key, ns_is) - enabled = true - end -end - -return M +--============================================================================= +-- record-key.lua --- record key for nvim +-- Copyright (c) 2016-2022 Wang Shidong & Contributors +-- Author: Wang Shidong < wsdjeg@outlook.com > +-- URL: https://spacevim.org +-- License: GPLv3 +--============================================================================= + +local M = {} + +local timeout = 3000 + +local max_count = 5 + +local keys = {} + +local pos = 0 + +local enabled = false +local ns_is = vim.api.nvim_create_namespace('record-key') + +local function show_key(key) + local save_ei = vim.o.eventignore + vim.o.eventignore = 'all' + local buf = vim.api.nvim_create_buf(false, true) + vim.api.nvim_buf_set_lines(buf, 0, -1, false, { string.format('%8s', key) }) + + local w = 8 + + if vim.fn.strdisplaywidth(key) > 8 then + w = vim.fn.strdisplaywidth(key) + 2 + end + + local winid = vim.api.nvim_open_win(buf, false, { + relative = 'editor', + width = w, + height = 1, + row = vim.o.lines - w - 2 - pos * 3, + col = vim.o.columns - 25, + focusable = false, + noautocmd = true, + border = 'single', + }) + vim.fn.setbufvar(buf, '&number', 0) + vim.fn.setbufvar(buf, '&relativenumber', 0) + vim.fn.setbufvar(buf, '&cursorline', 0) + vim.fn.setbufvar(buf, '&bufhidden', 'wipe') + vim.api.nvim_win_set_option(winid, 'winhighlight', 'NormalFloat:Normal,FloatBorder:WinSeparator') + vim.fn.timer_start(timeout, function() + local ei = vim.o.eventignore + vim.o.eventignore = 'all' + if vim.api.nvim_win_is_valid(winid) then + vim.api.nvim_win_close(winid, true) + end + vim.o.eventignore = ei + end, { ['repeat'] = 1 }) + vim.o.eventignore = save_ei +end + +local function display() + pos = 0 + if #keys > max_count then + for i = 1, max_count, 1 do + show_key(keys[#keys - i + 1]) + pos = pos + 1 + end + else + for i = 1, #keys, 1 do + show_key(keys[#keys - i + 1]) + pos = pos + 1 + end + end +end + +local function on_key(oldkey, key) + if not key then + table.insert(keys, vim.fn.keytrans(oldkey)) + vim.fn.timer_start(timeout, function() + if #keys > 0 then + table.remove(keys, 1) + end + end, { ['repeat'] = 1 }) + display() + else + if #key == 0 then + return + end + table.insert(keys, vim.fn.keytrans(key)) + vim.fn.timer_start(timeout, function() + if #keys > 0 then + table.remove(keys, 1) + end + end, { ['repeat'] = 1 }) + display() + end +end + +function M.toggle() + if enabled then + vim.on_key(nil, ns_is) + enabled = false + else + vim.on_key(on_key, ns_is) + enabled = true + end +end + +return M