Skip to content

Commit

Permalink
fix: create option is_block_ui_break
Browse files Browse the repository at this point in the history
If you paste something to spectre that mapping make the modify it hard.
so make an option for mapping backspace and enter.

update README.md
  • Loading branch information
zztrieuzz committed Aug 25, 2023
1 parent eb17a85 commit 411cee6
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 49 deletions.
21 changes: 13 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ with `:e` because `sed` is replace outside vim.
require('spectre').setup()
```

Change any settings if you don't like them. **Don't just copy all** as
<details>
<summary>Config</summary>
Change any settings if you don't like them. **Don't just copy all** as
settings may change as the plugin is updated so it may be better use
the default settings.

Expand Down Expand Up @@ -256,10 +258,13 @@ require('spectre').setup({
replace_vim_cmd = "cdo",
is_open_target_win = true, --open file on opener window
is_insert_mode = false -- start open panel on is_insert_mode
is_block_ui_break = false -- mapping backspace and enter key to avoid ui break
})

```

</details>

### Custom Functions

```lua
Expand Down Expand Up @@ -329,8 +334,10 @@ Thanks to everyone who sponsors my projects and makes continued development and
)
```

- What if I have remapped keys in my neovim config?

- How to avoid ui break?
```lua
require(spectre).setup({ is_block_ui_break = true })
```
> [Spectre hardcodes some mappings in order to work correctly](https://github.com/nvim-pack/nvim-spectre/blob/1abe23ec9b7bc3082164f4cb842d521ef70e080e/lua/spectre/init.lua#L175). You can remap them as described above. You are allowed to create as many mappings as you want. For name and description choose any value. 'map' and 'cmd' are the only important fields.
- Is spectre compatible with the plugin mini.animate?
Expand All @@ -339,8 +346,6 @@ Thanks to everyone who sponsors my projects and makes continued development and
- Why is it called Spectre?

> I wanted to call it `Search Panel` but this name is not cool.
> I got the name of a hero on a game.
> Spectre has a skill to find enemy on global map so I use it:)
I wanted to call it `Search Panel` but this name is not cool.
I got the name of a hero on a game.
Spectre has a skill to find enemy on global map so I use it:)
1 change: 1 addition & 0 deletions lua/spectre/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ local config = {
replace_vim_cmd = "cdo",
is_open_target_win = true,
is_insert_mode = false,
is_block_ui_break = false
}

if vim.loop.os_uname().sysname == 'Darwin' then
Expand Down
83 changes: 42 additions & 41 deletions lua/spectre/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ local state_utils = require('spectre.state_utils')
local utils = require('spectre.utils')
local ui = require('spectre.ui')
local log = require('spectre._log')
local highlight = require('spectre.highlight')
require('spectre.highlight')
local async = require('plenary.async')

