Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F31067
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/lua/ivy/utils.lua b/lua/ivy/utils.lua
index 332df87..92f74e0 100644
--- a/lua/ivy/utils.lua
+++ b/lua/ivy/utils.lua
@@ -1,96 +1,110 @@
local utils = {}
-- A list of all of the actions defined by ivy. The callback function can
-- implement as many of them as necessary. As a minimum it should implement the
-- "EDIT" action that is called on the default complete.
utils.actions = {
EDIT = "EDIT",
CHECKPOINT = "CHECKPOINT",
VSPLIT = "VSPLIT",
SPLIT = "SPLIT",
}
utils.command_map = {
[utils.actions.EDIT] = "edit",
[utils.actions.CHECKPOINT] = "edit",
[utils.actions.VSPLIT] = "vsplit",
[utils.actions.SPLIT] = "split",
}
+utils.existing_command_map = {
+ [utils.actions.EDIT] = "buffer",
+ [utils.actions.CHECKPOINT] = "buffer",
+ [utils.actions.VSPLIT] = "vsplit | buffer",
+ [utils.actions.SPLIT] = "split | buffer",
+}
+
utils.command_finder = function(command, min)
if min == nil then
min = 3
end
return function(input)
-- Dont run the commands unless we have somting to search that wont
-- return a ton of results or on some commands the command files with
-- no search term
if #input < min then
return "-- Please type more than " .. min .. " chars --"
end
-- TODO(ade): Think if we want to start escaping the command here. I
-- dont know if its causing issues while trying to use regex especially
-- with word boundaries `input:gsub("'", "\\'"):gsub('"', '\\"')`
local handle = io.popen(command .. " " .. input .. " 2>&1 || true")
if handle == nil then
return {}
end
local results = {}
for line in handle:lines() do
table.insert(results, { content = line })
end
handle:close()
return results
end
end
utils.vimgrep_action = function()
return function(item, action)
-- Match file and line form vimgrep style commands
local file = item:match "([^:]+):"
local line = item:match ":(%d+):"
-- Cant do anything if we cant find a file to go to
if file == nil then
return
end
utils.file_action()(file, action)
if line ~= nil then
vim.cmd(line)
end
end
end
utils.file_action = function()
return function(file, action)
if file == nil then
return
end
- local command = utils.command_map[action]
+ local buffer_number = vim.fn.bufnr(file)
+ local command
+ if buffer_number > -1 then
+ command = utils.existing_command_map[action]
+ else
+ command = utils.command_map[action]
+ end
+
if command == nil then
vim.api.nvim_err_writeln("[IVY] The file action is unable the handel the action " .. action)
return
end
vim.cmd(command .. " " .. utils.escape_file_name(file))
end
end
utils.line_action = function()
return function(item)
local line = item:match "^%s+(%d+):"
vim.cmd(line)
end
end
utils.escape_file_name = function(input)
return string.gsub(input, "([$])", "\\%1")
end
return utils
diff --git a/lua/ivy/vim_mock.lua b/lua/ivy/vim_mock.lua
index f8febd5..e333b57 100644
--- a/lua/ivy/vim_mock.lua
+++ b/lua/ivy/vim_mock.lua
@@ -1,84 +1,89 @@
local mock = {
commands = {},
lines = {},
cursors = {},
}
mock.get_lines = function()
return mock.lines
end
mock.get_commands = function()
return mock.commands
end
mock.reset = function()
mock.commands = {}
mock.lines = {}
mock.cursors = {}
_G.vim = {
notify = function() end,
cmd = function(cmd)
table.insert(mock.commands, cmd)
end,
api = {
nvim_echo = function() end,
nvim_get_current_win = function()
return 10
end,
nvim_command = function() end,
nvim_win_get_buf = function()
return 10
end,
nvim_win_set_option = function() end,
nvim_buf_set_option = function() end,
nvim_buf_set_name = function() end,
nvim_buf_set_var = function() end,
nvim_buf_set_keymap = function() end,
nvim_buf_delete = function() end,
nvim_buf_set_lines = function(buffer_number, state_index, end_index, _, items)
local new_lines = {}
for index = 1, state_index do
if mock.lines[buffer_number][index] == nil then
table.insert(new_lines, "")
else
table.insert(new_lines, mock.lines[buffer_number][index])
end
end
for index = 1, #items do
table.insert(new_lines, items[index])
end
if end_index ~= -1 then
error("Mock of nvim_buf_set_lines dose not support a end_index grater than -1 found " .. end_index)
end
mock.lines[buffer_number] = new_lines
end,
nvim_win_set_height = function() end,
nvim_win_set_cursor = function(window_number, position)
mock.cursors[window_number] = position
end,
nvim_buf_get_lines = function(buffer_number, start_index, end_index)
local lines = {}
for index = start_index, end_index do
table.insert(lines, mock.lines[buffer_number][index + 1])
end
if #lines == 0 then
return nil
end
return lines
end,
},
+ fn = {
+ bufnr = function()
+ return -1
+ end,
+ },
schedule = function(callback)
callback()
end,
}
end
return mock
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Sep 10, 6:15 PM (8 h, 51 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9052
Default Alt Text
(5 KB)
Attached To
Mode
R1 ivy.nvim
Attached
Detach File
Event Timeline
Log In to Comment