Skip to content

Commit df1851d

Browse files
authored
feat(live_grep): add buffer mode (#327)
* WIP * feat(live grep): add buffer mode * WIP * feat(live_grep): add buffer mode * feat(live_grep): add buffer mode
1 parent 91146a5 commit df1851d

File tree

1 file changed

+118
-12
lines changed

1 file changed

+118
-12
lines changed

lua/fzfx/config.lua

Lines changed: 118 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ local default_restricted_rg = {
157157
"-n",
158158
"--no-heading",
159159
"--color=always",
160+
"-H",
160161
"-S",
161162
}
162163
-- "rg --column -n --no-heading --color=always -S -uu"
@@ -166,6 +167,7 @@ local default_unrestricted_rg = {
166167
"-n",
167168
"--no-heading",
168169
"--color=always",
170+
"-H",
169171
"-S",
170172
"-uu",
171173
}
@@ -191,20 +193,59 @@ local default_unrestricted_grep = {
191193
}
192194

193195
--- @param query string
194-
--- @param unrestricted boolean
196+
--- @param context PipelineContext
197+
--- @param opts {unrestricted:boolean?,buffer:boolean?}
195198
--- @return string[]|nil
196-
local function live_grep_provider(query, unrestricted)
199+
local function live_grep_provider(query, context, opts)
197200
local parsed_query = utils.parse_flag_query(query or "")
198201
local content = parsed_query[1]
199202
local option = parsed_query[2]
200203

201204
local args = nil
202205
if vim.fn.executable("rg") > 0 then
203-
args = unrestricted and vim.deepcopy(default_unrestricted_rg)
204-
or vim.deepcopy(default_restricted_rg)
206+
if type(opts) == "table" and opts.unrestricted then
207+
args = vim.deepcopy(default_unrestricted_rg)
208+
elseif type(opts) == "table" and opts.buffer then
209+
args = vim.deepcopy(default_unrestricted_rg)
210+
local current_bufpath = utils.is_buf_valid(context.bufnr)
211+
and path.reduce(vim.api.nvim_buf_get_name(context.bufnr))
212+
or nil
213+
if
214+
type(current_bufpath) ~= "string"
215+
or string.len(current_bufpath) == 0
216+
then
217+
log.echo(
218+
LogLevels.INFO,
219+
"invalid buffer (%s).",
220+
vim.inspect(context.bufnr)
221+
)
222+
return nil
223+
end
224+
else
225+
args = vim.deepcopy(default_restricted_rg)
226+
end
205227
elseif vim.fn.executable("grep") > 0 or vim.fn.executable("ggrep") > 0 then
206-
args = unrestricted and vim.deepcopy(default_unrestricted_grep)
207-
or vim.deepcopy(default_restricted_grep)
228+
if type(opts) == "table" and opts.unrestricted then
229+
args = vim.deepcopy(default_unrestricted_grep)
230+
elseif type(opts) == "table" and opts.buffer then
231+
args = vim.deepcopy(default_unrestricted_grep)
232+
local current_bufpath = utils.is_buf_valid(context.bufnr)
233+
and path.reduce(vim.api.nvim_buf_get_name(context.bufnr))
234+
or nil
235+
if
236+
type(current_bufpath) ~= "string"
237+
or string.len(current_bufpath) == 0
238+
then
239+
log.echo(
240+
LogLevels.INFO,
241+
"invalid buffer (%s).",
242+
vim.inspect(context.bufnr)
243+
)
244+
return nil
245+
end
246+
else
247+
args = vim.deepcopy(default_restricted_grep)
248+
end
208249
else
209250
log.echo(LogLevels.INFO, "no rg/grep command found.")
210251
return nil
@@ -217,8 +258,15 @@ local function live_grep_provider(query, unrestricted)
217258
end
218259
end
219260
end
220-
table.insert(args, "--")
221-
table.insert(args, content)
261+
if type(opts) == "table" and opts.buffer then
262+
local current_bufpath =
263+
path.reduce(vim.api.nvim_buf_get_name(context.bufnr))
264+
table.insert(args, content)
265+
table.insert(args, current_bufpath)
266+
else
267+
-- table.insert(args, "--")
268+
table.insert(args, content)
269+
end
222270
return args
223271
end
224272

@@ -1859,6 +1907,16 @@ local Defaults = {
18591907
},
18601908
default_provider = "unrestricted_mode",
18611909
},
1910+
{
1911+
name = "FzfxLiveGrepB",
1912+
feed = CommandFeedEnum.ARGS,
1913+
opts = {
1914+
bang = true,
1915+
nargs = "*",
1916+
desc = "Live grep on current buffer",
1917+
},
1918+
default_provider = "buffer_mode",
1919+
},
18621920
-- visual
18631921
{
18641922
name = "FzfxLiveGrepV",
@@ -1880,6 +1938,16 @@ local Defaults = {
18801938
},
18811939
default_provider = "unrestricted_mode",
18821940
},
1941+
{
1942+
name = "FzfxLiveGrepBV",
1943+
feed = CommandFeedEnum.VISUAL,
1944+
opts = {
1945+
bang = true,
1946+
range = true,
1947+
desc = "Live grep on current buffer by visual select",
1948+
},
1949+
default_provider = "buffer_mode",
1950+
},
18831951
-- cword
18841952
{
18851953
name = "FzfxLiveGrepW",
@@ -1899,6 +1967,15 @@ local Defaults = {
18991967
},
19001968
default_provider = "unrestricted_mode",
19011969
},
1970+
{
1971+
name = "FzfxLiveGrepBW",
1972+
feed = CommandFeedEnum.CWORD,
1973+
opts = {
1974+
bang = true,
1975+
desc = "Live grep on current buffer by cursor word",
1976+
},
1977+
default_provider = "buffer_mode",
1978+
},
19021979
-- put
19031980
{
19041981
name = "FzfxLiveGrepP",
@@ -1918,12 +1995,21 @@ local Defaults = {
19181995
},
19191996
default_provider = "unrestricted_mode",
19201997
},
1998+
{
1999+
name = "FzfxLiveGrepBP",
2000+
feed = CommandFeedEnum.PUT,
2001+
opts = {
2002+
bang = true,
2003+
desc = "Live grep on current buffer by yank text",
2004+
},
2005+
default_provider = "buffer_mode",
2006+
},
19212007
},
19222008
providers = {
19232009
restricted_mode = {
19242010
key = "ctrl-r",
1925-
provider = function(query)
1926-
return live_grep_provider(query, false)
2011+
provider = function(query, context)
2012+
return live_grep_provider(query, context, {})
19272013
end,
19282014
provider_type = ProviderTypeEnum.COMMAND_LIST,
19292015
line_opts = {
@@ -1934,8 +2020,24 @@ local Defaults = {
19342020
},
19352021
unrestricted_mode = {
19362022
key = "ctrl-u",
1937-
provider = function(query)
1938-
return live_grep_provider(query, true)
2023+
provider = function(query, context)
2024+
return live_grep_provider(
2025+
query,
2026+
context,
2027+
{ unrestricted = true }
2028+
)
2029+
end,
2030+
provider_type = ProviderTypeEnum.COMMAND_LIST,
2031+
line_opts = {
2032+
prepend_icon_by_ft = true,
2033+
prepend_icon_path_delimiter = ":",
2034+
prepend_icon_path_position = 1,
2035+
},
2036+
},
2037+
buffer_mode = {
2038+
key = "ctrl-o",
2039+
provider = function(query, context)
2040+
return live_grep_provider(query, context, { buffer = true })
19392041
end,
19402042
provider_type = ProviderTypeEnum.COMMAND_LIST,
19412043
line_opts = {
@@ -1954,6 +2056,10 @@ local Defaults = {
19542056
previewer = file_previewer_grep,
19552057
previewer_type = PreviewerTypeEnum.COMMAND_LIST,
19562058
},
2059+
buffer_mode = {
2060+
previewer = file_previewer_grep,
2061+
previewer_type = PreviewerTypeEnum.COMMAND_LIST,
2062+
},
19572063
},
19582064
actions = {
19592065
["esc"] = require("fzfx.actions").nop,

0 commit comments

Comments
 (0)