local scheduler = async.util.scheduler
Expand Down Expand Up @@ -188,7 +188,6 @@ function M.mapping_buffer(bufnr)
api.nvim_buf_set_keymap(bufnr, 'n', 'o', 'ji', map_opt) -- don't append line on can make the UI wrong
api.nvim_buf_set_keymap(bufnr, 'n', 'O', 'ki', map_opt)
api.nvim_buf_set_keymap(bufnr, 'n', 'u', "", map_opt) -- disable undo, It breaks the UI.
api.nvim_buf_set_keymap(bufnr, 'i', '<CR>', "", map_opt) -- disable ENTER on insert mode, it breaks the UI.
api.nvim_buf_set_keymap(bufnr, 'n', '<Tab>', "<cmd>lua require('spectre').tab()<cr>", map_opt)
api.nvim_buf_set_keymap(bufnr, 'n', '<S-Tab>', "<cmd>lua require('spectre').tab_shift()<cr>", map_opt)
api.nvim_buf_set_keymap(bufnr, 'n', '?', "<cmd>lua require('spectre').show_help()<cr>", map_opt)
Expand All @@ -213,42 +212,46 @@ function M.mapping_buffer(bufnr)
end,
desc = "Ensure spectre state when its window is closed by any mean"
})
-- Anti UI breakage
-- * If the user enters insert mode on a forbidden line: leave insert mode.
-- * If the user passes over a forbidden line on insert mode: leave insert mode.
-- * Disable backspace jumping lines.
local backspace = vim.api.nvim_get_option('backspace')
local anti_insert_breakage_group = vim.api.nvim_create_augroup("SpectreAntiInsertBreakage", { clear = true })
vim.api.nvim_create_autocmd({"InsertEnter", "CursorMovedI"}, {
group = anti_insert_breakage_group,
pattern = "*",
callback = function()
local current_filetype = vim.bo.filetype
if current_filetype == "spectre_panel" then
vim.cmd("set backspace=indent,start")
local line = vim.api.nvim_win_get_cursor(0)[1]
if line == 1 or line == 2 or line == 4 or line == 6 or line >= 8
then
vim.api.nvim_feedkeys(
vim.api.nvim_replace_termcodes('<Esc>', true, false, true),
'n', true
)

if state.user_config.is_block_ui_break then
-- Anti UI breakage
-- * If the user enters insert mode on a forbidden line: leave insert mode.
-- * If the user passes over a forbidden line on insert mode: leave insert mode.
-- * Disable backspace jumping lines.
local backspace = vim.api.nvim_get_option('backspace')
local anti_insert_breakage_group = vim.api.nvim_create_augroup("SpectreAntiInsertBreakage", { clear = true })
vim.api.nvim_create_autocmd({ "InsertEnter", "CursorMovedI" }, {
group = anti_insert_breakage_group,
pattern = "*",
callback = function()
local current_filetype = vim.bo.filetype
if current_filetype == "spectre_panel" then
vim.cmd("set backspace=indent,start")
local line = vim.api.nvim_win_get_cursor(0)[1]
if line == 1 or line == 2 or line == 4 or line == 6 or line >= 8
then
vim.api.nvim_feedkeys(
vim.api.nvim_replace_termcodes('<Esc>', true, false, true),
'n', true
)
end
end
end
end,
desc = "spectre anti-insert-breakage → protect the user from breaking the UI while on insert mode."
})
vim.api.nvim_create_autocmd({"WinLeave"}, {
group = anti_insert_breakage_group,
pattern = "*",
callback = function()
local current_filetype = vim.bo.filetype
if current_filetype == "spectre_panel" then
vim.cmd("set backspace=" .. backspace)
end
end,
desc = "spectre anti-insert-breakage → restore the 'backspace' option."
})
end,
desc = "spectre anti-insert-breakage → protect the user from breaking the UI while on insert mode."
})
vim.api.nvim_create_autocmd({ "WinLeave" }, {
group = anti_insert_breakage_group,
pattern = "*",
callback = function()
local current_filetype = vim.bo.filetype
if current_filetype == "spectre_panel" then
vim.cmd("set backspace=" .. backspace)
end
end,
desc = "spectre anti-insert-breakage → restore the 'backspace' option."
})
api.nvim_buf_set_keymap(bufnr, 'i', '<CR>', "", map_opt) -- disable ENTER on insert mode, it breaks the UI.
end
end

local function hl_match(opts)
Expand Down Expand Up @@ -712,15 +715,13 @@ end
M.tab = function()
local line = vim.api.nvim_win_get_cursor(0)[1]
if line == 3 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {5, 1}) end
if line == 5 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {7, 1})
end
if line == 5 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {7, 1}) end
end

M.tab_shift = function()
local line = vim.api.nvim_win_get_cursor(0)[1]
if line == 5 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {3, 1}) end
if line == 7 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {5, 1})
end
if line == 7 then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), {5, 1}) end
end

return M

0 comments on commit 411cee6

Please sign in to comment.